跳到主要内容

What is GraphQL?

Моделирование данных в AWS Amplify осуществляется с помошью языка запросов GraphQL — это спецификация API, язык запросов для API и среда выполнения для выполнения этих запросов с вашими данными. Он имеет некоторые сходства с REST и является лучшей заменой REST.

GraphQL

GraphQL был представлен Facebook в 2015 году, хотя он использовался внутри компании с 2012 года. GraphQL позволяет клиентам определять структуру требуемых данных, и именно эта структура возвращается с сервера. Запрос данных таким способом обеспечивает гораздо более эффективный способ взаимодействия приложений на стороне клиента с API-интерфейсами, уменьшая количество неполных выборок и предотвращая избыточные выборки данных.

Главные преимущества:

Эффективная и гибкая выборка

В ответе возвращаются только запрошенные данные.

Более быстрый

Вы можете сократить свой запрос, выбрав только те поля, которые хотите запросить.

Полезная аналитика

Так как клиент обязан в запросе указывать поля явно, сервер точно знает, какие поля действительно нужны. А это важная информация для deprecation-политики.

Работает поверх любого источника данных и транспорта

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

Выборка данных с помощью одного вызова API

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

Нет проблем с чрезмерным и недостаточным извлечением

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

Проверка типа “из коробки”

Функция самоанализа GraphQL позволяет переходить по типам и определять схему, чтобы приложения запрашивали только то, что возможно, и в соответствующем формате. Тем не менее, разработчики могут видеть, что схема может запрашивать и как данные там установлены. Исходя из этого, они могут легко добавлять новые поля к существующим запросам через GraphQL IDE. Нет необходимости проверять формат данных, так как GraphQL сделает это за вас. Разработчики должны только написать разрешители (resolvers) — как данные будут получены.

Автогенерация API документации

GraphQL синхронизирует документацию с изменениями API. Поскольку API-интерфейс GraphQL тесно связан с кодом, когда поле, тип или запрос изменяются, изменяются и документы. Это приносит непосредственную пользу разработчикам, поскольку им приходится тратить меньше времени на документирование API.

Эволюция API без контроля версий

Развитие API влечет за собой проблему сохранения старой версии до тех пор, пока разработчики не перейдут на новую. Итак, с REST принято предлагать несколько версий API. Тем не менее, GraphQL устраняет необходимость в управлении версиями, отказываясь от API на уровне полей. Устаревшие поля могут быть позже удалены из схемы, не влияя на существующие запросы. GraphQL делает это возможным путем создания единого API для всего приложения, которое не ограничено конкретным механизмом хранения.

Используя единую развивающуюся версию

API-интерфейсы GraphQL предоставляют приложениям постоянный доступ к новым функциям и способствуют созданию более понятного и более удобного в обслуживании серверного кода.

Совместное использование кода

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

Подробные сообщения об ошибках

В REST мы просто проверяем заголовки HTTP на статус ответа, основываясь на котором мы можем определить, что пошло не так и как с ним справиться. И наоборот, если при обработке запросов GraphQL возникает ошибка, серверная часть предоставит подробное сообщение об ошибке, включающее все распознаватели и ссылающуюся на конкретную часть запроса при ошибке. Сообщения об ошибках GraphQL не имеют определенного стандарта, поэтому вы можете выбрать — будь то трассировка стека, код ошибки для конкретного приложения или просто текст.

Права доступа

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

Дополнительная операция

В REST API-интерфейсы выполняют операции CRUD со следующими HTTP-запросами:

  • CREATE: генерировать новые записи с помощью POST
  • READ: получить данные на основе входных параметров с помощью GET
  • UPDATE: изменить записи с PUT
  • DELETE: стереть указанные данные с помощью DELETE.

Таким образом, GraphQL вносит в таблицу новую операцию — подписки(subscriptions), — которая позволяет клиентам получать сообщения с сервера в режиме реального времени. Подписки GraphQL могут использоваться для автоматической отправки уведомлений клиенту при добавлении нового комментария или данных или получении сообщения.

Быстрое прототипирование приложений

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

References:

https://www.altexsoft.com/blog/engineering/graphql-core-features-architecture-pros-and-cons/

https://engineering.fb.com/core-data/graphql-a-data-query-language/

https://graphql.org/learn

EnglishMoji!