Hi all, At Prezi, we currently use Thrift for a lot of the internal communication between services. A lot of engineers would like to keep using HTTP + JSON as means of communicating between services, but with some sort of schema.
After evaluating several alternatives, the best idea we had so far was to use the thrift IDL as the schema, and beef up the existing TSimpleJSONProtocol code to read arbitrary JSON messages. What I'm most interested in is whether or not someone else is already doing this? I have a very early stage python implementation of such a protocol here: https://github.com/neumark/thriftmodel/blob/master/thriftmodel/TFlexibleJSONProtocol.py We'll probably create an implementation for Java as well. The most difficult issue with reading JSON is that a lot of existing JSON protocols allow for several different types in a field. My solution was to have an "unboxed union". To illustrate this with an example, if we accept the following messages: {"id": 1, "expires": 32324234234} {"id": 1, "expires": "2014.10.07 10:34"} {"id": 1, "expires": false} Then our Thrift definition would be // Note: this is an unboxed union union { // or struct in my implementation because python has no union yet 1: i64 unix_timestamp, 2: string date_string, 3: bool expiration_switch } struct msg { 1: i64 id, 2: expiry expires } The "expires" field must be read "unboxed" so to speak. What's the best option for encoding this in the thrift IDL? Has anyone considered adding annotations to the IDL for similar purposes? Thanks, Peter
