Thriftは、プログラミング言語のサービスを定義および作成するために使用されるインターフェース定義言語およびバイナリ通信プロトコルです[ 2 ]。[ 3 ] Facebookによって開発されました。2008 年以降、Apache Software Foundationのオープンソースプロジェクトとなっています。
Thrift は、リモートプロシージャコール(RPC) フレームワークを使用し、ソフトウェアスタックとコード生成エンジンを組み合わせてクロスプラットフォームサービスを構築します。Thrift は、ActionScript、C、C++、[ 4 ] C#、[ 5 ] Cocoa、Delphi、Erlang、Go、Haskell、Java、JavaScript、Objective-C、OCaml、Perl、PHP、Python、Ruby、Elixir、Rust、Scala、Smalltalk、Swiftなど、さまざまな言語とフレームワークで記述されたアプリケーションを接続できます。[ 6 ]この実装は、Facebook が 2007 年 4 月に公開した技術文書で説明されており、現在は Apache でホストされています。[ 7 ] [ 8 ]

Thrift には、クライアントとサーバーを作成するための完全なスタックが含まれています。[ 9 ]最上位部分は、Thrift 定義から生成されたコードです。このファイルから、サービスはクライアントとプロセッサのコードを生成します。組み込み型とは異なり、生成されたコードの結果として作成されたデータ構造が送信されます。プロトコルとトランスポート層は、ランタイムライブラリの一部です。Thrift を使用すると、コードを再コンパイルすることなく、サービスを定義し、プロトコルとトランスポートを変更できます。クライアント部分に加えて、Thrift には、ブロッキング、ノンブロッキング、マルチスレッドサーバーなどのサーバーインフラストラクチャが含まれています。スタックの基盤となる I/O 部分は、プログラミング言語ごとに異なる方法で実装されています。[ 9 ]
Thriftは多数のプロトコルをサポートしています。[ 9 ]
サポートされているトランスポートは以下のとおりです。
ByteArrayOutputStream内部的にシンプルなものを使用します。Thriftは、以下のサーバーも提供しています。
ThriftはC++で記述されていますが、他のプログラミング言語のコードも生成できます。Thriftサービスを作成するには、サービスを記述するThriftファイルを作成し、目的の言語でコードを生成し、サーバーを起動するコードを記述し、クライアントから呼び出す必要があります。記述ファイルの例を以下に示します。
enum PhoneType { HOME , WORK , MOBILE , OTHER }struct Phone { 1 : i32 id , 2 : string number , 3 : PhoneType type }service PhoneService { Phone findById ( 1 : i32 id ), list < Phone > findAll ( ) }Thrift はこの記述情報からコードを生成します。たとえば、Java では、 はクラス内にPhoneType記述されます。enumPhone
は、バイナリ通信プロトコルである Apache の独立したプロジェクトです。
コード生成を使用して、Thriftはクライアントやサーバーの作成に使用できる一連のファイルを作成します。