gRPC или REST: когда что, gRPC-Web и JSON transcoding
↑ 5.2 gRPC · ← Предыдущая
Зачем это на собесе
Выбор технологии обмена — типичный архитектурный вопрос.
Объяснение
| Критерий | gRPC | REST/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).
Практика
- Опишите критерии выбора для вашего проекта в ADR.
- Включите JSON transcoding и проверьте REST-вызов того же метода.
- Сравните три протокола под нагрузкой.
Вопросы с ответами
Когда gRPC, а когда REST?
gRPC — межсервисно, стриминг, строгий контракт; REST — публичные API и браузеры.
Что такое JSON transcoding?
Отдача gRPC-методов как REST/JSON endpoint-ов по аннотациям в proto.