GraphQL API против REST API

Основные различия между REST и GraphQL и когда лучше использовать один или другой

СОТДЫХтакой популярный подход к созданию API-интерфейсов, и он гораздо более распространен, чемGraphQL, справедливо предположить, что вы знакомы с ним, поэтому давайте посмотрим на различия между GraphQL и REST.

Отдых - это концепция

REST - это стандарт архитектуры де-факто, но на самом деле он не имеет спецификации и множества неофициальных определений. GraphQL имеетТехнические характеристикичерновик, и этоЯзык запросавместо архитектуры, с четко определенным набором инструментов, построенных вокруг нее (и процветающей экосистемой).

Хотя REST построен на основе существующей архитектуры, которая в наиболее распространенных сценарияхHTTP, GraphQL, с другой стороны, строит свой собственный набор соглашений. Что может быть преимуществом или нет, поскольку преимущества RESTбесплатнопутем кеширования на уровне HTTP.

Единая конечная точка

GraphQL имеет только одну конечную точку, куда вы отправляете все свои запросы. Используя подход REST, вы создаете несколько конечных точек и используете HTTP.глаголыразличать действия чтения (GET) и напишите действия (POST,PUT,DELETE). GraphQL не использует HTTP-команды для определения типа запроса.

С учетом ваших потребностей

С REST вы обычно не можете выбрать, что сервер возвращает вам, если только сервер не реализует частичные ответы, используяразреженные наборы полей, и клиенты используют эту функцию. Сопровождающий API не может применять такую фильтрацию.

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

С GraphQL вы явно запрашиваете только ту информацию, которая вам нужна, вы не «отказываетесь» от полного ответа по умолчанию, но вы обязательно должны выбрать нужные поля.

Это помогает сэкономить ресурсы на сервере, поскольку вам, скорее всего, потребуется меньше обработки, а также экономия сети, поскольку передаваемая полезная нагрузка меньше.

Отличный способ визуализировать это - примерКонечная точка пиццы(Я итальянец, пример пиццы идеален).

Если вы позвонитеGET /pizza/margheritaПолучишь пиццу Маргарита. Если вы позвонитеGET /pizza/napoli, вы получите пиццу Неаполь.

Если у вас 30 разных вкусов, у вас будет 30 конечных точек (если вы не передадите название пиццы в качестве параметра вGET /pizza, Например)

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

Конечная точка GraphQL позволит вам позвонить/pizza, и вы просите конкретные ингредиенты, чтобы приготовить идеальную пиццу, которую вы хотите.

GraphQL упрощает мониторинг использования полей

С REST обычно нет способа определить, требуется ли поле клиенту, поэтому, когда дело доходит до рефакторинга или отказа от поддержки, невозможно определить фактическое использование.

GraphQL позволяет отслеживать, какие поля используются клиентами.

Доступ к вложенным ресурсам данных

GraphQL позволяет генерировать намного меньше сетевых вызовов.

Давайте сделаем пример: вам нужно получить доступ к именам друзей человека. Если ваш REST API предоставляет/personконечная точка, которая возвращает объект человека со списком друзей, вы обычно сначала получаете информацию о человеке, выполнивGET /person/1, который содержит список идентификаторов его друзей.

Если список друзей человека уже не содержит имя друга, для 100 друзей вам потребуется выполнить 101 HTTP-запрос к/personконечная точка, что требует огромных временных затрат, а также требует значительных ресурсов.

С GraphQL вам нужен только один запрос, который запрашивает имена друзей человека.

Типы

REST API основан на JSON, который не может обеспечивать контроль типов.GraphQL имеет систему типов.

Какая из них лучше?

Организации по всему миру ставят под сомнение свой выбор технологии API и пытаются выяснить, подходит ли переход с REST на GraphQL для их нужд.

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

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

Кроме того, я хочу отметить следующее: вы можете использовать и то, и другое.

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


Больше руководств по graphql: