Apache Thrift ist ein von Facebook entwickeltes (2007) und 2008 als Open Source veröffentlichtes Cross-Language-RPC- und Serialisierungs-Framework. Über eine IDL-Datei (.thrift) definiert man Datentypen und Services; der Compiler thrift erzeugt daraus typsicheren Client- und Server-Code für viele Sprachen.
Die Thrift-IDL
Die IDL kennt struct, enum, union, exception, const und service. Felder tragen Nummern und optionale Defaults:
struct Person {
1: string name,
2: i32 id,
3: optional string email
}
service PersonStore {
Person get(1: i32 id),
void put(1: Person p)
}
Basistypen sind bool, byte, i16, i32, i64, double, string, binary sowie Container (list, set, map).
Der thrift-Compiler
Der Compiler erzeugt mit --gen Code für die Zielsprache; -r verarbeitet Includes rekursiv, --out setzt das Ausgabeverzeichnis:
# Java-Code in gen-java erzeugen
thrift -r --gen java tutorial.thrift
# Python-Code in ein eigenes Verzeichnis
thrift -r --out generated --gen py calci.thrift
Unterstützte Sprach-Engines umfassen u.a. java, py, cpp, go, js, ruby, php, perl, csharp und swift. Ohne Angabe legt der Compiler Ordner wie gen-java oder gen-py im aktuellen Verzeichnis an.
Transporte, Protokolle, Server
Thrift ist bewusst geschichtet: Transport (z.B. TSocket, TServerSocket, TFramedTransport), Protocol (Kodierung: TBinaryProtocol — kompakt binär, TCompactProtocol — noch dichter, TJSONProtocol — debug-freundlich) und Server (TSimpleServer für einfache Fälle, TThreadPoolServer, TNonblockingServer).
Verwandte Grundlagen: Protobuf-Befehle (Serialisierung ohne RPC-Schicht) und FlatBuffers (Zero-Copy-Alternative). Typsichere Generierung gibt es auch bei Java und C/C++; textuelle Formate behandelt YAML/TOML/JSON-Befehle.