Запис архітектурного рішення: API з використанням JSON чи gRPC
Статус
Прийнято
Контекст
Ми проєктуємо API для нового сервісу, яким користуватимуться численні клієнти. Для реалізації API ми розглядали два варіанти: JSON поверх HTTP або gRPC.
JSON поверх HTTP — це широко вживаний підхід до побудови API, який підтримують багато мов програмування та фреймворків. Цей підхід простий, легкий і зрозумілий, що робить його добрим вибором для багатьох проєктів. Проте він може бути менш ефективним, ніж інші варіанти, особливо коли йдеться про обробку великих обсягів даних.
gRPC, навпаки, — новіша технологія, що пропонує ефективніший спосіб побудови API. Для передавання даних вона використовує двійкову серіалізацію, яка може бути швидшою й компактнішою за JSON. gRPC також підтримує двонаправлену потокову передачу, що робить її добрим вибором для застосунків реального часу.
Рішення
Зваживши плюси й мінуси обох варіантів, ми вирішили використовувати gRPC для нашого API. Хоча JSON поверх HTTP — простіший варіант, ми вважаємо, що gRPC забезпечить ефективніше й масштабованіше рішення для нашого сервісу. Ми також очікуємо, що наш API оброблятиме великий обсяг даних, і двійкова серіалізація gRPC буде ефективнішою для такого випадку.
Крім того, ми вважаємо, що підтримка двонаправленої потокової передачі в gRPC буде корисною для застосунків реального часу, які ми можемо розробити в майбутньому.
Наслідки
Обравши gRPC, нам доведеться використовувати інший набір інструментів і бібліотек для побудови нашого API порівняно з JSON поверх HTTP. Це може вимагати додаткового часу та зусиль, щоб опанувати й упровадити ці технології. Крім того, клієнти, які захочуть користуватися нашим API, муситимуть застосовувати бібліотеки, сумісні з gRPC, які можуть бути не так широко підтримувані, як бібліотеки для JSON поверх HTTP.
Проте ми вважаємо, що переваги використання gRPC переважують ці потенційні недоліки, і ми впевнені, що це рішення дасть ефективніший і масштабованіший API.