Partilhar via


Consultar recursos do Azure Cosmos DB com a API REST

O Azure Cosmos DB é uma base de dados com múltiplos modelos distribuído globalmente com suporte para várias APIs. Este artigo descreve como utilizar o REST para consultar recursos com a API SQL.

Como devo proceder para consultar um recurso com REST?

Para efetuar uma consulta SQL num recurso, faça o seguinte:

  • Execute um POST método num caminho de recurso com JSON com a query propriedade definida para a cadeia de consulta SQL e a propriedade "parâmetros" definida para a matriz de valores de parâmetros opcionais.
  • Defina o x-ms-documentdb-isquery cabeçalho como True.
  • Defina o Content-Type cabeçalho como application/query+json.

Para obter um exemplo que mostre como efetuar uma consulta SQL num recurso com .NET, veja REST from .NET Sample (Exemplo REST de .NET).

Exemplo

Segue-se um exemplo de operação de consulta REST nos recursos do documento. Neste exemplo, gostaríamos de encontrar todos os documentos que têm "Don" como autor.

POST https://contosomarketing.documents.azure.com/dbs/XP0mAA==/colls/XP0mAJ3H-AA=/docs HTTP/1.1  
x-ms-documentdb-isquery: True  
x-ms-date: Mon, 18 Apr 2015 13:05:49 GMT  
authorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3d  
x-ms-version: 2015-12-16  
x-ms-query-enable-crosspartition: True  
Accept: application/json  
Content-Type: application/query+json  
Host: contosomarketing.documents.azure.com  
Content-Length: 50  

{  
    "query": "SELECT * FROM root WHERE (root.Author.id = 'Don')",  
    "parameters": []  
}  
  

Detalhes do Pedido

Método URI do pedido
POST Necessário. O tipo de autenticação e o token de assinatura. Só é permitido o token de chave mestra para esta operação. Para obter mais informações, veja Controlo de Acesso nos Recursos do Cosmos DB.

Cabeçalhos do Pedido

A tabela seguinte contém os cabeçalhos comuns utilizados para realizar operações de consulta.

Cabeçalho Padrão Descrição
Autorização Necessário. O tipo de autenticação e o token de assinatura. Só é permitido o token de chave mestra para esta operação. Para obter mais informações, veja Controlo de Acesso nos Recursos do Cosmos DB.
Tipo de Conteúdo Necessário. Tem de ser definido como aplicação/consulta+json.
Aceitação Opcional. Neste momento, o Cosmos DB devolve sempre o payload de resposta no formato JSON padrão. O cliente tem de ser capaz de aceitar o corpo de resposta no formato JSON padrão.
User-Agent Opcional. O agente do utilizador que está a executar o pedido. O formato recomendado é {user agent name}/{version}. Por exemplo, o SDK .NET da API SQL define a cadeia de User-Agent como Microsoft.Document.Client/1.0.0.0.
Cabeçalho Personalizado Descrição
x-ms-date Necessário. A data do pedido, conforme especificado em RFC 1123. O formato de data é expresso em Hora Universal Coordenada (UTC), por exemplo. Sex, 08 abr 2015 03:52:31 GMT.
x-ms-documentdb-isquery Necessário. Esta propriedade tem de ser definida como verdadeira.
x-ms-max-item-count Opcional. Para percorrer um conjunto de resultados, defina este cabeçalho como o número máximo para que os itens sejam devolvidos numa única página.
x-ms-continuation Opcional. Para navegar para a página seguinte dos itens, defina este cabeçalho para o token de continuação para a página seguinte.
x-ms-version Opcional. A versão do serviço REST do Cosmos DB. A versão mais recente é utilizada quando o cabeçalho não é fornecido. Para obter mais informações, veja Referência da API REST do Azure Cosmos DB.
x-ms-documentdb-query-enable-scan Opcional. Utilize uma análise de índice para processar a consulta se o caminho de índice correto do tipo não estiver disponível.
x-ms-session-token Opcional. O token de sessão do pedido. Utilizado para consistência de sessão.
x-ms-partition-key Opcional. Se for especificado, a consulta é executada apenas em documentos que correspondam ao valor da chave de partição no cabeçalho.
x-ms-documentdb-query-enablecrosspartition Opcional. Tem de ser definido como verdadeiro para quaisquer consultas que não filtrem numa única chave de partição. As consultas que filtram um valor de chave de partição única serão executadas apenas numa única partição, mesmo que esteja definida como verdadeira.
x-ms-documentdb-populatequerymetrics Opcional. Tem de ser definido como True para devolver métricas de consulta

Corpo do Pedido

O corpo do pedido deve ser um documento JSON válido que contenha a consulta SQL e os parâmetros. Se a entrada tiver uma sintaxe SQL incorreta ou inválida, a operação com falha com um erro 400 Pedido Incorreto.

