ГрафQL
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
![]() | |
Оригинальный автор(ы) | Мета-платформы |
---|---|
Разработчик(и) | Открытый исходный код |
Первоначальный выпуск | 14 сентября 2015 г. |
Стабильная версия | октябрь 2021 г. [1]
|
Репозиторий | github |
Написано в | Реализации на Java , JavaScript , Ruby , Scala и других. |
Веб-сайт | графкл |
GraphQL данными — это язык запросов и манипулирования для API , который позволяет клиенту указывать, какие данные ему нужны (« декларативная выборка данных»). Сервер GraphQL может получать данные из разных источников для одного клиентского запроса и представлять результаты в едином графике . [2] поэтому он не привязан к какой-либо конкретной базе данных или механизму хранения.
Соответствующий механизм выполнения GraphQL имеет открытый исходный код .
История
[ редактировать ]Facebook начал разработку GraphQL в 2012 году и выпустил его с открытым исходным кодом в 2015 году. [3] В 2018 году GraphQL был перенесен в недавно созданный GraphQL Foundation, организованный некоммерческой организацией Linux Foundation . [4] [5]
9 февраля 2018 года язык определения схемы GraphQL стал частью спецификации. [6]
Многие популярные общедоступные API используют GraphQL в качестве способа доступа к ним по умолчанию. К ним относятся общедоступные API Facebook, GitHub , Yelp , Shopify и Google Directions API. [7]
Дизайн
[ редактировать ]GraphQL поддерживает чтение, запись (изменение) и подписку на изменения данных (обновления в реальном времени — обычно реализуются с помощью WebSockets ). [8] Сервис GraphQL создается путем определения типов с полями, а затем предоставления функций для разрешения данных для каждого поля. Типы и поля составляют так называемое определение схемы . Функции, которые извлекают и отображают данные, называются преобразователями . [9]
После проверки на соответствие схеме запрос GraphQL выполняется сервером. Сервер возвращает результат, отражающий форму исходного запроса, обычно в формате JSON . [10]
Типовая система
[ редактировать ]Корневой тип схемы GraphQL, Query
по умолчанию содержит все поля, которые можно запрашивать. Другие типы определяют объекты и поля, которые может возвращать сервер GraphQL. Существует несколько базовых типов, называемых скалярами, для представления таких вещей, как строки, числа и идентификаторы.
определены как допускающие значение NULL Поля по умолчанию , а завершающий восклицательный знак можно использовать, чтобы сделать поле не допускающим значение NULL (обязательно). Поле можно определить как список, заключив тип поля в квадратные скобки (например, authors: [String]
). [11]
type Query {
currentUser: User
}
type User {
id: ID!
name: String!
}
Запросы
[ редактировать ]Запрос GraphQL определяет точную форму данных, необходимую клиенту.
query CurrentUser {
currentUser {
name
age
}
}
После проверки и выполнения сервером GraphQL данные возвращаются в той же форме.
{
"currentUser": {
"name": "John Doe"
"age": 23
}
}
Мутации
[ редактировать ]Мутация GraphQL позволяет создавать, обновлять или удалять данные. Мутации обычно содержат переменные , которые позволяют передавать данные на сервер от клиента. Мутация также определяет форму данных, которые будут возвращены клиенту после завершения операции.
mutation CreateUser($name: String!, $age: Int!) {
createUser(userName: $name, age: $age) {
name
age
}
}
Переменные передаются как объект с полями, соответствующими именам переменных в мутации.
{
"name": "Han Solo",
"age": 42
}
После завершения операции сервер GraphQL вернет данные, соответствующие форме, определенной мутацией.
{
"data": {
"createUser": {
"name": "Han Solo",
"age": 42
}
}
}
Подписки
[ редактировать ]GraphQL также поддерживает оперативные обновления, отправляемые с сервера клиенту в ходе операции, называемой подпиской. Опять же, клиент определяет форму данных, которая ему нужна при каждом обновлении.
subscription {
newPerson {
name
age
}
}
Когда мутация производится через сервер GraphQL, который обновляет связанное поле, данные отправляются всем подписанным клиентам в формате, установленном через подписку.
{
"newPerson": {
"name": "Jane",
"age": 23
}
}
Сравнение с другими языками запросов
[ редактировать ]GraphQL не предоставляет полноценный язык запросов к графам, такой как SPARQL , или даже диалекты SQL , поддерживающие транзитивное замыкание . Например, интерфейс GraphQL, который сообщает о родителях человека, не может вернуть в одном запросе набор всех его предков.
Тестирование
[ редактировать ]API-интерфейсы GraphQL можно тестировать вручную или с помощью автоматизированных инструментов, отправляющих запросы GraphQL и проверяющих правильность результатов. Также возможна автоматическая генерация тестов. [12] Новые запросы могут создаваться с помощью методов поиска благодаря типизированной схеме и возможностям самоанализа. [13]
Некоторые из программных инструментов, используемых для тестирования реализаций GraphQL, включают Postman , GraphiQL, Apollo Studio, GraphQL Editor и Step CI. [14]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Примечания к выпуску GraphQL за октябрь 2021 г.» . Гитхаб .
- ^ «Изучите основы GraphQL с помощью учебника Fullstack» . www.howtographql.com . Проверено 25 апреля 2023 г.
- ^ «GraphQL: язык запросов к данным» . 14 сентября 2015 г.
- ^ «GraphQL Facebook получает собственный фонд с открытым исходным кодом» . ТехКранч . Проверено 7 ноября 2018 г.
- ^ «Фонд Linux объявляет о намерении создать новый фонд для поддержки GraphQL» . Фонд Linux . 6 ноября 2018 года . Проверено 17 марта 2023 г.
- ^ «GraphQL SDL включен в репозиторий Github» . Гитхаб .
- ^ «Популярные общедоступные API, использующие GraphQL» . Frontendeng.dev . 25 июля 2023 г.
- ^ «ГрафQL» . facebook.github.io . Фейсбук . Архивировано из оригинала 18 июля 2018 года . Проверено 4 июля 2018 г.
- ^ «Введение в GraphQL» . Graphql.org . Проверено 25 апреля 2023 г.
- ^ "Исполнение" . Graphql.org . Проверено 25 апреля 2023 г.
- ^ «ГрафQL» . spec.graphql.org . Проверено 25 апреля 2023 г.
- ^ Варгас, Д.М.; Бланко, AF; Видаур, AC; Алькосер, JPS; Торрес, ММ; Бергель, А.; Дюкасс, С. (2018). «Тестирование отклонений: метод создания тестовых примеров для API GraphQL». 11-й международный семинар по технологиям Smalltalk (IWST) : 1–9.
- ^ Карлссон, Стефан; Каушевич, Аднан; Сундмарк, Дэниел (май 2021 г.). «Автоматическое тестирование API GraphQL на основе свойств» . Международная конференция IEEE/ACM по автоматизации тестирования программного обеспечения (AST) 2021 г. Мадрид, Испания: IEEE. стр. 1–10. arXiv : 2012.07380 . дои : 10.1109/AST52587.2021.00009 . ISBN 978-1-6654-3567-3 . S2CID 229156477 .
- ^
- GraphQL IDE Monorepo , GraphQL, 25 апреля 2023 г. , получено 25 апреля 2023 г.
- «Исследователь студии Apollo» . Документы Аполлона . Проверено 25 апреля 2023 г.
- «Консоль API редактора GraphQL» . Документация редактора GraphQL . Проверено 2 сентября 2023 г.
- «Тестирование API GraphQL» . Шаг CI Документация . Проверено 8 января 2023 г.
Внешние ссылки
[ редактировать ]