Partilhar via


Host REST endpoints no construtor de API de dados

O construtor de API de dados fornece uma API Web RESTful que permite acessar tabelas, exibições e procedimentos armazenados a partir de um banco de dados conectado. As entidades representam um objeto de banco de dados na configuração de tempo de execução do Data API builder. Uma entidade deve ser definida na configuração de tempo de execução para que esteja disponível no ponto de extremidade da API REST.

Chamar um método de API REST

Para ler ou gravar em um recurso (ou entidade), construa uma solicitação usando o seguinte padrão:

{HTTP method} https://{base_url}/{rest-path}/{entity}

Observação

Todos os componentes do caminho da URL, incluindo entidades e parâmetros de consulta, diferenciam maiúsculas de minúsculas.

Os componentes de uma solicitação incluem:

Descrição
{HTTP method} O método HTTP usado na solicitação ao Data API builder
{base_url} O domínio (ou localhost server and port) que hospeda uma instância do Data API builder
{rest-path} O caminho base do ponto de extremidade da API REST definido na configuração de tempo de execução
{entity} O nome do objeto de banco de dados conforme definido na configuração de tempo de execução

Aqui está um exemplo de solicitação GET na entidade book que reside sob a base de ponto de extremidade REST /api em um ambiente de desenvolvimento local localhost:

GET https:/localhost:5001/api/Book

Métodos HTTP

O construtor de API de dados usa o método HTTP em sua solicitação para determinar qual ação executar na entidade designada pela solicitação. Os seguintes verbos HTTP estão disponíveis, dependendo das permissões definidas para uma entidade específica.

Método Descrição
GET Obter zero, um ou mais itens
POST Criar um novo item
PATCH Atualize um item com novos valores, se existir. Caso contrário, crie um novo item
PUT Substitua um item por um novo, se existir. Caso contrário, crie um novo item
DELETE Excluir um item

Caminho de descanso

O caminho restante designa o local da API REST do construtor de API de dados. O caminho é configurável na configuração de tempo de execução e assume como padrão /api. Para mais informações, consulte a configuração do caminho REST .

Entidade

Entity é a terminologia usada para fazer referência a um recurso de API REST no Data API builder. Por padrão, o valor de rota de URL para uma entidade é o nome da entidade definido na configuração de tempo de execução. O valor do caminho de URL REST de uma entidade é configurável dentro das configurações REST da entidade. Para mais informações, consulte a configuração de entidade.

Formato do conjunto de resultados

O resultado retornado é um objeto JSON com este formato:

{
    "value": []    
}

Os itens relacionados à entidade solicitada estão disponíveis na matriz value. Por exemplo:

{
  "value": [
    {
      "id": 1000,
      "title": "Foundation"
    },
    {
      "id": 1001,
      "title": "Foundation and Empire"
    }
  ]
}

Observação

Apenas os primeiros 100 itens são retornados por padrão.

OBTER

Usando o método GET, você pode recuperar um ou mais itens da entidade desejada.

Parâmetros de URL

Os pontos de extremidade REST permitem que você recupere um item por sua chave primária usando parâmetros de URL. Para entidades com uma única chave primária, o formato é simples:

GET /api/{entity}/{primary-key-column}/{primary-key-value}

Para recuperar um livro com um ID de 1001, você deve usar:

GET /api/book/id/1001

Para entidades com chaves primárias compostas, em que mais de uma coluna é usada para identificar exclusivamente um registro, o formato de URL inclui todas as colunas de chave em sequência:

GET /api/{entity}/{primary-key-column1}/{primary-key-value1}/{primary-key-column2}/{primary-key-value2}

Se uma entidade books tiver uma chave composta que consiste em id1 e id2, você recuperaria um livro específico como este:

GET /api/books/id1/123/id2/abc

Por exemplo:

Veja como seria uma chamada:

### Retrieve a book by a single primary key
GET /api/book/id/1001

### Retrieve an author by a single primary key
GET /api/author/id/501

### Retrieve a book by compound primary keys (id1 and id2)
GET /api/books/id1/123/id2/abc

