gRPC или REST: когда что, gRPC-Web и JSON transcoding

↑ 5.2 gRPC · ← Предыдущая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Выбор технологии обмена — типичный архитектурный вопрос.

Объяснение

КритерийgRPCREST/JSON
Производительностьвышениже
Контрактстрогий (proto)необязательный (OpenAPI)
СтримингвстроенSSE/WebSocket
Браузерчерез gRPC-Web/transcodingнативно
Отладкасложнееcurl, браузер
Кэширование HTTPнетда
Публичный APIредкостандарт
Меж-сервисный обменотличнонормально

Практика: REST/JSON — наружу (браузеры, партнёры), gRPC — между внутренними сервисами и там, где нужны стриминг и строгие контракты.

  • gRPC-Web: подмножество gRPC для браузера через прокси (Envoy) или middleware UseGrpcWeb; нет client/bidirectional стриминга.
  • JSON transcoding (Microsoft.AspNetCore.Grpc.JsonTranscoding): один сервис отдаёт и gRPC, и REST/JSON по аннотациям google.api.http; генерируется OpenAPI.
rpc GetOrder (GetOrderRequest) returns (OrderReply) {
  option (google.api.http) = { get: "/v1/orders/{id}" };
}

Нюансы и подводные камни

  • «gRPC быстрее» важно, лишь если узкое место в сериализации/сети, иначе выигрыш незаметен.
  • Двойной API (gRPC + REST) требует единого контракта; transcoding помогает избежать дублирования.
  • Инструменты и опыт команды — тоже критерии.
  • GraphQL — третий вариант для гибких клиентских запросов (см. GraphQL на сервере: схема, типы, resolvers).

Практика

  1. Опишите критерии выбора для вашего проекта в ADR.
  2. Включите JSON transcoding и проверьте REST-вызов того же метода.
  3. Сравните три протокола под нагрузкой.

Вопросы с ответами

Связанные темы