Что такое gRPC
Что проверяют
Понимаете ли вы, чем он отличается от REST по контракту и транспорту, и знаете ли, где его не применяют.
Как отвечать
gRPC это фреймворк удалённых вызовов от Google: контракт описывается в .proto, по нему генерируются клиент и сервер, данные передаются в бинарном формате Protocol Buffers поверх HTTP/2.
service Jobs {
rpc Get(JobRequest) returns (Job);
rpc Watch(JobRequest) returns (stream JobEvent);
}Что это даёт по сравнению с REST:
- строгий контракт: схема обязательна, клиент генерируется, а не пишется руками. Расхождение полей ловится на компиляции;
- компактность и скорость: бинарный формат меньше JSON, HTTP/2 мультиплексирует запросы в одном соединении;
- четыре вида вызова: обычный, потоковый от сервера, от клиента и двунаправленный. Стриминг встроен, а не приделан вебсокетами;
- дедлайны и отмена это часть протокола, а не соглашение.
Где применяют: связь между своими сервисами, где важны скорость и контракт. Где не применяют: публичный API для браузера (нужен gRPC-Web и прокси), простые интеграции, где ценится возможность посмотреть запрос глазами и вызвать его curl.
Про совместимость важно знать: поля в .proto идентифицируются номерами, поэтому переименование безопасно, а вот повторное использование номера ломает всех.
Где спотыкаются
Считают, что gRPC работает в браузере напрямую.
Не знают про потоковые режимы и описывают его как «REST, только бинарный».
Меняют номера полей в схеме и ломают старых клиентов.
Не могут объяснить, зачем нужен HTTP/2, кроме «он быстрее».