Architecture Decision Record

Active theme: Light

← Примеры записей решений

Запись архитектурного решения: API на JSON или gRPC

Состояние

Принято

Контекст

Мы проектируем API для нового сервиса, которым будут пользоваться несколько клиентов. Мы рассматривали два варианта реализации API: JSON поверх HTTP или gRPC.

JSON поверх HTTP — широко распространённый подход к созданию API, поддерживаемый многими языками программирования и фреймворками. Этот подход прост, лёгок и понятен, что делает его хорошим выбором для многих проектов. Однако он может быть менее эффективен, чем другие варианты, особенно при обработке больших объёмов данных.

gRPC, напротив, — более новая технология, предлагающая более эффективный способ создания API. Для передачи данных он использует двоичную сериализацию, которая может быть быстрее и компактнее JSON. gRPC также поддерживает двунаправленную потоковую передачу, что делает его хорошим выбором для приложений реального времени.

Решение

Взвесив плюсы и минусы обоих вариантов, мы решили использовать для нашего API gRPC. Хотя JSON поверх HTTP — более простой вариант, мы считаем, что gRPC обеспечит более эффективное и масштабируемое решение для нашего сервиса. Мы также ожидаем, что наш API будет обрабатывать большое количество данных, и двоичная сериализация gRPC будет эффективнее в этом случае.

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

Последствия

Выбрав gRPC, нам придётся использовать другой набор инструментов и библиотек для создания нашего API по сравнению с JSON поверх HTTP. Это может потребовать дополнительного времени и усилий на изучение и внедрение этих технологий. Кроме того, клиентам, которые хотят использовать наш API, придётся использовать совместимые с gRPC библиотеки, которые могут быть не так широко поддержаны, как библиотеки JSON поверх HTTP.

Однако мы считаем, что преимущества использования gRPC перевешивают эти потенциальные недостатки, и уверены, что это решение приведёт к созданию более эффективного и масштабируемого API.