Facebook начал разработку GraphQL в 2012 году и выпустил его в 2015 году. С 2018 года за проект отвечает Linux Foundation. Цель GraphQL - предоставить язык запросов для выборки и обработки данных. Это не совсем SQL и не REST. Это где-то посередине, позволяя разработчикам запрашивать, изменять и организовывать данные интуитивно понятным и безопасным способом.

Альтернативы: ОТДЫХ

Чтобы понять, что такое GraphQL, вы должны сначала понять, чем является GraphSQL не. Во-первых, это не ОТДЫХ. REST расшифровывается как REpresentational State Transfer и уже много лет является отраслевым стандартом для разработки API. REST позволяет выполнять взаимодействие клиент-сервер с подмножеством HTTP-запросов. Кроме того, он предоставляет правила и общую философию того, как структурировать и давать имена этим запросам. Чаще всего для отправки данных используется JSON (JavaScript Object Notation).

Итак, что не так с REST? Много вещей. Одна из основных причин заключается в том, что между сервером и клиентом нет прочного договорного соглашения. Это означает отсутствие гарантий в отношении типа или структуры данных, которые вы собираетесь получить. Кроме того, неоднозначность между различными кодами состояния HTTP. Например, следует ли возвращать 200, потому что запрос был успешным, или 201, потому что элемент был создан?

МЫЛО

SOAP (простой протокол доступа к объектам) обычно использовался до REST. В отличие от REST, SOAP - это стандартизированный протокол, разработанный Microsoft и одобренный W3C. Он использовал нотацию XML для отправки и получения данных. Позднее протокол SOAP был расширен и применен для поддержки удаленных вызовов процедур. Это также не ограничивалось HTTP. Сообщения SOAP можно отправлять по другим протоколам, таким как SMTP, и напрямую по TCP.

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

SQL

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

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

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

Основные концепции

Убрав альтернативы, мы можем погрузиться в GraphQL. Важно понимать некоторые основные концепции GraphQL, чтобы иметь возможность эффективно его использовать.

Схема

В основе GraphQL API лежит схема. Схема - это определение всех возможных данных, которые API может обрабатывать, и типов этих данных. Обычно он находится на стороне сервера, и все входящие запросы сначала проверяются по схеме.

Поле

Как сказано в официальной документации GraphQL, «[GraphQL] в основном предназначен для выбора полей в объектах». Поле - это основная единица данных, которую вы можете запросить у API. Он также должен быть скаляром, что означает отсутствие взаимосвязей или сложностей.

Реализация

Реализация в GraphQL похожа на наследование в ООП. Он позволяет вам определять некоторые общие поля, которые будут использоваться разными объектами.

Связь

Соединение - это источник Graph в GraphQL. Он позволяет связывать различные объекты друг с другом, очень похоже на узлы в графе. Эти соединения позволяют запрашивать несколько объектов за один вызов, в то время как REST может потребоваться несколько вызовов.

Примеры

Теперь давайте посмотрим на несколько примеров GraphQL в действии. Начнем с определения типа. Он написан на SDL (язык определения схемы):

Вы можете видеть, что его имя Car и есть поля make, year и turbocharged. Каждое поле имеет определенный тип. Кроме того, восклицательный знак означает, что поле является обязательным.

Но чтобы по-настоящему изучить идеи GraphQL, нам нужно ввести некоторые взаимосвязи. Давайте определим другой тип и свяжем его с Car:

Вы можете видеть, что Car теперь имеет ссылку на Person через поле owner, а Person сохраняет список Car в поле cars.

Запросы

Чтобы иметь возможность запрашивать автомобили и людей, нам теперь нужно определить некоторые Queries:

Как видите, мы определили 3 запроса. allCars не принимает аргументов и возвращает список автомобилей. carsByMake берет строку и фильтрует автомобили по make. Наконец, allPersons вернет список Person.

Теперь мы можем отправлять запросы к API и получать такие результаты:

Передавать переменные в запросы:

Мутации

Запросы данных - это хорошо, но нам также нужен способ их создания. Для этого GraphQL использует мутации. Вы определяете мутации так же, как запросы:

Это пример мутации, которая примет данные и создаст объект Car. Вы можете назвать это так:

Реализации

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

Для веб-интерфейса наиболее распространена библиотека Apollo.

За и против

Итак, почему вам следует использовать GraphQL и почему его следует избегать? Вот несколько причин в пользу GraphQL:

  • Твердое договорное соглашение - вам больше не нужно угадывать, какой сервер данных вам отправит. С GraphQL вы получите именно то, о чем просили
  • Меньше запросов - GraphQL может делать что-то с меньшим количеством запросов по сравнению с REST или SOAP.
  • Интуитивно. GraphQL гораздо более интуитивно понятен и прост в использовании, чем REST или SOAP.

Но GraphQL не идеален. Вот минусы GraphQL:

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

Надеюсь, теперь у вас есть четкое представление о том, что такое GraphQL и какие проблемы он решает. Спасибо за чтение и дайте мне знать, что вы думаете о GraphQL в комментариях!