Сравниваем REST, GraphQL и gRPC

REST, GraphQL и gRPC  —  самые популярные технологии разработки API в современных веб-приложениях. Выбрать одну из них непросто, поскольку каждая обладает уникальными особенностями.

Чтобы подобрать наиболее подходящий вариант для проекта, сравнительно оценим функции и особенности использования REST, GraphQL и gRPC.


REST  —  самая популярная технология

Сегодня для разработки API веб-приложений чаще всего используют Representational State Transfer (REST). Эта технология обеспечивает распределенную архитектуру для передачи данных. В клиентских запросах содержатся все необходимые для их выполнения сведения, и сервер не сохраняет состояние клиента.

При работе с данными API-интерфейсы REST поддерживают нативные заголовки кэширования HTTP и используют методы HTTP (POST, GET, PUT, PATCH и DELETE). Любой разработчик сможет освоить REST, поскольку он прост и не требует длительного обучения.

Кроме того, REST надежен и легко масштабируется. Поэтому можно без сомнений выбирать его для создания приложений. Даже такие компании, как Twitter, Paypal и Google, используют REST API в своих продуктах.

Преимущества REST

  • Можно с уверенностью реализовывать операции CRUD с помощью стандартных методов HTTP.
  • REST используется уже давно, и почти любой разработчик знаком с ним.
  • Поддерживает кэширование.
  • Масштабируется и обеспечивает разделение между клиентом и сервером.
  • С легкостью интегрируется в несколько приложений.

Недостатки REST

  • Имеет проблемы чрезмерной и недостаточной выборки.
  • Не поддерживает состояния.
  • Имеет большие размеры полезной нагрузки.
  • Количество конечных точек резко увеличивается по мере масштабирования приложения.
  • Непросто обновлять схему базы и структуры данных.

Когда выбирать REST

REST  —  лучший выбор при отсутствии каких-либо специфических требований. Например, он идеально подходит для начинающих разработчиков, поскольку не требует длительного обучения. Кроме того, имеющаяся среда поддержки позволяет находить решение для любой проблемы.

Предпочтительным представляется выбор REST при работе со множеством запросов и ограниченной пропускной способности. Для повышения производительности в таких ситуациях можно использовать поддержку кэширования.

В целом, область применения REST не ограничивается определенными типами приложений. Например, если приложение явно требует GraphQL или gRPC, вы можете также использовать и REST.


GraphQL  —  ориентированный на клиента стандарт

GraphQL  —  это язык запросов данных, представленный в 2015 году. Он позволяет разработчикам находить и выбирать необходимые им достоверные данные. В сравнении с REST, GraphQL  —  это клиентоориентированный подход. Клиент может решать, какие данные ему необходимы, как их получить и в каком формате. Также устраняются проблемы чрезмерной и недостаточной выборки, поскольку клиент может точно указать требуемые данные.

GraphQL манипулирует данными с помощью запросов, мутаций и подписок.

  • Queries  —  запросы данных с сервера.
  • Mutations  —  изменения данных на стороне сервера.
  • Subscriptions  —  автоматическое получение происходящих обновлений.

GitHub  —  одна из крупнейших компаний среди тех, кто использует GraphQL. В 2016 году она перешла с REST на GraphQL, и это в значительной степени способствовало ее быстрому развитию.

Преимущества GraphQL

  • Обладает повышенной гибкостью  —  обеспечивает именно то, что нужно клиенту.
  • Не имеет проблем чрезмерной и недостаточной выборки.
  • Поддерживается популярными языками, в том числе JavaScript, Java, Python, Ruby и PHP.
  • Позволяет настраивать структуру данных под клиента.
  • Один запрос может содержать поля из нескольких ресурсов.

Недостатки GraphQL

  • Запросы могут быть сложными.
  • Отсутствует встроенная поддержка кэширования.
  • Изучение GraphQL может оказаться более сложной задачей по сравнению с REST.
  • Не поддерживается загрузка файлов по умолчанию.

Когда выбирать GraphQL

GraphQL  —  отличный выбор для запросов к базам данных со множеством записей. Он позволяет устранить чрезмерную выборку, извлекать только необходимые данные в определенных форматах, тем самым повышая производительность приложения. Кроме того, GraphQL хорошо подходит для тех ситуаций, когда необходимо объединить данные из нескольких ресурсов.

Его также можно применять, когда вы не совсем понимаете, как клиент использует API. В GraphQL нет необходимости заранее определять строгий контракт. Вместо этого можно постепенно создавать API на основе отзывов клиентов.


gRPC  —  технология, ориентированная на производительность

gRPC  —  это усовершенствованная версия фреймворка Remote Procedure Call (RPC), представленного Google в 2016 году. Это легковесное решение, обеспечивающее максимальную производительность при минимуме ресурсов.

gRPC придерживается основанного на контракте подхода к связи. При этом требуется, чтобы и клиент, и сервер имели контракты перед началом связи. gRPC использует Protobuf (декларативный язык) для создания контрактов и генерирует совместимый код как для клиента, так и для сервера, используя выбранный язык.

gRPC поддерживает 4 метода связи.

  • Унарный (Unary). Сначала клиент делает один запрос на сервер, а затем сервер отправляет один ответ.
  • Потоковая передача клиента (Client-Streaming). Сначала клиент отправляет серию запросов на сервер, после чего следует сообщение, информирующее о завершении потока. Затем сервер отправляет один ответ.
  • Потоковая передача сервера (Server-Streaming). Сначала клиент делает один запрос на сервер, а затем сервер отправляет поток сообщений клиенту.
  • Двунаправленная потоковая передача (Bidirectional Streaming). Как клиент, так и сервер могут отправлять сообщения в любое время после установления первоначального соединения.

Преимущества gRPC

  • Имеет открытый исходный код  —  разработчики могут модифицировать его под свои потребности.
  • Поддерживается множеством языков, в том числе JavaScript, Java, C, C++, C#, Kotlin, Python, Go и PHP.
  • Способен балансировать нагрузку.
  • По умолчанию использует HTTP2, что уменьшает задержку по сравнению с REST API.
  • Сериализует данные в двоичном формате.
  • Поддерживает полнодуплексную потоковую передачу.

Недостатки gRPC

  • По умолчанию не оснащен поддержкой браузера.
  • Не обладает столь крепким сообществом, как REST и GraphQL.

Когда выбирают gRPC

gRPC  —  отличный вариант для связи между устройствами с ограниченными ресурсами. Например, для устройств интернета вещей, смарт-девайсов и камер, поскольку gRPC оптимизирует производительность при минимальных ресурсах.

Кроме того, поскольку gRPC может взаимодействовать с написанными на разных языках сервисами и управлять связью между ними, его можно использовать в архитектуре микросервисов.


Заключение

Мы рассмотрели 3 самые популярные технологии разработки API, их преимущества, недостатки и сферы применения. Теперь вы должны лучше понимать, как выбрать оптимальный вариант для нового приложения.

Важно отметить, что нельзя говорить о явном превосходстве какой-либо технологии. Каждая из них обладает уникальными функциями, подбирать необходимую следует в зависимости от требований проекта.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Chameera Dulanga: REST vs GraphQL vs gRPC 

Предыдущая статьяЛокальная ретушь фотографий при помощи ИИ
Следующая статьяКак разбить текст на абзацы с помощью Python