Apache Thrift

Thrift is an interface definition language and 
binary communication protocol
used for defining and creating services for numerous programming languages. It forms a remote procedure call (RPC) framework and was developed at Facebook for "scalable cross-language services development". It combines a software stack with a code generation engine to build cross-platform services which can connect applications written in a variety of languages and frameworks, including ActionScript, C, C++, C#, Cappuccino, Cocoa, Delphi, Erlang, Go, Haskell, Java, JavaScript, Objective-C, OCaml, Perl, PHP, Python, Ruby, Elixir, Rust, Scala, Smalltalk and Swift. It was developed at Facebook and it is now (2020) an open source project in the Apache Software Foundation. The implementation was described in an April 2007 technical paper released by Facebook, now hosted on Apache.
Architecture.
Thrift includes a complete stack for creating clients and servers. The top part is generated code from the Thrift definition. From this file, the services generate client and processor code. In contrast to built-in types, created data structures are sent as result in generated code. The protocol and transport layer are part of the runtime library. With Thrift, it is possible to define a service and change the protocol and transport without recompiling the code. Besides the client part, Thrift includes server infrastructure to tie protocols and transports together, like blocking, non-blocking, and multi-threaded servers. The underlying I/O part of the stack is implemented differently for different languages.
Thrift supports a number of protocols:
The supported "transports" are:
Thrift also provides a number of servers, which are
Benefits.
Some stated benefits of Thrift include:
Creating a Thrift service.
Thrift is written in C++, but can create code for a number of languages. To create a Thrift service, one has to write Thrift files that describe it, generate the code in the destination language, write some code to start the server, and call it from the client. Here is a code example of such a description file:
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 will generate the code out of this descriptive information. For instance, in Java, the codice_2 will be a simple codice_3 inside the codice_4 class.