### Retrieve an order by compound primary keys (orderId and customerId)
GET /api/orders/orderId/789/customerId/456

### Retrieve a product by compound primary keys (categoryId and productId)
GET /api/products/categoryId/electronics/productId/987

### Retrieve a course by compound primary keys (departmentCode and courseNumber)
GET /api/courses/departmentCode/CS/courseNumber/101

Parâmetros de consulta

Os pontos de extremidade REST suportam os seguintes parâmetros de consulta (diferencia maiúsculas de minúsculas) para controlar os itens retornados:

  • $select: Devolve apenas as colunas selecionadas
  • $filter: filtra os itens devolvidos
  • $orderby: define como os dados retornados são classificados
  • $first e $after: Devolve apenas os principais itens n

Os parâmetros de consulta podem ser usados juntos.

$select

O parâmetro query $select permitir especificar quais campos devem ser retornados. Por exemplo:

### Get all fields
GET /api/author

### Get only first_name field
GET /api/author?$select=first_name

### Get only first_name and last_name fields
GET /api/author?$select=first_name,last_name

Observação

Se algum dos campos solicitados não existir ou não estiver acessível devido a permissões configuradas, uma 400 - Bad Request será retornada.

O parâmetro de consulta $select, também conhecido como "projeção", é usado para controlar o tamanho dos dados retornados em uma resposta de API. Com apenas as colunas necessárias, o $select reduz o tamanho da carga útil, o que pode melhorar o desempenho minimizando o tempo de análise, reduzindo o uso de largura de banda e acelerando o processamento de dados. Esta otimização estende-se à base de dados. Lá, apenas as colunas solicitadas são recuperadas.

$filter

O valor da opção $filter é uma expressão de predicado (uma expressão que retorna um resultado booleano) usando os campos da entidade. Apenas os itens em que a expressão é avaliada como True são incluídos na resposta. Por exemplo:

### Get books titled "Hyperion" (Equal to)
GET /api/book?$filter=title eq 'Hyperion'

### Get books not titled "Hyperion" (Not equal to)
GET /api/book?$filter=title ne 'Hyperion'

### Get books published after 1990 (Greater than)
GET /api/book?$filter=year gt 1990

### Get books published in or after 1990 (Greater than or equal to)
GET /api/book?$filter=year ge 1990

### Get books published before 1991 (Less than)
GET /api/book?$filter=year lt 1991

### Get books published in or before 1990 (Less than or equal to)
GET /api/book?$filter=year le 1990

### Get books published between 1980 and 1990 (Logical and)
GET /api/book?$filter=year ge 1980 and year le 1990

### Get books published before 1960 or titled "Hyperion" (Logical or)
GET /api/book?$filter=year le 1960 or title eq 'Hyperion'

### Get books not published before 1960 (Logical negation)
GET /api/book?$filter=not (year le 1960)

### Get books published in 1970 or later, and either titled "Foundation" or with more than 400 pages (Grouping)
GET /api/book?$filter=(year ge 1970 or title eq 'Foundation') and pages gt 400

Os operadores apoiados pela opção $filter são:

Operador Tipo Descrição Exemplo
eq Comparação Igual title eq 'Hyperion'
ne Comparação Não é igual title ne 'Hyperion'
gt Comparação Maior que year gt 1990
ge Comparação Maior ou igual year ge 1990
lt Comparação Menos de year lt 1990
le Comparação Menor ou igual year le 1990
and Lógica Lógica e year ge 1980 and year lt 1990
or Lógica Lógico ou year le 1960 or title eq 'Hyperion'
not Lógica Negação lógica not (year le 1960)
( ) Agrupamento Agrupamento de precedência (year ge 1970 or title eq 'Foundation') and pages gt 400

Observação

$filter é um argumento sensível a maiúsculas e minúsculas.

O parâmetro de consulta $filter no Azure Data API Builder pode lembrar alguns usuários do OData, e isso porque ele foi diretamente inspirado pelos recursos de filtragem do OData. A sintaxe é quase idêntica, tornando mais fácil para os desenvolvedores que já estão familiarizados com OData pegar e usar. Essa semelhança foi intencional, com o objetivo de fornecer uma maneira familiar e poderosa de filtrar dados em diferentes APIs.

