Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
No GraphQL, os campos solicitados definem exatamente o que o Data API builder (DAB) retorna, nem mais, nem menos. O DAB compila essas seleções em SQL parametrizado, incluindo apenas as colunas mapeadas (expostas) solicitadas e todas as colunas extras que ele deve buscar internamente. Estes podem incluir colunas necessárias para relações (chaves estrangeiras), chaves primárias ou ordenação estável usada na paginação e construção do cursor.
Observação
GraphQL não tem curinga como SELECT *. Os clientes devem especificar cada campo explicitamente.
Vá para a versão REST deste documento.
Seleção básica
Consultando alguns campos mapeados.
Consulta GraphQL
query {
books {
items {
id
title
price
}
}
}
SQL conceitual
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Resposta da amostra
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Aliases de campo
Os aliases renomeiam campos na resposta, não no banco de dados. A camada SQL não usa alias para nomes de campo GraphQL; O aliasing acontece após a recuperação de dados.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
SQL conceitual
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Resposta da amostra
Com pseudónimos:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Seleção aninhada
As relações definidas na configuração permitem consultas aninhadas. O SQL conceitual abaixo mostra uma única junção. Na prática, o DAB pode executar uma ou mais consultas parametrizadas (por exemplo, uma consulta pai mais uma busca filho em lote) em vez de uma única junção nivelada.
Consulta GraphQL
query {
books {
items {
id
title
category {
id
name
}
}
}
}
SQL conceitual
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;
Resposta da amostra
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
Seleção um-para-muitos
Você também pode atravessar a relação inversa. Novamente, SQL é conceitual; A execução real pode desduplicar as linhas pai e materializar coleções filhas separadamente.
Consulta GraphQL
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
SQL conceitual
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;
Resposta da amostra
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Configuração de exemplo
{
"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" ]
}
}
}
}
}
Consulte também
| Concept | REST | GraphQL | Propósito |
|---|---|---|---|
| Projection | $select | items | Escolha quais campos retornar |
| Filtering | $filter | filtrar | Restringir linhas por condição |
| Classificação | $orderby | orderBy | Definir a ordem de classificação |
| Tamanho da página | $first | first | Limitar o número de itens por página |
| Continuação | $after | após | Continue a partir da última página usando um cursor |
Observação
As palavras-chave REST começam com $, seguindo as convenções OData.