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.