Hospedar pontos de extremidade REST 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 de um banco de dados conectado. As entidades representam um objeto de banco de dados na configuração de runtime do Construtor de API de Dados. Uma entidade deve ser definida na configuração de runtime para que ela 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), você constrói uma solicitação usando o seguinte padrão:
{HTTP method} https://{base_url}/{rest-path}/{entity}
Nota
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 para o construtor de API de Dados |
{base_url} |
O domínio (ou servidor localhost e porta) que hospeda uma instância do construtor de API de Dados |
{rest-path} |
O caminho base do ponto de extremidade da API REST definido na configuração de runtime |
{entity} |
O nome do objeto de banco de dados conforme definido na configuração de runtime |
Aqui está um exemplo de solicitação GET na entidade book
que reside no /api
base do ponto de extremidade REST 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 verbos HTTP a seguir 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 houver um. 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 repouso
O caminho restante designa o local da API REST do Construtor de API de Dados. O caminho é configurável na configuração de runtime e usa como padrão /api. Para obter mais informações, consulte de configuração do caminho REST.
Entidade
Entity é a terminologia usada para fazer referência a um recurso da API REST no construtor de API de Dados. Por padrão, o valor da rota de URL para uma entidade é o nome da entidade definido na configuração de runtime. O valor do caminho da URL REST de uma entidade é configurável dentro das configurações REST da entidade. Para obter mais informações, consulte de 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"
}
]
}
Nota
Somente 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 uma ID de 1001
, você usaria:
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 na 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ê recuperará um livro específico como este:
GET /api/books/id1/123/id2/abc
Por exemplo:
Veja a aparência de 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 dão suporte aos seguintes parâmetros de consulta (diferenciam maiúsculas de minúsculas) para controlar os itens retornados:
-
$select
: retorna apenas as colunas selecionadas -
$filter
: filtra os itens retornados -
$orderby
: define como os dados retornados são classificados -
$first
e$after
: retorna apenas os principais itens den
Os parâmetros de consulta podem ser usados juntos.
$select
O parâmetro de consulta $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
Nota
Se qualquer um dos campos solicitados não existir ou não estiver acessível devido a permissões configuradas, um 400 - Bad Request
será retornado.
O parâmetro de consulta $select
, também conhecido como "projeção", é usado para controlar o tamanho dos dados retornados em uma resposta à API. Com apenas as colunas necessárias, $select
reduz o tamanho da carga, o que pode melhorar o desempenho minimizando o tempo de análise, reduzindo o uso da largura de banda e acelerando o processamento de dados. Essa otimização se estende ao banco de dados. Lá, somente 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 booliano) usando os campos da entidade. Somente 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 compatíveis com a opção $filter
são:
Operador | Tipo | Descrição | Exemplo |
---|---|---|---|
eq |
Comparação | Igual | title eq 'Hyperion' |
ne |
Comparação | Não é igual a | title ne 'Hyperion' |
gt |
Comparação | Maior que | year gt 1990 |
ge |
Comparação | Maior ou igual a | year ge 1990 |
lt |
Comparação | Menor que | year lt 1990 |
le |
Comparação | Menor ou igual a | year le 1990 |
and |
Lógico | Lógico e | year ge 1980 and year lt 1990 |
or |
Lógico | Lógico ou | year le 1960 or title eq 'Hyperion' |
not |
Lógico | Negação lógica | not (year le 1960) |
( ) |
Agrupamento | Agrupamento de precedência | (year ge 1970 or title eq 'Foundation') and pages gt 400 |
Nota
$filter
é um argumento que diferencia maiúsculas de minúsculas.
O parâmetro de consulta $filter
no Construtor de API de Dados do Azure 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, facilitando que os desenvolvedores que já estão familiarizados com o OData peguem e usem. Essa similaridade foi intencional, destinada a 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, 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
Nota
$orderBy
é um argumento que diferencia maiúsculas de minúsculas.
O parâmetro de consulta $orderby
é valioso para classificar dados diretamente no servidor, facilmente manipulados no lado do cliente também. No entanto, ele se torna ú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 por meio 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
Essa solicitação retorna os cinco primeiros livros. O parâmetro de consulta $first
no Construtor de API de Dados do Azure é 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 que você especifique 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 todo o conjunto de dados. A principal vantagem é a eficiência, pois reduz a quantidade de dados transmitidos e processados.
Nota
No construtor de 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 no geral. Além disso, há um limite no total de megabytes que pode ser retornado em uma única resposta, que também é configurável.
Se mais itens estiverem disponíveis além do limite especificado, a resposta incluirá uma propriedade nextLink
:
{
"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 recuperando 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-a mais confiável com grandes conjuntos de dados ou com a alteração frequente de dados. Em vez disso, 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}
POSTAR
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 anuláveis devem ser fornecidos. Se 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
}
]
}
PÔR
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
}
]
}
REMENDO
PATCH cria ou atualiza o item da entidade especificada. Somente 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
}
]
}
EXCLUIR
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 bem-sucedido, o resultado será uma resposta vazia com o código de status 204.
Transações de banco de dados para solicitações da 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 |
---|---|---|
SQL do Azure (ou) SQL Server | Leitura confirmada | do SQL do Azure |
MySQL | Leitura repetível | MySQL |
PostgreSQL | Leitura confirmada | postgreSQL |