Pontos de extremidade do Host GraphQL no construtor de API de dados
As entidades configuradas para estarem disponíveis via GraphQL estão disponíveis no caminho padrão: https://{base_url}//graphql
. O construtor de API de dados gera automaticamente um esquema GraphQL com campos de consulta e mutação para todas as entidades configuradas. O esquema GraphQL pode ser explorado usando um cliente GraphQL moderno que inclui recursos como preenchimento automático.
Se você seguiu o Introdução exemplo, onde há o books
e a entidade authors
configurada para acesso ao GraphQL, você pode ver como é fácil usar o GraphQL.
Formato do conjunto de resultados
O resultado retornado é um objeto JSON com este formato:
{
"data": {}
}
Observação
Apenas os primeiros 100 itens são retornados por padrão.
Tipos de raiz suportados
O construtor de API de dados suporta os seguintes tipos de raiz GraphQL:
Consultas
Cada entidade tem apoio para as seguintes ações:
O construtor de API de dados, a menos que especificado de outra forma, usa o singular nome de uma entidade sempre que se espera que a consulta retorne um único item. Por outro lado, o construtor de API de dados usa o plural nome de uma entidade sempre que se espera que a consulta retorne uma lista de itens. Por exemplo, a entidade book
tem:
-
book_by_pk()
: para devolver zero ou uma entidade -
books()
: para retornar uma lista de zero ou mais entidades
Paginação
Todos os tipos de consulta que retornam zero ou mais itens suportam paginação:
{
books
{
items {
title
}
hasNextPage
endCursor
}
}
- O objeto
item
permite o acesso aos campos da entidade -
hasNextPage
é definido como true se houver mais itens a serem devolvidos -
endCursor
retorna uma cadeia de caracteres de cursor opaca que pode ser usada com parâmetros de consultafirst
eafter
para obter o próximo conjunto (ou página) de itens.
Consulta por chave primária
Cada entidade suporta a recuperação de um item específico por meio de sua Chave Primária, usando o seguinte formato de consulta:
<entity>_by_pk(<pk_colum>:<pk_value>)
{
<fields>
}
Por exemplo:
{
book_by_pk(id:1010) {
title
}
}
Consulta genérica
Cada entidade também suporta um padrão de consulta genérico para que você possa pedir apenas os itens desejados, na ordem desejada, usando os seguintes parâmetros:
-
filter
: filtra os itens devolvidos -
orderBy
: define como os dados retornados são classificados -
first
eafter
: Devolve apenas os principais itensn
Por exemplo:
{
authors(
filter: {
or: [
{ first_name: { eq: "Isaac" } }
{ last_name: { eq: "Asimov" } }
]
}
) {
items {
first_name
last_name
books(orderBy: { year: ASC }) {
items {
title
year
}
}
}
}
}
filter
O valor do parâmetro filter
é expressão de predicado (uma expressão que retorna um valor booleano) usando campos de entidade. Apenas os itens em que a expressão é avaliada como 'Verdadeiro' são incluídos na resposta. Por exemplo:
{
books(filter: { title: { contains: "Foundation" } })
{
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Esta consulta devolve todos os livros com a palavra Foundation
no título.
Os operadores suportados pelo parâmetro filter
são:
Operador | Tipo | Descrição | Exemplo |
---|---|---|---|
eq |
Comparação | Igual | books(filter: { title: { eq: "Foundation" } }) |
neq |
Comparação | Não é igual | books(filter: { title: { neq: "Foundation" } }) |
gt |
Comparação | Maior que | books(filter: { year: { gt: 1990 } }) |
gte |
Comparação | Maior ou igual | books(filter: { year: { gte: 1990 } }) |
lt |
Comparação | Menos de | books(filter: { year: { lt: 1990 } }) |
lte |
Comparação | Menor ou igual | books(filter: { year: { lte: 1990 } }) |
isNull |
Comparação | É nulo | books(filter: { year: { isNull: true} }) |
contains |
String | Contém | books(filter: { title: { contains: "Foundation" } }) |
notContains |
String | Não contém | books(filter: { title: { notContains: "Foundation" } }) |
startsWith |
String | Começa com | books(filter: { title: { startsWith: "Foundation" } }) |
endsWith |
String | Terminar com | books(filter: { title: { endsWith: "Empire" } }) |
and |
Lógica | Lógica e | authors(filter: { and: [ { first_name: { eq: "Robert" } } { last_name: { eq: "Heinlein" } } ] }) |
or |
Lógica | Lógico ou | authors(filter: { or: [ { first_name: { eq: "Isaac" } } { first_name: { eq: "Dan" } } ] }) |
orderBy
O valor do orderby
definir a ordem com a qual os itens no conjunto de resultados são retornados. Por exemplo:
{
books(orderBy: {title: ASC} )
{
items {
id
title
}
}
}
Esta consulta devolve livros ordenados por title
.
first
e after
O parâmetro first
limita o número de itens retornados. Por exemplo:
query {
books(first: 5)
{
items {
id
title
}
hasNextPage
endCursor
}
}
Esta consulta retorna os cinco primeiros livros. Quando nenhuma orderBy
é especificada, os itens são ordenados com base na chave primária subjacente. O valor fornecido a orderBy
deve ser um número inteiro positivo.
Se houver mais itens na entidade book
do que as entidades solicitadas via first
, o campo hasNextPage
será avaliado para true
e o endCursor
retornará uma cadeia de caracteres que pode ser usada com o parâmetro after
para acessar os próximos itens. Por exemplo:
query {
books(first: 5, after: "W3siVmFsdWUiOjEwMDQsIkRpcmVjdGlvbiI6MCwiVGFibGVTY2hlbWEiOiIiLCJUYWJsZU5hbWUiOiIiLCJDb2x1bW5OYW1lIjoiaWQifV0=")
{
items {
id
title
}
hasNextPage
endCursor
}
}
Mutações
Para cada entidade, as mutações para suportar operações de criação, atualização e exclusão são criadas automaticamente. A operação de mutação é criada usando o seguinte padrão de nome: <operation><entity>
. Por exemplo, para a entidade book
, as mutações seriam:
-
createbook
: Criar um novo livro -
updatebook
: atualizar um livro existente -
deletebook
: Excluir o livro especificado
Criar
Para criar um novo elemento da entidade desejada, a mutação create<entity>
é fornecida. A mutação criada requer o parâmetro item
, onde os valores para os campos obrigatórios da entidade, a serem usados ao criar o novo item, são especificados.
create<entity>(item: <entity_fields>)
{
<fields>
}
Por exemplo:
mutation {
createbook(item: {
id: 2000,
title: "Leviathan Wakes"
}) {
id
title
}
}
Atualizar
Para atualizar um elemento da entidade desejada, a mutação update<entity>
é fornecida. A mutação de atualização requer dois parâmetros:
-
<primary_key>
, a lista chave-valor de colunas de chave primária e valores relacionados para identificar o elemento a ser atualizado -
item
: parâmetro, com valores de campos obrigatórios da entidade, a ser usado ao atualizar o item especificado
update<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,] item: <entity_fields>)
{
<fields>
}
Por exemplo:
mutation {
updatebook(id: 2000, item: {
year: 2011,
pages: 577
}) {
id
title
year
pages
}
}
Suprimir
Para excluir um elemento da entidade desejada, a mutação delete<entity>
é fornecida. A chave primária do elemento a ser excluído é o parâmetro necessário.
delete<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,])
{
<fields>
}
Por exemplo:
mutation {
deletebook(id: 1234)
{
id
title
}
}
Transações de banco de dados para uma mutação
Para processar uma solicitação de mutação típica do GraphQL, o construtor de API de dados constrói duas consultas de banco de dados. Uma das consultas de banco de dados executa a ação de atualização (ou) inserção (ou) exclusão associada à mutação. A outra consulta de banco de dados busca os dados solicitados no conjunto de seleção.
O construtor de API de dados executa ambas as consultas de banco de dados em uma transação. As transações são criadas apenas para tipos de banco de dados SQL.
A tabela a seguir lista os níveis de isolamento com os quais as transações são criadas para cada tipo de banco de dados.
Tipo de banco de dados | Nível de isolamento | Mais informações |
---|---|---|
Azure SQL (ou) SQL Server | Leia Comprometido | SQL do Azure |
MySQL | Leitura repetível | MySQL |
PostgreSQL | Leia Comprometido | PostgreSQL |
Conteúdo relacionado
- de referência de configuração do GraphQL
- OpenAPI