Сравнение стилей API: REST, GraphQL, gRPC, SOAP и JSON-RPC
Коротко: Интерфейсы можно строить по-разному: REST универсален, GraphQL гибок для клиентов, gRPC быстр между службами, SOAP формален, а JSON-RPC лёгок.
Подробнее: API (интерфейс) определяет, как программы общаются друг с другом. Выбор стиля влияет на производительность, трудозатраты и инструменты. «Лучшего» нет, есть только подходящий подход.
Подробности
REST
Ресурсы с URL (/users/42), стандартные методы HTTP (GET, POST, PUT, DELETE), чаще всего JSON. Сильные стороны: просто, поддерживается везде, хорошо кэшируется, легко тестировать (curl, браузер). Слабые: избыточная/недостаточная выборка (слишком много или мало данных за запрос), несколько запросов для вложенных данных, нужно версионирование. Описывается с помощью OpenAPI.
GraphQL
Одна точка входа; клиент описывает, какие поля ему нужны:
{ user(id: 42) { name orders { total } } }Сильные стороны: ровно нужные данные, один запрос для вложенных данных, строгая схема/типы, хорошо для фронтендов и мобильных приложений.
gRPC, SOAP, JSON-RPC
gRPC использует двоичный формат Protobuf и HTTP/2: быстро и строго типизировано между службами. SOAP основан на XML, формален и распространён в корпоративной среде. JSON-RPC — очень лёгкий протокол вызова функций в JSON.
См. также: проектирование REST API, GraphQL и gRPC, OpenAPI и Swagger, WebSockets