Também receberá um pedido 400 incorreto se não for possível servir uma consulta pelo gateway.

Propriedade Descrição
query Necessário. A cadeia de consulta SQL da consulta. Para obter mais informações, veja Referência da sintaxe SQL do Azure Cosmos DB.
parâmetros Necessário. Uma matriz JSON de parâmetros especificados como pares de valores de nome. A matriz de parâmetros pode conter de zero a muitos parâmetros. Cada parâmetro tem de ter os seguintes valores:nome: o nome do parâmetro. Os nomes dos parâmetros têm de ser literais de cadeia válidos e começar por "@". valor: o valor do parâmetro. Pode ser qualquer valor JSON válido (cadeia, número, objeto, matriz, booleano ou nulo).

Exemplo de Pedido

O exemplo seguinte faz um pedido SQL parametrizado com um parâmetro de cadeia para @author.

POST https://contosomarketing.documents.azure.com/dbs/XP0mAA==/colls/XP0mAJ3H-AA=/docs HTTP/1.1  
x-ms-documentdb-isquery: True  
x-ms-date: Mon, 18 Apr 2015 13:05:49 GMT  
authorization: type%3dmaster%26ver%3d1.0%26sig%3dkOU%2bBn2vkvIlHypfE8AA5fulpn8zKjLwdrxBqyg0YGQ%3d  
x-ms-version: 2015-04-08  
Accept: application/json  
Content-Type: application/query+json  
Host: contosomarketing.documents.azure.com  
Content-Length: 50  
  
{  
    "query": "SELECT * FROM root WHERE (root.Author.id = @author)",  
    "parameters":   
    [  
        { "name": "@author", "value": "Leo Tolstoy"}  
    ]  
}  

Para obter mais informações sobre as consultas SQL, veja Consultas SQL para o Azure Cosmos DB.

Detalhes da Resposta

Seguem-se os códigos de estado comuns devolvidos por esta operação. Para obter informações sobre os códigos de estado de erro, veja Códigos de Estado HTTP para o Azure Cosmos DB.

Código Descrição
200 Ok A operação foi efetuada com êxito.
400 Pedido Incorreto A sintaxe da instrução SQL está incorreta.
401 Não Autorizado O cabeçalho Authorization ou x-ms-date não está definido. O erro 401 também é devolvido quando o cabeçalho Autorização está definido como um token de autorização inválido.
403 Proibido O token de autorização expirou.
404 Não Encontrado A coleção já não é um recurso. Por exemplo, o recurso pode ter sido eliminado.

Cabeçalhos de Resposta

Esta operação devolve os seguintes cabeçalhos comuns. Podem ser devolvidos cabeçalhos padrão e comuns adicionais.

Cabeçalho Padrão Descrição
Tipo de Conteúdo O Tipo de Conteúdo é application/json. O Cosmos DB devolve sempre o corpo da resposta no formato JSON padrão.
Data A data/hora da operação de resposta. Este formato de data/hora está em conformidade com o formato de data/hora [RFC1123] expresso em UTC.
Cabeçalho Personalizado Descrição
x-ms-item-count O número de item devolvido pela operação.
x-ms-continuation É uma cadeia opaca devolvida quando a consulta tem potencialmente mais itens a serem obtidos.

A x-ms-continuation pode ser incluída nos pedidos subsequentes como um cabeçalho de pedido para retomar a execução da consulta.
x-ms-request-charge É o número de unidades de pedido (RU) consumidas pela operação. Para obter mais informações sobre unidades de pedido, veja Unidades de Pedido no Azure Cosmos DB.
x-ms-activity-id É um identificador exclusivo para a operação. Pode ser utilizado para rastrear a execução de pedidos do Cosmos DB.
x-ms-session-token O token de sessão a ser utilizado para pedidos subsequentes. Utilizado para consistência de sessão.

Corpo da Resposta

O corpo de resposta da operação de consulta consiste na _rid do recurso principal do recurso que está a ser consultado e na matriz de recursos que contém as propriedades do recurso para a projeção e seleção. De acordo com o exemplo, se uma consulta tiver sido efetuada no caminho dos documentos da coleção com uma _rid de XP0mAJ3H-AA=, a resposta será a seguinte:

{"_rid":" XP0mAJ3H-AA=","Documents":   [  ….  ….   ],"_count":10}  
Propriedade Descrição
_rid O ID de recurso da coleção utilizada na consulta.
_count O número de itens devolvidos.
Matriz de recursos A matriz que contém os resultados da consulta.

Criar o corpo do pedido de consulta