$orderby

O valor do parâmetro orderby é uma lista separada por vírgulas de expressões usadas para classificar os itens.

Cada expressão no valor do parâmetro orderby pode incluir o sufixo desc para solicitar uma ordem decrescente, que deve ser separada da expressão por um ou mais espaços.

Por exemplo:

### Order books by title in ascending order
GET /api/book?$orderby=title

### Order books by title in ascending order
GET /api/book?$orderby=title asc

### Order books by title in descending order
GET /api/book?$orderby=title desc

### Order books by year of publication in ascending order, then by title in ascending order
GET /api/book?$orderby=year asc, title asc

### Order books by year of publication in descending order, then by title in ascending order
GET /api/book?$orderby=year desc, title asc

### Order books by number of pages in ascending order, then by title in descending order
GET /api/book?$orderby=pages asc, title desc

### Order books by title in ascending order, then by year of publication in descending order
GET /api/book?$orderby=title asc, year desc

Observação

$orderBy é um argumento sensível a maiúsculas e minúsculas.

O parâmetro de consulta $orderby é valioso para classificar dados diretamente no servidor, facilmente manipulados também no lado do cliente. No entanto, torna-se útil quando combinado com outros parâmetros de consulta, como $filter e $first. O parâmetro permite que a paginação mantenha um conjunto de dados estável e previsível à medida que você pagina através de grandes coleções.

$first e $after

O parâmetro de consulta $first limita o número de itens retornados em uma única solicitação. Por exemplo:

GET /api/book?$first=5

Este pedido devolve os cinco primeiros livros. O parâmetro de consulta $first no Azure Data API Builder é semelhante à cláusula TOP no SQL. Ambos são usados para limitar o número de registros retornados de uma consulta. Assim como TOP no SQL permite especificar a quantidade de linhas a serem recuperadas, $first permite controlar o número de itens retornados pela API. $first é útil quando você deseja buscar um pequeno subconjunto de dados, como os primeiros 10 resultados, sem recuperar o conjunto de dados inteiro. A principal vantagem é a eficiência, pois reduz a quantidade de dados transmitidos e processados.

Observação

No construtor da API de Dados do Azure, o número de linhas retornadas por padrão é limitado por uma configuração no arquivo de configuração. Os usuários podem substituir esse limite usando o parâmetro $first para solicitar mais linhas, mas ainda há um número máximo configurado de linhas que podem ser retornadas em geral. Além disso, há um limite no total de megabytes que podem ser retornados em uma única resposta, que também é configurável.

Se houver mais itens disponíveis além do limite especificado, a resposta incluirá uma nextLink propriedade:

{
    "value": [],
    "nextLink": "dab-will-generate-this-continuation-url"
}

O nextLink pode ser usado com o parâmetro de consulta $after para recuperar o próximo conjunto de itens:

GET /api/book?$first={n}&$after={continuation-data}

Essa abordagem de continuação usa paginação baseada em cursor. Um cursor exclusivo é uma referência a um item específico no conjunto de dados, determinando onde continuar a recuperar dados no próximo conjunto. Ao contrário da paginação de índice que usa deslocamentos ou índices, a paginação baseada em cursor não depende de ignorar registros. A continuação do cursor torna-o mais fiável com grandes conjuntos de dados ou dados que mudam frequentemente. Em vez disso, ele garante um fluxo suave e consistente de recuperação de dados, iniciando exatamente onde a última consulta parou, com base no cursor fornecido.

Por exemplo:

### Get the first 5 books explicitly
GET /api/book?$first=5

### Get the next set of 5 books using the continuation token
GET /api/book?$first=5&$after={continuation-token}

### Get the first 10 books, ordered by title
GET /api/book?$first=10&$orderby=title asc

### Get the next set of 10 books after the first set, ordered by title
GET /api/book?$first=10&$after={continuation-token}&$orderby=title asc

