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

Reply via email to