Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В GraphQL поля, запрашиваемые вами, определяют точно то, что возвращает построитель данных (DAB), не больше, не меньше. DAB компилирует эти выборы в параметризованный SQL, включая только сопоставленные (предоставляемые) столбцы, которые вы попросили, и любые дополнительные столбцы, которые он должен получить внутренне. К ним могут относиться столбцы, необходимые для связей (внешних ключей), первичных ключей или стабильного упорядочения, используемых в построении страниц и создания курсоров.
Замечание
GraphQL не имеет подстановочных знаков, таких как SELECT *. Клиенты должны явно указать каждое поле.
Перейдите к версии REST этого документа.
Базовый выбор
Запрос нескольких сопоставленных полей.
Запрос GraphQL
query {
books {
items {
id
title
price
}
}
}
Концептуальный SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Пример ответа
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Псевдонимы полей
Псевдонимы переименовают поля в ответе, а не в базе данных. Уровень SQL не является псевдонимом имен полей GraphQL; Псевдоним происходит после получения данных.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
Концептуальный SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Пример ответа
С псевдонимами:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Вложенный выбор
Связи, определенные в конфигурации, разрешают вложенные запросы. В приведенном ниже концептуальном SQL показано одно соединение. На практике DAB может выполнять один или несколько параметризованных запросов (например, родительский запрос и пакетное получение дочернего элемента), а не одно не одно неструктурированное соединение.
Запрос GraphQL
query {
books {
items {
id
title
category {
id
name
}
}
}
}
Концептуальный SQL
SELECT
b.id,
b.sku_title AS title,
c.id AS category_id,
c.name AS category_name
FROM dbo.books AS b
JOIN dbo.categories AS c
ON b.category_id = c.id;
Пример ответа
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
Выбор "один ко многим"
Вы также можете пройти по обратной связи. Опять же, SQL является концептуальной; фактическое выполнение может дедупликировать родительские строки и материализовать дочерние коллекции отдельно.
Запрос GraphQL
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
Концептуальный SQL
SELECT
c.id,
c.name,
b.id AS book_id,
b.sku_title AS title
FROM dbo.categories AS c
JOIN dbo.books AS b
ON c.id = b.category_id;
Пример ответа
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Пример конфигурации
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
См. также
| Понятие | REST | GraphQL | Цель |
|---|---|---|---|
| Projection | $select | items | Выбор возвращаемых полей |
| Filtering | $filter | фильтр | Ограничение строк по условию |
| Сортировка | $orderby | orderBy | Определение порядка сортировки |
| Размер страницы | $first | first | Ограничение количества элементов на страницу |
| Продолжение | $after | после | Продолжить с последней страницы с помощью курсора |
Замечание
Ключевые слова REST начинаются с $следующих соглашений OData.