Original author(s) | Facebook, Inc. |
---|---|
Developer(s) | Apache Software Foundation |
Stable release | 0.19.0
/ 2 September 2023[1] |
Repository | Thrift repository |
Written in | ActionScript, C, C#, C++, D, Dart, Delphi, Erlang, Go, Haskell, Haxe, Java, JavaScript, Node.js, OCaml, Perl, PHP, Python, Rust, Scala, Smalltalk |
Type | Remote procedure call framework |
License | Apache 2.0 |
Website | thrift |
Thrift is an IDL (Interface Definition Language) and binary communication protocol[2] used for defining and creating services for programming languages.[3] It was developed by Facebook. Since 2020, it is an open source project in the Apache Software Foundation.
It uses a remote procedure call (RPC) framework and combines a software stack with a code generation engine to build cross-platform services. Thrift can connect applications written in a variety of languages and frameworks, including ActionScript, C, C++,[4] C#,[5] Cocoa, Delphi, Erlang, Go, Haskell, Java, JavaScript, Objective-C, OCaml, Perl, PHP, Python, Ruby, Elixir, Rust, Scala, Smalltalk, and Swift.[6] The implementation was described in an April 2007 technical paper released by Facebook, now hosted on Apache.[7][8]
Thrift includes a complete stack for creating clients and servers.[9] The top part is generated code from the Thrift definition. From this file, the services generate client and processor codes. In contrast to built-in types, created data structures are sent as a result of 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 such as blocking, non-blocking, and multi-threaded servers. The underlying I/O part of the stack is implemented differently for different programming languages.[9]
Thrift supports a number of protocols:[9]
The supported transports are:
ByteArrayOutputStream
internally.Thrift also provides a number of servers, which are:
Thrift is written in C++, but can create code for some other programming 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. An 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 PhoneType
will be enum
inside the Phone
class.
Thrift is a separate Apache project which is a binary communication protocol
Using code generation, Thrift creates a set of files which can then be used for creating clients and/or servers.
((cite web))
: CS1 maint: unfit URL (link)
Data exchange formats | |
---|---|
Human readable | |
Binary | |
Products and services |
| ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
People |
| ||||||||||||||||||||||||||||
Open source | |||||||||||||||||||||||||||||
Mass media | |||||||||||||||||||||||||||||
Concepts | |||||||||||||||||||||||||||||
Business |
| ||||||||||||||||||||||||||||
Lists | |||||||||||||||||||||||||||||
Related |
|