GraphQL: альтернатива REST на HTTP

GraphQL: альтернатива REST на HTTP

Существует множество архитектурных стандартов с открытым исходным кодом для создания и распространения приложений. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) и API GraphQL являются наиболее популярными.





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





СДЕЛАТЬ ВИДЕО ДНЯ

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





Что такое GraphQL?

GraphQL (Graph Query Language) — это язык запросов и среда выполнения для создания API. В отличие от API REST с множеством конечных точек для потребления данных, API GraphQL имеют одну точку входа. Вы можете получить конкретные данные, описав их в запросах.

Спецификация GraphQL определяет язык запросов и то, как работают серверы GraphQL. Вы можете создавать и использовать API-интерфейсы GraphQL на серверных языках от Python до Javascript и любой язык, поддерживающий HTTP.



Meta создала GraphQL в 2012 году как альтернативу REST для построения на HTTP. Они выпустили GraphQL в качестве стандарта с открытым исходным кодом в 2015 году. Сегодня фонд GraphQL наблюдает за разработкой спецификации GraphQL.

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





Кроме того, все запросы GraphQL в конечном итоге возвращают код состояния 200 независимо от состояния запроса.

Как работает GraphQL?

  ГрафQL's functions and syntax

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





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

Почему вы должны использовать GraphQL?

REST — это простой в использовании стандарт, и большинство языков программирования имеют инструменты для быстрого создания RESTful API. Однако существует множество проблем с созданием и использованием RESTful API.

как уменьшить размер файла с картинками

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

Неэффективная выборка данных

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

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

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

API-интерфейсы GraphQL интерактивны; вы можете указать данные, которые вам нужно получить, с помощью простого и удобочитаемого синтаксиса.

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

Приведенный выше запрос GraphQL запрашивает пользователь схема для записей, где возраст поле равно 89. Запрос содержит встроенный запрос для записей, в которых в живых поле оценивает истинный . Он возвращает поля имени, биографии и национальности из схемы.

Быстрое развитие

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

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

Язык определения схемы GraphQL

Язык определения схем GraphQL (SDL) определяет схемы для служб GraphQL.

Синтаксис GraphQL SDL легко читать и понимать. Вы укажете структуру своей схемы в файле с .graphql или же .graphqls расширение.

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

Приведенный выше код GraphQL представляет собой схему API GraphQL, определяющую структуру API для запросов. Схема определяет функциональные возможности CRUD для API.

На стороне клиента, в зависимости от структуры схемы и клиентских данных или операции, клиент может выполнить запрос (GET или DELETE в REST) ​​или мутация (ПОСТАВИТЬ или ПОСТАВИТЬ).

Вот пример запроса Человек схема.

165Д379К34Д55Д2Б30770ЭЭ7ФЭ9ЭА0АД0К8Э784А

Приведенный выше запрос вернет человеческую схему имя а также возраст полевые данные.

Мутации GraphQL имеют совершенно другой синтаксис в отличие от запросов. Вот пример операции мутации на Человек схема.

mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

Ввод кода мутации имя а также возраст поля клиенту и возвращает данные из полей.

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

Создание GraphQL API

  Поддерживаемые языки GraphQL

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

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

GraphQL набирает популярность

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

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