Personalizar respostas do Microsoft Graph com parâmetros de consulta

Os parâmetros de consulta ajudam a otimizar as respostas da API do Graph controlando exatamente quais dados são retornados. Em vez de recuperar todas as propriedades e dados disponíveis, você pode usar parâmetros de consulta para:

  • Filtre os resultados para obter apenas os registros necessários
  • Selecione propriedades específicas para reduzir o tamanho da resposta e melhorar o desempenho
  • Classificar e paginar dados para obter melhores experiências do usuário
  • Expanda recursos relacionados para obter dados conectados em uma única solicitação

Este artigo explica como usar as opções de consulta do sistema OData e outros parâmetros de consulta do Microsoft Graph de forma eficaz. Você aprende a sintaxe, vê exemplos práticos e descobre as práticas recomendadas para criar consultas eficientes que aprimoram o desempenho do seu aplicativo.

O suporte para parâmetros de consulta específicos varia entre as operações de API e pode diferir entre os pontos de extremidade v1.0 e beta .

Dica

No ponto de extremidade beta , o prefixo $ é opcional. Por exemplo, você pode usar filter em vez de $filter. No ponto de extremidade v1.0 , o prefixo $ é opcional apenas para um subconjunto de APIs. Para simplificar, sempre inclua $ em todas as versões.

Opções de consulta de sistema OData

Uma operação de API do Microsoft Graph pode oferecer suporte a uma ou mais das seguintes opções de consulta de sistema OData. Essas opções de consulta são compatíveis com a linguagem de consulta OData V4 e têm suporte apenas em operações GET .

Selecione os exemplos para experimentá-los no Graph Explorer.

Nome Descrição Exemplo
$count Retorna a contagem total de recursos correspondentes. /me/messages?$top=2&$count=true
$expand Retorna recursos relacionados. /groups?$expand=members
$filter Filtra os resultados (linhas). /users?$filter=startswith(givenName,'J')
$format Retorna resultados no formato de mídia especificado. /users?$format=json
$orderby Ordena os resultados. /users?$orderby=displayName desc
$search Retorna os resultados com base nos critérios de pesquisa. /me/messages?$search=pizza
$select Filtra as propriedades (colunas). /users?$select=givenName,surname
$skip Ignora itens em um conjunto de resultados. Também usado por algumas APIs para implementar a paginação e pode ser usado para $top paginar resultados manualmente. /me/messages?$skip=11
$top Define o tamanho de página de resultados. /users?$top=2

Para localizar as opções de consulta do sistema OData compatíveis com uma API e suas propriedades, consulte a tabela "Propriedades" na página de recursos e a seção "Parâmetros opcionais de consulta" das operações LIST e GET da API.

Outros parâmetros de consulta

Nome Descrição Exemplo
$skipToken Retorna a próxima página de resultados de conjuntos de resultados que abrangem várias páginas. (Algumas APIs usam $skip em vez disso.) /users?$skiptoken=X%274453707402000100000017...

Outros recursos de URL OData

Os seguintes recursos OData 4.0 são segmentos de URL, não parâmetros de consulta.

Nome Descrição Exemplo
$count Retorna o total inteiro da coleção. GET /users/$count
GET /groups/{id}/members/$count

Obter uma contagem de usuários
$ref Atualiza a associação de entidades a uma coleção. POST /groups/{id}/members/$ref

Adicionar um membro a um grupo
$value Retorna ou atualiza o valor binário de um item. GET /me/photo/$value

Obter a foto de um usuário, grupo ou equipe
$batch Combina várias solicitações HTTP em uma solicitação em lote. POST /$batch

Envio em lote JSON

Codificação de parâmetros da consulta

Codifique porcentagens de valores de parâmetro de consulta de acordo com a RFC 3986. Todos os caracteres reservados nas cadeias de caracteres de consulta devem ser codificados por porcentagem. Muitos clientes HTTP, navegadores e ferramentas (como o Graph Explorer) lidam com essa codificação automaticamente. Se uma consulta falhar, uma possível causa será a falha ao codificar os valores dos parâmetros de consulta adequadamente. Às vezes, você precisa codificar valores duas vezes.

Observação

Há um problema conhecido com a codificação de símbolos e comerciais (&) em $search expressões no ponto de extremidade v1.0 . Para obter mais informações sobre o problema e a solução alternativa recomendada, consulte Problema conhecido: $search para objetos de diretório falha para o caractere E comercial (&) codificado.

Por exemplo, uma URL não codificada tem esta aparência:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith(givenName, 'J')

A URL codificada corretamente por porcentagem tem esta aparência:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith(givenName%2C+'J')

A URL de codificação dupla tem esta aparência:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith%28givenName%2C%20%27J%27%29

Escape de aspas simples

Para solicitações que usam aspas simples, se algum valor de parâmetro também contiver aspas simples, elas deverão ter escape duplo; Caso contrário, a solicitação falhará devido a sintaxe inválida. No exemplo, o valor de cadeia de caracteres let''s meet for lunch? tem o escape de aspas simples.

GET https://graph.microsoft.com/v1.0/me/messages?$filter=subject eq 'let''s meet for lunch?'

Contar

Use o $count parâmetro de consulta para obter a contagem do número total de itens em uma coleção ou correspondentes a uma expressão. Você pode usar $count das seguintes maneiras:

  1. Como um parâmetro de cadeia de caracteres de consulta com a sintaxe $count=true para incluir uma contagem do número total de itens em uma coleção ao lado da página de valores de dados retornados do Microsoft Graph. Por exemplo, users?$count=true.
  2. Como um segmento de URL para obter apenas o total inteiro da coleção. Por exemplo, users/$count.
  3. Em uma $filter expressão com operadores de igualdade para obter uma coleção de dados em que a propriedade filtrada é uma coleção vazia. Consulte Usar o parâmetro de consulta $filter para filtrar uma coleção de objetos.

Observação

  1. Em recursos que derivam do directoryObject, $count só é suportado em uma consulta avançada. Veja Recursos avançados de consulta em objetos de diretório.
  2. Não há suporte para o uso de $count em locatários do Azure AD B2C.

Por exemplo, a solicitação a seguir retorna o conjunto de contatos do usuário atual e o número de itens no conjunto de contatos em uma propriedade @odata.count .

GET  https://graph.microsoft.com/v1.0/me/contacts?$count=true

Para objetos de diretório, ou seja, recursos derivados de directoryObject, o $count parâmetro de consulta só tem suporte em consultas avançadas.

Expandir

Muitos recursos do Microsoft Graph expõem as propriedades declaradas do recurso e as relações delas com outros recursos. Essas relações também são chamadas de propriedades de referência ou propriedades de navegação e podem fazer referência a um único recurso ou a uma coleção de recursos. Por exemplo, as pastas de email, gerente e subordinados diretos de um usuário são todas expostas como relações.

Você pode usar o parâmetro de cadeia de caracteres de consulta $expand para incluir o recurso expandido ou a coleção referenciada por uma única relação (propriedade de navegação) em seus resultados. Para algumas APIs, apenas uma relação pode ser expandida em uma única solicitação.

O exemplo a seguir obtém informações da unidade raiz juntamente com os itens filho de nível superior em uma unidade:

GET https://graph.microsoft.com/v1.0/me/drive/root?$expand=children

Com algumas coleções de recursos, você também pode especificar as propriedades a serem retornadas nos recursos expandidos adicionando um $select parâmetro. O exemplo a seguir executa a mesma consulta que o exemplo anterior, mas usa uma $select instrução para limitar as propriedades retornadas para os itens filho expandidos às propriedades id e name .

GET https://graph.microsoft.com/v1.0/me/drive/root?$expand=children($select=id,name)

Observação

  • Nem todas as relações e recursos dão suporte ao parâmetro de consulta $expand. Por exemplo, você pode expandir os relacionamentos directReports, manager e memberOf em um usuário, mas não pode expandir seus eventos, mensagens ou relacionamentos de fotos . Nem todos os recursos ou relações dão suporte ao uso de $select em itens expandidos.

  • Com Microsoft Entra recursos derivados de directoryObject, como usuário e grupo, $expand normalmente retorna um máximo de 20 itens para a relação expandida e não tem @odata.nextLink. Para obter detalhes, consulte limitações de parâmetros de consulta.

  • $expand No momento, não há suporte para consultas avançadas.

Filter

Use o $filter parâmetro query para obter apenas um subconjunto de uma coleção. Para obter instruções sobre como usar $filter, consulte Usar o parâmetro de consulta $filter para filtrar uma coleção de objetos.

Formatar

Use o parâmetro de consulta $format para especificar o formato de mídia dos itens retornados do Microsoft Graph.

Por exemplo, a solicitação a seguir retorna os usuários na organização no formato JSON:

GET https://graph.microsoft.com/v1.0/users?$format=json

Observação

O $format parâmetro de consulta dá suporte a vários formatos (por exemplo, atom, xmle json), mas os resultados podem não ser retornados em todos os formatos.

OrderBy

Use o parâmetro de consulta $orderby para especificar a ordem de classificação dos itens retornados pelo Microsoft Graph. A ordem padrão é crescente.

Por exemplo, a solicitação a seguir retorna usuários na organização classificados por seu nome de exibição em ordem crescente:

GET https://graph.microsoft.com/v1.0/users?$orderby=displayName

Algumas APIs dão suporte à classificação por entidades de tipo complexo. A solicitação a seguir recebe mensagens e as classifica pelo campo de endereço da propriedade from , que é do tipo complexo emailAddress:

GET https://graph.microsoft.com/v1.0/me/messages?$orderby=from/emailAddress/address

Para classificar os resultados em ordem crescente ou decrescente, acrescente um ou ascdesc ao nome do campo, separado por um espaço; por exemplo, ?$orderby=name desc (não codificado), ?$orderby=name%20desc (codificado por URL). Se você não especificar a ordem de classificação, a ordem crescente será inferida.

Com algumas APIs, você pode ordenar os resultados em várias propriedades. Por exemplo, a solicitação a seguir ordena as mensagens na caixa de entrada do usuário primeiro pelo nome da pessoa que enviou, em ordem decrescente (Z – A) e, em seguida, por assunto, em ordem ascendente (padrão).

GET https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$orderby=from/emailAddress/name desc,subject

Observação

Quando você especifica $filter, o serviço infere uma ordem de classificação para os resultados. Se você usar $orderby e $filter juntos para receber mensagens, como o servidor sempre infere uma ordem de classificação para os resultados de $filter, você deve especificar propriedades de determinadas maneiras.

O exemplo a seguir mostra uma consulta filtrada pelas propriedades subject e priority e classificadas pelas propriedades subject, priority e receivedDateTime em ordem decrescente.

GET https://graph.microsoft.com/v1.0/me/messages?$filter=Subject eq 'welcome' and importance eq 'normal'&$orderby=subject,importance,receivedDateTime desc

Observação

A combinação dos parâmetros de consulta $orderby e $filter não tem suporte para objetos de diretório. Veja Recursos avançados de consulta em objetos de diretório.

Use o parâmetro de consulta para restringir os resultados da $search solicitação para que correspondam a um critério de pesquisa. Sua sintaxe e comportamento variam entre diferentes recursos. Para obter mais informações, consulte Usar o parâmetro de consulta $search para corresponder a um critério de pesquisa.

Selecionar

Use o $select parâmetro query para retornar um subconjunto de propriedades para um recurso. Com $select, você pode especificar um subconjunto ou um superconjunto das propriedades padrão.

Quando você faz uma solicitação GET sem usar $select para limitar os dados da propriedade, o Microsoft Graph inclui uma propriedade @microsoft.graph.tips que fornece uma recomendação de práticas recomendadas para uso $select semelhante à seguinte mensagem:

"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET groups?$select=appMetadata,assignedLabels",

Por exemplo, ao receber as mensagens do usuário conectado, você pode especificar que apenas as propriedades from e subject sejam retornadas:

GET https://graph.microsoft.com/v1.0/me/messages?$select=from,subject

Importante

