Jump to content

ГрафQL

ГрафQL
Оригинальный автор(ы) Мета-платформы
Разработчик(и) Открытый исходный код
Первоначальный выпуск 14 сентября 2015 г. ( 14 сентября 2015 г. )
Стабильная версия
октябрь 2021 г. ( 2021-10 ) [1]
Репозиторий github /графкл /graphql-спецификация
Написано в Реализации на Java , JavaScript , Ruby , Scala и других.
Веб-сайт графкл .org

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]

См. также

[ редактировать ]
  1. ^ «Примечания к выпуску GraphQL за октябрь 2021 г.» . Гитхаб .
  2. ^ «Изучите основы GraphQL с помощью учебника Fullstack» . www.howtographql.com . Проверено 25 апреля 2023 г.
  3. ^ «GraphQL: язык запросов к данным» . 14 сентября 2015 г.
  4. ^ «GraphQL Facebook получает собственный фонд с открытым исходным кодом» . ТехКранч . Проверено 7 ноября 2018 г.
  5. ^ «Фонд Linux объявляет о намерении создать новый фонд для поддержки GraphQL» . Фонд Linux . 6 ноября 2018 года . Проверено 17 марта 2023 г.
  6. ^ «GraphQL SDL включен в репозиторий Github» . Гитхаб .
  7. ^ «Популярные общедоступные API, использующие GraphQL» . Frontendeng.dev . 25 июля 2023 г.
  8. ^ «ГрафQL» . facebook.github.io . Фейсбук . Архивировано из оригинала 18 июля 2018 года . Проверено 4 июля 2018 г.
  9. ^ «Введение в GraphQL» . Graphql.org . Проверено 25 апреля 2023 г.
  10. ^ "Исполнение" . Graphql.org . Проверено 25 апреля 2023 г.
  11. ^ «ГрафQL» . spec.graphql.org . Проверено 25 апреля 2023 г.
  12. ^ Варгас, Д.М.; Бланко, AF; Видаур, AC; Алькосер, JPS; Торрес, ММ; Бергель, А.; Дюкасс, С. (2018). «Тестирование отклонений: метод создания тестовых примеров для API GraphQL». 11-й международный семинар по технологиям Smalltalk (IWST) : 1–9.
  13. ^ Карлссон, Стефан; Каушевич, Аднан; Сундмарк, Дэниел (май 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 .
  14. ^
[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2d5797d38914ee2147a0cd034b4eb466__1722045780
URL1:https://arc.ask3.ru/arc/aa/2d/66/2d5797d38914ee2147a0cd034b4eb466.html
Заголовок, (Title) документа по адресу, URL1:
GraphQL - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)