Где спецификация формата Thrift?
Хотя формат Thrift относительно широко используется (и проект все еще жив), я не смог найти спецификацию для базового формата данных. Или форматы, учитывая, что есть, по-видимому, как минимум два формата; стандартный и компактный.
Учитывая его широкое использование, я надеюсь, что это просто мой плохой google-fu, а спецификация или спецификации существуют (вне исходного кода). Если да, пожалуйста, поделитесь!
EDIT: исходный код Java не так уж плох для определения формата; см. TBinaryProtocol.java и TCompactBinaryProtocol.java; которые содержат примитивы, вызываемые сгенерированными классами (которые расширяют TBase)
EDIT2: в то время как в нем нет спецификации формата, "недостающее руководство" является хорошим показанием.
Ответы
Ответ 1
Формат сообщения Thrift зависит от выбранного протокола сериализации. Вы можете сериализовать объект Thrift с помощью одного из многих протоколов, включая TBinaryProtocol, TCompactProtocol, TJSONProtocol и другие неясные параметры. Протокол описан абстрактно в исходном Thrift Whitepaper PDF с точки зрения API, но в настоящее время не определен нигде в проекте Thrift apache.
Протокол TCompactProtocol немного лучше определен в wiki, но не просто.
Пока доступная документация не будет доступна, вы также можете изучить код библиотеки Python вместе с документацией модуля Python struct
в качестве еще одной опции.
Ответ 2
У меня была такая же проблема, и поэтому я решил написать спецификацию двоичного и компактного протокола Thrift.
Вы можете найти его здесь: https://erikvanoosten.github.io/thrift-missing-specification/
Ответ 3
Есть две двоичные кодировки, компактная и некомпактная.
Обычно в дикой природе вы найдете компактный протокол:
https://github.com/apache/thrift/blob/master/doc/specs/thrift-compact-protocol.md
Хотя некомпактный протокол, вероятно, является устаревшим протоколом:
https://github.com/apache/thrift/blob/master/doc/specs/thrift-binary-protocol.md
Это приблизительный обзор спецификации:
https://github.com/apache/thrift/blob/master/doc/specs/thrift-protocol-spec.md