Задать вопрос
@ksimmi

Как описать посредством JSON типы данных?

Всем привет.

Есть несколько сервисов написанных на разных языках: Java, Ruby. Межсервисное взаимодействие происходит через Kafka, HTTP и БД. В случае HTTP и БД формат передачи JSON и это иногда приводит к проблемам, потому что разные языки и их библиотеки по-разному сериализуют/десериализуют свои типы данных в/из JSON по-разному. Ruby при сериализации в JSON приводbт Decimal к строке, оборачивая значение с кавычки. А вот Java сериализует Decimal в JSON, собственно, как число, т.е. без кавычек. Пример.
Ruby: Decimal->JSON = "1.0"
Java: Decimal->JSON = 1.0

Из этого всего вытекают проблемы, когда JSON был сериализован одним ЯП, а десериализован другим.

Мне кажется, тут есть два выхода из ситуации:
1 отказаться от JSON в пользу другого текстового формата, который поддерживает типы, но я не знаю ничего кроме XML и XML точно нет;
2 обогащать JSON дополнительными meta-данными о своих типах. Я думал о JSON Schema, но и тут Минусы. Во-первых он слишком громоздкий, во-вторых типа Decimal я там так и не увидел, в инете пищут про какой-то multipleOf-тип, но мне не понравилась идея.

Прошу подсказать решение.

Спасибо.

UPD.

Про protobuff знаю, использовал. Он бы мог нас спасти, но сейчас не вариант. Дело в том, что исторически у нас куча старых джава-сервсов, поддерживаемых 5-ю джава-командами, которые ничего кроме HTTP использовать не хотят, у этих сервисов полностью синхронное взаиможействие. Также с недавних пор есть около 18-ти руби-сервисов, они полностью асинхронны, не используют HTTP, только кафка. Когда-то планировался протобаф, но пока удавалось обходиться без него. Для взаимодействия джава и руби сервисов по HTTP на стороне руби поднят-сервис прослойка, обычный веб-сервер.

В целом проблема в том, что другие команды не хотят ни protobuff, ни Kafka.
  • Вопрос задан
  • 320 просмотров
Подписаться 2 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Ну вообще зачастую для такого используют google protobuf
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы