Consultar recursos do Azure Cosmos DB usando a API REST
O Azure Cosmos DB é um serviço de banco de dados multimodelo globalmente distribuído compatível com várias APIs. Este artigo descreve como usar REST para consultar recursos usando a API do SQL.
Como consultar um recurso usando REST?
Para executar uma consulta SQL em um recurso, faça o seguinte:
- Execute um
POST
método em um caminho de recurso usando JSON com aquery
propriedade definida como a cadeia de caracteres de consulta SQL e a propriedade "parameters" definida como a matriz de valores de parâmetro opcionais. - Defina o cabeçalho
x-ms-documentdb-isquery
comoTrue
. - Defina o cabeçalho
Content-Type
comoapplication/query+json
.
Para obter um exemplo que mostra como executar uma consulta SQL em um recurso usando o .NET, consulte REST do exemplo do .NET.
Exemplo
Veja a seguir um exemplo de operação de consulta REST em recursos de documento. Neste exemplo, queremos localizar 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 da solicitação
Método | URI da solicitação |
---|---|
POST | Obrigatório. O tipo de autenticação e o token de assinatura. Apenas o token da chave mestra é permitido para esta operação. Para obter mais informações, consulte Controle de Acesso em Recursos do Cosmos DB. |
Cabeçalhos de solicitação
A tabela a seguir contém os cabeçalhos comuns usados para executar operações de consulta.
Cabeçalho padrão | Descrição |
---|---|
Autorização | Obrigatório. O tipo de autenticação e o token de assinatura. Apenas o token da chave mestra é permitido para esta operação. Para obter mais informações, consulte Controle de Acesso em Recursos do Cosmos DB. |
Content-Type | Obrigatório. Deve ser definido como application/query+json. |
Aceitar | Opcional. No momento, o Cosmos DB sempre retorna o conteúdo da resposta no formato JSON padrão. O cliente deve ser capaz de aceitar o corpo da resposta no formato JSON padrão. |
User-Agent | Opcional. O agente do usuário que está executando a solicitação. O formato recomendado é {nome do agente usuário}/{versão}. Por exemplo, o SDK do .NET da API do SQL define a cadeia de User-Agent como Microsoft.Document.Client/1.0.0.0. |
Cabeçalho personalizado | Descrição |
---|---|
x-ms-date | Obrigatório. A data da solicitação, conforme especificado no RFC 1123. O formato de data é expresso em UTC (Tempo Universal Coordenado), por exemplo. Sexta-feira, 8 de abril de 2015, 03:52:31 GMT. |
x-ms-documentdb-isquery | Obrigatório. Esta propriedade deve ser definida como true. |
x-ms-max-item-count | Opcional. Para ver um conjunto de resultados, defina este cabeçalho como o número máximo de itens a serem retornados em uma única página. |
x-ms-continuation | Opcional. Para navegar para a próxima página de itens, defina esse cabeçalho como token de continuação para a próxima página. |
x-ms-version | Opcional. A versão do serviço REST do Cosmos DB. A versão mais recente é usada quando o cabeçalho não é fornecido. Para obter mais informações, consulte Referência da API REST do Azure Cosmos DB. |
x-ms-documentdb-query-enable-scan | Opcional. Use uma verificação de índice para processar a consulta se o caminho do índice de tipo certo não estiver disponível. |
x-ms-session-token | Opcional. O token de sessão para a solicitação. Usado para consistência de sessão. |
x-ms-partition-key | Opcional. Se especificada, a consulta será executada somente em documentos que correspondam ao valor da chave de partição no cabeçalho. |
x-ms-documentdb-query-enablecrosspartition | Opcional. Deve ser definido como true para todas as consultas que não filtram em uma única chave de partição. As consultas que filtram em relação a um único valor de chave de partição serão executadas em apenas uma única partição, mesmo que isso seja definido como true. |
x-ms-documentdb-populatequerymetrics |
Opcional. Deve ser definido como True para retornar métricas de consulta |
Corpo da solicitação
O corpo da solicitação deve ser um documento válido de JSON que contém a consulta SQL e parâmetros. Se a entrada for uma sintaxe SQL malformada ou inválida, a operação falha com um erro 400 Solicitação Incorreta.
Você também receberá uma solicitação 400 incorreta se uma consulta não puder ser atendida pelo gateway.
Propriedade | Descrição |
---|---|
Consulta | Obrigatório. A cadeia de consulta SQL para a consulta. Para obter mais informações, consulte Referência de sintaxe sql do Azure Cosmos DB. |
parameters | Obrigatório. Uma matriz JSON de parâmetros especificados como pares de valor de nome. A matriz de parâmetros pode conter de zero a muitos parâmetros. Cada parâmetro deve ter os seguintes valores:name: o nome do parâmetro. Os nomes de parâmetro devem ser literais de cadeia de caracteres válida e começar com "@".value: o valor do parâmetro. Pode ser qualquer valor JSON válido (cadeia de caracteres, número, objeto, matriz, Booliano ou null). |
Exemplo de solicitação
O exemplo a seguir faz uma solicitação SQL parametrizada com um parâmetro de cadeia de caracteres 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, consulte Consultas SQL para o Azure Cosmos DB.
Detalhes da resposta
A seguir estão os códigos de status comuns retornados por esta operação. Para obter informações sobre códigos de status de erro, consulte Códigos de status HTTP para o Azure Cosmos DB.
Código | Descrição |
---|---|
200 Ok | A operação teve êxito. |
400 Solicitação Inválida | A sintaxe da instrução SQL está incorreta. |
401 Não Autorizado | O cabeçalho Autorização ou x-ms-data não está definido. 401 também é retornado quando o cabeçalho Autorização é definido para um token de autorização inválido. |
403 Forbidden | O token de autorização expirou. |
404 Não Encontrado | A coleção não é mais um recurso. Por exemplo, o recurso pode ter sido excluído. |
Cabeçalhos de resposta
Esta operação retorna os seguintes cabeçalhos comuns. Pode existir cabeçalhos padrão e comuns adicionais retornados.
Cabeçalho padrão | Descrição |
---|---|
Content-Type | O Content-Type é aplicativo/json. O Cosmos DB sempre retorna o corpo da resposta no formato JSON padrão. |
Data | A data e hora da operação de resposta. Esse formato de data e hora está de acordo com o formato de hora de data [RFC1123] expresso em UTC. |
Cabeçalho personalizado | Descrição |
---|---|
x-ms-item-count | O número de item retornado pela operação. |
x-ms-continuation | É uma cadeia de caracteres opaca retornada quando a consulta tem potencialmente mais itens a serem recuperados. A x-ms-continuation pode ser incluída nas solicitações subsequentes, como um cabeçalho de solicitação para retomar a execução da consulta. |
x-ms-request-charge | É o número de RU (unidades de solicitação) consumidas pela operação. Para obter mais informações sobre unidades de solicitação, consulte Unidades de solicitação no Azure Cosmos DB. |
x-ms-activity-id | É um identificador exclusivo para a operação. Ele pode ser usado para rastrear a execução de solicitações do Cosmos DB. |
x-ms-session-token | O token de sessão a ser usado para solicitações subsequentes. Usado para consistência de sessão. |
Corpo da resposta
O corpo da resposta para a operação de consulta consiste em _rid do recurso pai do recurso do recurso que está sendo consultado e a matriz de recursos que contém as propriedades do recurso para projeção e seleção. Por exemplo, se uma consulta tiver sido executada no caminho documentos da coleção com um _rid XP0mAJ3H AA =, a resposta seria a seguinte:
{"_rid":" XP0mAJ3H-AA=","Documents": [ …. …. ],"_count":10}
Propriedade | Descrição |
---|---|
_Livrar | A ID do recurso para a coleção usada na consulta. |
_Contar | O número de itens retornados. |
Matriz de recursos | A matriz que contém os resultados da consulta. |
Criando o corpo da solicitação de consulta
A solicitação de consulta deve ser um documento válido de JSON que contém um propriedade query que contém uma cadeia de caracteres de consulta SQL válida e uma propriedade parameters que contém uma matriz de parâmetros opcionais. Cada parâmetro deve ter uma propriedades name e value de parâmetros que são especificados na consulta. Os nomes de parâmetro devem começar com o caractere "@". Os valores podem ser quaisquer valores JSON válidos: cadeias de caracteres, números inteiros, Boolianos e valores nulos.
É válido especificar apenas um subconjunto de parâmetros especificados no texto da consulta . As expressões que referenciam esses parâmetros não especificados serão avaliada como indefinidas. Também é válido para especificar parâmetros adicionais que não são usados dentro do texto query.
Alguns exemplos de solicitações de consulta válida são mostrados abaixo. Por exemplo, a consulta a seguir tem um único parâmetro @id.
{
"query": "select * from docs d where d.id = @id",
"parameters": [
{"@id": "newdoc"}
]
}
O exemplo a seguir tem dois parâmetros, um com um valor de cadeia de caracteres 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 a seguir usa os parâmetros na cláusula SELECT, bem como uma propriedade acessada pelo nome de 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 atendidas pelo gateway
Qualquer consulta que exija estado entre continuações não pode ser atendida pelo gateway. Isso inclui:
- INÍCIO
- ORDER BY
- OFFSET LIMIT
- Agregações
- DISTINTO
- GROUP BY
As consultas que podem ser atendidas pelo gateway incluem:
- Projeções simples
- Filtros
Quando uma resposta é retornada para uma consulta que não pode ser atendida pelo gateway, ela conterá o código status 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 de resultados da consulta
As solicitações de consulta dão suporte à paginação por meio dos cabeçalhos x-ms-max-item-count e x-ms-continuation request. O cabeçalho x-ms-max-item-count especifica o número máximo de valores que podem ser retornados pela execução de consulta. Esse número pode ser entre 1 e 1000 e está configurado com um padrão de 100.
As consultas retornam de zero até o máximo especificado dos valores 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 retornados pela consulta. Se há resultados adicionais que podem ser recuperados da consulta, a resposta inclui um valor não vazio para o cabeçalho x-ms-continuation.
Os clientes podem buscar páginas subsequentes de resultados exibindo o cabeçalho x-ms-continuation como outra solicitação. Para ler todos os resultados, os clientes devem repetir este processo até que um x-ms-continuation seja retornado.
As execuções de consulta do Cosmos DB são sem estado no lado do servidor e podem ser retomadas a qualquer momento usando o cabeçalho x-ms-continuation . O valor x-ms-continuation usa a última ID de recurso de documentos processados (_rid) para acompanhar o andamento da execução. Portanto, se os documentos forem excluídos e reinseridos entre a busca de páginas, os documentos poderão ser excluídos de qualquer um dos lotes de consulta. No entanto, o comportamento e o formato do cabeçalho x-ms-continuation pode ser alterado em uma atualização futura do serviço.