У меня есть служба сокетов, которая отправляет сообщения в формате 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», а затем взять байты поля тела и десериализовать его в конкретный класс.