### Get books without specifying $first (automatic pagination limit)
GET /api/book

### Get the next set of books using the continuation token without specifying $first
GET /api/book?$after={continuation-token}

PUBLICAR

Crie um novo item para a entidade especificada. Por exemplo:

POST /api/book
Content-type: application/json

{
  "id": 2000,
  "title": "Do Androids Dream of Electric Sheep?"
}

A solicitação POST cria um novo livro. Todos os campos que não podem ser anulados devem ser fornecidos. Se for bem-sucedido, o objeto de entidade completo, incluindo quaisquer campos nulos, será retornado:

{
  "value": [
    {
      "id": 2000,
      "title": "Do Androids Dream of Electric Sheep?",
      "year": null,
      "pages": null
    }
  ]
}

COLOCAR

PUT cria ou substitui um item da entidade especificada. O padrão de consulta é:

PUT /api/{entity}/{primary-key-column}/{primary-key-value}

Por exemplo:

PUT /api/book/id/2001
Content-type: application/json

{  
  "title": "Stranger in a Strange Land",
  "pages": 525
}

Se houver um item com a chave primária especificada 2001, os dados fornecidos substituirão completamente esse item. Se, em vez disso, um item com essa chave primária não existir, um novo item será criado.

Em ambos os casos, o resultado é algo como:

{
  "value": [
    {
      "id": 2001,
      "title": "Stranger in a Strange Land",
      "year": null,
      "pages": 525
    }
  ]
}

O cabeçalho de solicitação HTTP If-Match: *

O cabeçalho HTTP If-Match: * garante que a operação de atualização seja executada somente se o recurso existir. Se o recurso não existir, a operação falhará com o código de status HTTP: 404 Not Found. Se o cabeçalho If-Match for omitido, o comportamento padrão é executar um upsert, que cria o recurso se ele ainda não existir.

Exemplo:

PUT /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json

{
  "title": "Stranger in a Strange Land",
  "pages": 525
}

Observação

Se você especificar um valor diferente de * no cabeçalho If-Match, o construtor de API de dados retornará um erro 400 Bad Request, pois a correspondência baseada em ETag não é suportada.

REMENDO

PATCH cria ou atualiza o item da entidade especificada. Apenas os campos especificados são afetados. Todos os campos não especificados no corpo da solicitação não são afetados. Se um item com a chave primária especificada não existir, um novo item será criado.

O padrão de consulta é:

PATCH /api/{entity}/{primary-key-column}/{primary-key-value}

Por exemplo:

PATCH /api/book/id/2001
Content-type: application/json

{    
  "year": 1991
}

O resultado é algo como:

{
  "value": [
    {
      "id": 2001,
      "title": "Stranger in a Strange Land",
      "year": 1991,
      "pages": 525
    }
  ]
}

O cabeçalho de solicitação HTTP If-Match: *

O cabeçalho HTTP If-Match: * garante que a operação de atualização seja executada apenas se o recurso existir. Se o recurso não existir, a operação falhará com o código de status HTTP: 404 Not Found. Se o cabeçalho If-Match for omitido, o comportamento padrão é executar um upsert, que cria o recurso se ele ainda não existir.

Exemplo:

PATCH /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json

{
    "year": 1991
}

Observação

Se você especificar um valor diferente de * no cabeçalho If-Match, o construtor de API de dados retornará um erro 400 Bad Request, pois a correspondência baseada em ETag não é suportada.

SUPRIMIR

DELETE exclui o item da entidade especificada. O padrão de consulta é:

DELETE /api/{entity}/{primary-key-column}/{primary-key-value}

Por exemplo:

DELETE /api/book/id/2001

Se for bem-sucedida, o resultado será uma resposta vazia com o código de status 204.

Transações de banco de dados para solicitações de API REST

Para processar solicitações de API POST, PUT, PATCH e DELETE; O construtor de API de dados constrói e executa as consultas de banco de dados em uma transação.

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 Azure SQL
MySQL Leitura repetível MySQL
PostgreSQL Leia Comprometido PostgreSQL