O pedido de consulta tem de ser um documento JSON válido que contenha uma propriedade de consulta que contenha uma cadeia de consulta SQL válida e uma propriedade de parâmetros que contenha uma matriz de parâmetros opcionais. Cada parâmetro deve ter um nome e uma propriedade de valor de parâmetros especificados na consulta. Os nomes dos parâmetros têm de começar com o caráter "@". Os valores podem ser valores JSON válidos – cadeias, números inteiros, Booleanos e nulos.

É válido especificar apenas um subconjunto de parâmetros especificados no texto da consulta . As expressões que referenciam estes parâmetros não especificados serão avaliadas como indefinidas. Também é válido para especificar parâmetros adicionais que não são utilizados no texto da consulta .

Alguns exemplos de pedidos de consulta válidos são apresentados abaixo. Por exemplo, a consulta seguinte tem um único parâmetro @id.

{  
    "query": "select * from docs d where d.id = @id",   
    "parameters": [   
        {"@id": "newdoc"}   
     ]  
}  
  

O exemplo seguinte tem dois parâmetros, um com um valor de cadeia e outro com um valor inteiro.

{  
    "query": "select * from docs d where d.id = @id and d.prop = @prop",   
    "parameters": [   
        {"@id": "newdoc"},  
        {"@prop": 5}   
     ]  
}  

O exemplo seguinte utiliza parâmetros na cláusula SELECT, bem como uma propriedade acedida através do nome do parâmetro como um parâmetro.

{  
    "query": "select @id, d[@propName] from docs d",   
    "parameters": [   
        {"@id": "newdoc"},  
        {"@propName": "prop"}  
     ]  
}  

Consultas que não podem ser servidas pelo gateway

Qualquer consulta que necessite de estado entre continuações não pode ser servida pelo gateway. O que está incluído:

  • SUPERIOR
  • ORDENAR POR
  • LIMITE DE DESLOCAMENTO
  • Agregados
  • DISTINCT
  • GROUP BY

As consultas que podem ser servidas pelo gateway incluem:

  • Projeções simples
  • Filtros

Quando é devolvida uma resposta para uma consulta que não pode ser servida pelo gateway, conterá o código de estado 400 (BadRequest) e a seguinte mensagem:

{"code":"BadRequest","message":"The provided cross partition query can not be directly served by the gateway. 
This is a first chance (internal) exception that all newer clients will know how to handle gracefully. 
This exception is traced, but unless you see it bubble up as an exception (which only happens on older SDK clients), 
then you can safely ignore this message.\r\nActivityId: db660ee4-350a-40e9-bc2c-99f92f2b445d, Microsoft.Azure.Documents.Common/2.2.0.0",
"additionalErrorInfo":"{\"partitionedQueryExecutionInfoVersion\":2,\"queryInfo\":{\"distinctType\":\"None\",\"top\":null,\"offset\":null,\"limit\":null,
\"orderBy\":[\"Ascending\"],\"orderByExpressions\":[\"c._ts\"],\"aggregates\":[],
\"rewrittenQuery\":\"SELECT c._rid, [{\\\"item\\\": c._ts}] AS orderByItems, 
c AS payload\\nFROM c\\nWHERE ({documentdb-formattableorderbyquery-filter})\\nORDER BY c._ts\"},
\"queryRanges\":[{\"min\":\"\",\"max\":\"FF\",\"isMinInclusive\":true,\"isMaxInclusive\":false}]}"}

Paginação dos resultados da consulta

Os pedidos de consulta suportam a paginação através dos cabeçalhos de pedido x-ms-max-item-count e x-ms-continuation . O cabeçalho x-ms-max-item-count especifica o número máximo de valores que podem ser devolvidos pela execução da consulta. Isto pode ser entre 1 e 1000 e está configurado com uma predefinição de 100.

As consultas devolverão de zero até ao valor máximo especificado x-ms-max-item-count dos resultados da execução. O resultado da consulta inclui um cabeçalho x-ms-item-count que especifica o número real de documentos devolvidos pela consulta. Se existirem resultados adicionais que possam ser obtidos a partir da consulta, a resposta inclui um valor não vazio para o cabeçalho x-ms-continuation .

Os clientes podem obter páginas de resultados subsequentes ao ecoar o cabeçalho x-ms-continuation como outro pedido. Para ler todos os resultados, os clientes têm de repetir este processo até que seja devolvida uma x-ms-continuation vazia.

As execuções de consultas do Cosmos DB não têm estado no lado do servidor e podem ser retomadas em qualquer altura com o cabeçalho x-ms-continuation . O valor x-ms-continuation utiliza o último ID de recurso de documento processado (_rid) para controlar o progresso da execução. Por conseguinte, se os documentos forem eliminados e reinseridos entre a obtenção de páginas, os documentos poderão potencialmente ser excluídos de qualquer um dos lotes de consulta. No entanto, o comportamento e o formato do cabeçalho x-ms-continuation podem mudar numa futura atualização de serviço.

Consulte também