Avro как протокол сериализации для http-сокетов, используемых различными языковыми клиентами - PullRequest
0 голосов
/ 29 мая 2018

У меня есть служба сокетов, которая отправляет сообщения в формате JSON.Типичное сообщение выглядит так:

{
    "messageType": "UserRecievedMessage",
    "version": "1.0",
    "body": {
        "sender_user_id": 123456,
        "ts": "1527624150",
        "message": "Hi, man!"
    }
}

Клиент (JavaScript / Java / Python / PHP) получает json, читает messageType , версия и применяет правильный синтаксический анализаторчитать сообщение.Канал с одним сокетом может передавать сообщения разных типов.

Я ищу более круглое колесо, чем сегодня.Могу ли я использовать Avro?

Почему Avro?

  • Все мои клиенты смогут использовать некоторую библиотеку Avro для чтения данных, сериализованных в avro, вместо простого json.
  • развивающаяся схема
  • Я могу сгенерировать классы php / java / JavaScript для своих клиентов, чтобы они работали с более высоким уровнем абстракции и у них было меньше шансов разорвать контракт.

Мои опасения:

  • могу ли я генерировать классы в php / javascript / java / swift из схемы avro?
  • имеют ли эти языки надлежащую поддержкуAvro?Было бы сложно проверить все угловые случаи для каждого языка заранее.
  • как правильно подражать "конверту"?Клиент все равно должен прочитать «messageType», а затем взять байты поля тела и десериализовать его в конкретный класс.
...