Ответ вслух Middle Проектирование API обновлено

REST, GraphQL или gRPC

Вопрос

Чем отличаются REST, GraphQL и gRPC? Как бы ты выбирал между ними?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

REST строится на ресурсах и стандартной семантике HTTP, его понимают все инструменты, а GET-запросы кешируются браузером и CDN. Минус в том, что эндпоинт отдаёт фиксированную форму: то лишние поля, то для одного экрана нужно несколько запросов.

Что должно прозвучать в ответе

  • REST: ресурсы и методы HTTP, простой, хорошо кешируется

  • Минусы REST: over-fetching и under-fetching

  • GraphQL: один эндпоинт, клиент выбирает поля, строгая схема

  • Минусы GraphQL: HTTP-кеш, N+1, защита от тяжёлых запросов

  • gRPC: Protobuf поверх HTTP/2, кодогенерация, стриминг, для сервис-сервис

  • Выбор от клиентов и задач, можно сочетать (BFF на GraphQL, внутри gRPC)

Что могут спросить следом

  • Как кешировать GraphQL?
  • Почему gRPC неудобен из браузера?

Разбор

REST строится на ресурсах и стандартной семантике HTTP, его понимают все инструменты, а GET-запросы кешируются браузером и CDN. Минус в том, что эндпоинт отдаёт фиксированную форму: то лишние поля, то для одного экрана нужно несколько запросов. GraphQL даёт клиенту описать нужные поля в одном запросе по строго типизированной схеме; это удобно, когда клиентов много и экраны сложные. Платить приходится сложностью: HTTP-кеш почти не работает, на сервере нужен DataLoader против N+1 и ограничения сложности запросов. gRPC использует Protobuf и HTTP/2, даёт кодогенерацию клиентов и стриминг, поэтому хорош между микросервисами, но из браузера требует gRPC-Web. Я бы брал REST по умолчанию для публичного API, GraphQL для фронтенда со сложными экранами, gRPC внутри.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.