Запис на архитектурно решение: 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.