REST, GraphQL или gRPC
Вопрос
Чем отличаются REST, GraphQL и gRPC? Как бы ты выбирал между ними?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.