Расшифровка закодированных данных Protobuf с использованием неподдерживаемой платформы - PullRequest
0 голосов
/ 09 ноября 2018

Я новичок в Protobufs; Я не имел большого воздействия на них. Одна из конечных точек API, от которой нам требуются данные, использует данные в кодировке Protobuf. Обычно это не было бы проблемой, если бы я использовал «поддерживаемый» язык, такой как JavaScript, Java, Python или даже R, для декодирования данных ...

К сожалению, я пытаюсь автоматизировать процесс с помощью Alteryx. Вместо того, чтобы задавать вопросы об Alteryx, у меня есть несколько вопросов о самих Protobufs, поэтому я лучше понимаю эту ситуацию. Я ознакомился с реализацией Protobufs на Java и Python и имею общее представление о том, как их использовать.

Для предположения (пожалуйста, исправьте меня, если я ошибаюсь), Protobuf - это метод сериализации структурированных данных, где схема .proto используется для кодирования / декодирования данных в необработанный двоичный файл. Моя путаница лежит с компилятором. Документация Google и примеры для Python / Java показывают, как компилятор Protobuf (библиотека) необходим для запуска процесса кодирования и декодирования. Читая веб-сайт Google, вы узнаете, что Protobufs «независимы от языка и платформы», но я не понимаю, как это возможно, если вам нужен компилятор (и файл .proto!) Для декодирования. Например, как кто-либо, использующий язык, отличный от языков, где Google создал компилятор, может декодировать данные, закодированные в Protobuf? Я что-то пропустил?

Я полагаю, что я что-то упустил, так как кажется странным, что публичный API может вызвать это ограничение.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

В этом случае нельзя говорить о неподдерживаемой платформе: речь идет больше о языках, для которых вы не можете найти реализацию protobuf. * ​​1001 *

Мои 2 цента: если вы не можете найти реализацию protobuf для своего языка, найдите другой язык, с которым вы знакомы (и популярный в сообществе protobuf), и обработайте сериализацию / десериализацию protobuf с ним. Затем вызовите его через REST API, исполняемый файл ... что угодно

0 голосов
/ 09 ноября 2018

«не зависит от языка / платформы» здесь просто означает, что вы можете надежно получить те же данные с любого языка / платформы / платформы.Формат сериализации определяется независимо и не зависит от нюансов какой-либо конкретной структуры.

Это может показаться низкой чертой, но вы будете удивлены, как много форматов сериализации не смогли его очистить.

Поскольку указан формат, любой может создать инструмент для какой-либо другой платформы.Немного неудобно, если вы не привыкли разбираться в битах, но: вполне выполнимо.Ландшафт protobuf не зависит от Google - вот список некоторых известных инструментов, не принадлежащих Google: https://github.com/protocolbuffers/protobuf/blob/master/docs/third_party.md

Также обратите внимание, что технически вам даже не нужен .proto;вам просто нужен какой-то механизм для указания того, какие поля соответствуют каким номерам полей (так как protobuf не содержит имен).Немногие в этом списке могут работать либо из .proto, либо из поля / числа, заданного другим способом .Преимущество .proto состоит в том, что просто легко передать в виде схемы - и опять же: он не привязан к какому-либо конкретному языку.Вы можете написать плагины для «protoc», чтобы добавить свой собственный инструментарий, поэтому вам не нужно писать собственный парсер с нуля.Или вы можете написать свой собственный парсер с нуля, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...