Существует множество архитектурных стандартов с открытым исходным кодом для создания и распространения приложений. 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?
В отличие от REST, ориентированный на ресурсы, GraphQL требует, чтобы вы думали о данных как о графе для взаимодействия с данными. Вы можете указать структуру данных, а спецификация предоставляет надежный интерфейс запросов для взаимодействия с API через HTTP. Вы сможете использовать различные функции в зависимости от Пакет или библиотека GraphQL вы решите использовать.
Схемы GraphQL включают типы объектов, которые определяют запрашиваемый объект и его доступные поля. При запросах и изменениях API пакет GraphQL проверяет запросы и выполняет запросы на основе указанных функций обработчика (преобразователей).
Почему вы должны использовать GraphQL?
REST — это простой в использовании стандарт, и большинство языков программирования имеют инструменты для быстрого создания RESTful API. Однако существует множество проблем с созданием и использованием RESTful API.
Вот некоторые проблемы с REST, из-за которых разработчики предпочитают GraphQL для некоторых случаев использования.
Неэффективная выборка данных
RESTful API передают данные на основе спецификации конечной точки. Они недостаточно гибки, чтобы извлекать данные сверх того, что жестко запрограммировано в функции обработчика конечной точки.
Предположим, конечная точка возвращает список данных при вызове, и вам нужно указать значения или критерии для полей. В этом случае разработчик должен создать конечную точку и определить бизнес-логику для возврата данных. Вы можете разобрать ценный ресурс вручную, что в итоге займет больше времени.
GraphQL решает проблему неэффективной выборки данных, поскольку вы можете гибко запрашивать API для возврата данных на основе критериев и спецификаций.
API-интерфейсы GraphQL интерактивны; вы можете указать данные, которые вам нужно получить, с помощью простого и удобочитаемого синтаксиса.
{
пользователь (где: {возраст: {_eq: "89"}}) {
имя
школа(где: {живой: {_eq: правда}}) {
био
Национальность
}
}
}
Приведенный выше запрос GraphQL запрашивает пользователь схема для записей, где возраст поле 89. Запрос имеет встроенный запрос для записей, где живой поле оценивает истинный. Он возвращает поля имени, биографии и национальности из схемы.
Быстрое развитие
Создание и использование API-интерфейсов GraphQL проще, чем использование REST, особенно по мере увеличения размера проекта. На этапе разработки вам не нужно разрабатывать столько маршрутов и функций-обработчиков, как при разработке RESTful API. Использование API GraphQL не так утомительно, как API RESTful.
В REST разные конечные точки предоставляют доступ к разным ресурсам, в отличие от GraphQL, где конечная точка одна. Это обеспечивает гибкость и производительность, а запросы могут вызывать различные функции преобразователя.
Язык определения схемы GraphQL
Язык определения схем GraphQL (SDL) определяет схемы для служб GraphQL.
Синтаксис GraphQL SDL легко читать и понимать. Вы укажете структуру своей схемы в файле с .graphql или .graphqls расширение.
тип Человек {
имя: Нить!
возраст: Инт!
}введите AddHuman {
имя: Нить!
возраст: Инт!
}тип Мутация {
CreateHuman (ввод: AddHuman!): Человек!
DeleteHuman (идентификатор: Int!): Нить!
UpdateHuman (идентификатор: Int!): Нить!
}
тип Запрос {
GetHuman (id: Int!): Человек!
GetHumans: [Человек!]!
}
Приведенный выше код GraphQL представляет собой схему API GraphQL, определяющую структуру API для запросов. Схема определяет функциональные возможности CRUD для API.
На стороне клиента, в зависимости от структуры схемы и клиентских данных или операции, клиент может выполнить запрос (GET или DELETE в REST) или мутация (ПОСТАВИТЬ или ПОСТАВИТЬ).
Вот пример запроса Человек схема.
запрос человека {
имя
возраст
}
Приведенный выше запрос вернет человеческую схему имя и возраст полевые данные.
Мутации GraphQL имеют совершенно другой синтаксис в отличие от запросов. Вот пример операции мутации на Человек схема.
мутация {
CreateHuman (ввод: {имя:"мужчина", возраст: 1000000000000000,}) {
имя
возраст
}
}
Ввод кода мутации имя и возраст поля клиенту и возвращает данные из полей.
Вам понадобится хранилище данных для постоянства при создании своего GraphQL API. Подобно REST и большей части веб-архитектуры на основе HTTP, GraphQL не имеет состояния, и вы можете использовать любое хранилище данных или базу данных для своего приложения.
Создание GraphQL API
GraphQL — это спецификация, и вы можете создавать GraphQL на самых популярных серверных языках. Вам нужно будет найти библиотеку с функциями, которые вам нужны для вашего проекта.
Выбирая библиотеку GraphQL, вы хотите использовать многофункциональную библиотеку, которая поддерживает все типы и операции GraphQL. Большинство библиотек используют либо схему, либо код. В первом случае вы определяете схему GraphQL, а библиотека генерирует преобразователи и шаблонный код. В последнем случае вы жестко кодируете преобразователи без определения схемы.
GraphQL набирает популярность
С момента появления GraphQL разработчики и компании выпустили инструменты, упрощающие его использование. Это может сократить время разработки для небольших и средних проектов.
Вы можете ознакомиться с клиентами GraphQL с открытым исходным кодом, документацией по GraphQL и его спецификацией, чтобы узнать больше.