Часто между проектировщиками стоит выбор: REST API или RPC API (к этому стилю относятся SOAP, GraphQL и gRPC). Подробно о разных интеграционных паттернах мы рассказывали в предыдущих статьях (ссылка, ссылка).
Кратко рассмотрим разницу между REST API и RPC API.
REST API реализует концепцию оперирования
ресурсами. Ресурсом может выступать какая-то сущность системы (пользователь, заявка, товар и т. д.). Клиент обращается к серверу по HTTP и через глаголы (GET, POST, DELETE и т. д.) инициирует действие с ресурсом.
REST API обычно проектируется через OpenAPI-спецификации. В спецификации указываются:
■ запросы, которые можно сделать к ресурсам;
■ структура полезной нагрузки при обращении к ресурсу;
■ форматы ответов на запросы.
Принято использовать REST API для реализации принципа «Запрос-ответ» (Request-Response), то есть синхронного взаимодействия.
RPC API реализует концепцию обращения клиента к серверу так, как будто они находятся на одной машине. Клиент обращается не к ресурсу, а к функции сервера.
RPC API предоставляет широкий выбор способов взаимодействия клиента и сервера:
■ запрос-ответ;
■ потоковая передача данных от клиента;
■ потоковая передача данных от сервера;
■ двунаправленная потоковая передача данных.
Факторы, которые нужно учитывать при выборе архитектурного стиля API.
- Характер взаимодействия;
- Типизация сообщения — строгость схемы полезной нагрузки.
- Протокол передачи и формат сериализации данных.
- Транзакционность.
- Раскрытие информации клиенту о внутреннем устройстве сервера.