GRPC
Зачем
- поверх Http/2
- используется одно TCP-соединение, переиспользования одного cокета для нескольких параллельных запросов
- полного сжатия данных
- контроль трафика
- поддержка отмены запроса и таймаутов из коробки
- сервер может узнать, как об отмене запроса, так и об истечении таймаута и перестать выполнять запрос на своей стороне
- поддержка как одиночных вызовов, так и стриминга
- описание сообщений и самих сервисов осуществляется через некий Interface Definition Language или IDL
- клиент и сервер генерируются при помощи proto-компилятора и gRPC-плагина на основе proto-описания
- Bi-directional - инициации событий с сервера
- High perf protobuf binary format
Плюсы и минусы
Плюсы
- Скорость
- Строгая типизация, версионность
- Серверный стриминг
- поддержка отмены запроса и таймаутов
Минусы
- Бинарный, сложно отлаживать
- uses HTTP/2 as a transport protocol, and no native browser support exists
- Для запросов из браузера требуется библиотека и протокол (grpc-web) и прокси (Envoy или ASP.NET Core gRPC)
- не полная поддержка протокола (Client-side and Bi-directional streaming)
Паттерны
Утилиты
- Linter