Recomendamos que você use $select para limitar as propriedades retornadas por uma consulta àquelas necessárias para seu aplicativo. Isso é especialmente verdadeiro para consultas que podem retornar um grande conjunto de resultados. Limitar as propriedades retornadas em cada linha reduz a carga da rede e melhora o desempenho do aplicativo.

Na v1.0, alguns recursos do Microsoft Entra que derivam de directoryObject, como usuário e grupo, retornam um subconjunto limitado e padrão de propriedades em leituras. Para esses recursos, você deve usar $select para retornar propriedades fora do conjunto padrão.

Ignorar

Use o $skip parâmetro de consulta para definir o número de itens a serem ignorados no início de uma coleção. Por exemplo, a solicitação a seguir retorna eventos para o usuário classificados por data de criação, começando com o 21º evento na coleção:

GET  https://graph.microsoft.com/v1.0/me/events?$orderby=createdDateTime&$skip=20

Algumas APIs do Microsoft Graph, como Email e Calendário do Outlook (mensagem, evento e calendário), usam $skip para implementar a paginação. Quando os resultados da consulta abrangem várias páginas, essas APIs retornam uma propriedade @odata.nextLink com uma URL que contém um $skip parâmetro. Você pode usar essa URL para retornar a próxima página de resultados. Para saber mais, confira Paginação.

Objetos de diretório , como usuário, grupo e aplicativo , não suportam $skip.

SkipToken

Algumas solicitações retornam várias páginas de dados, seja devido à paginação do lado do servidor ou devido ao uso do $top parâmetro para limitar o tamanho da página da resposta. Muitas APIs do Microsoft Graph usam o parâmetro de consulta skipToken para fazer referência a páginas subsequentes do resultado.
Esse parâmetro contém um token opaco que faz referência à próxima página de resultados e é retornado na URL fornecida na propriedade @odata.nextLink na resposta. Para saber mais, confira Paginação.

Observação

Se você estiver usando a OData Count (adicionando $count=true na cadeia de caracteres de consulta) para consultas em objetos de diretório, a propriedade @odata.count estará presente apenas na primeira página.

O cabeçalho ConsistencyLevel necessário para consultas avançadas em objetos de diretório não é incluído por padrão nas solicitações de página subsequentes. Ele deve ser definido explicitamente nas páginas subsequentes.

Início

Use o $top parâmetro de consulta para especificar o número de itens a serem incluídos no resultado.

Se mais itens permanecerem no conjunto de resultados, o corpo da resposta conterá um parâmetro @odata.nextLink . Esse parâmetro contém uma URL que você pode usar para obter a próxima página de resultados. Para saber mais, confira Paginação.

O valor mínimo de $top é 1 e o máximo depende da API correspondente.

Por exemplo, a seguinte solicitação de lista de mensagens retorna as cinco primeiras mensagens na caixa de correio do usuário:

GET https://graph.microsoft.com/v1.0/me/messages?$top=5

Observação

O cabeçalho ConsistencyLevel necessário para consultas avançadas em objetos de diretório não é incluído por padrão nas solicitações de página subsequentes. Ele deve ser definido explicitamente nas páginas subsequentes.

Tratamento de erro para parâmetros de consulta

Algumas solicitações retornarão uma mensagem de erro se um parâmetro de consulta especificado não tiver suporte. Por exemplo, você não pode usar $expand na user/photo relação.

https://graph.microsoft.com/v1.0/me?$expand=photo
{
    "error":{
        "code":"ExpandNotSupported",
        "message":"Expand is not allowed for property 'Photo' according to the entity schema.",
        "innerError":{
            "request-id":"1653fefd-bc31-484b-bb10-8dc33cb853ec",
            "date":"2017-07-31T20:55:01"
        }
    }
}

No entanto, às vezes, os parâmetros de consulta especificados em uma solicitação falham silenciosamente. Por exemplo, para parâmetros de consulta sem suporte e para combinações de parâmetros de consulta sem suporte. Nesses casos, examine os dados retornados pela solicitação para determinar se os parâmetros de consulta especificados surtiram o efeito desejado.