Partager via


Personnaliser les réponses Microsoft Graph avec des paramètres de requête

Les paramètres de requête vous aident à optimiser les réponses microsoft API Graph en contrôlant exactement les données retournées. Au lieu de récupérer toutes les propriétés et données disponibles, vous pouvez utiliser les paramètres de requête pour :

  • Filtrer les résultats pour obtenir uniquement les enregistrements dont vous avez besoin
  • Sélectionner des propriétés spécifiques pour réduire la taille de la réponse et améliorer les performances
  • Trier et paginer les données pour de meilleures expériences utilisateur
  • Développer les ressources associées pour obtenir des données connectées dans une seule requête

Cet article explique comment utiliser efficacement les options de requête système OData et d’autres paramètres de requête Microsoft Graph. Vous apprenez la syntaxe, consultez des exemples pratiques et découvrez les meilleures pratiques pour créer des requêtes efficaces qui améliorent les performances de votre application.

La prise en charge de paramètres de requête spécifiques varie selon les opérations d’API et peut varier entre les points de terminaison v1.0 et bêta .

Conseil

Sur le point de terminaison bêta , le $ préfixe est facultatif. Par exemple, vous pouvez utiliser l’URI filter au lieu de $filter. Sur le point de terminaison v1.0 , le $ préfixe est facultatif uniquement pour un sous-ensemble d’API. Par souci de simplicité, incluez $ toujours dans toutes les versions.

Options de requête de système OData

Une opération API Microsoft Graph peut prendre en charge une ou plusieurs des options de requête de système OData suivantes. Ces options de requête sont compatibles avec le langage de requête OData V4 et sont prises en charge uniquement dans les opérations GET .

Sélectionnez les exemples pour les essayer dans Graph Explorer.

Nom Description Exemple
$count Retourne le nombre total de ressources correspondantes. /me/messages?$top=2&$count=true
$expand Retourne les ressources associées. /groups?$expand=members
$filter Filtre les résultats (lignes). /users?$filter=startswith(givenName,'J')
$format Retourne les résultats au format de média spécifié. /users?$format=json
$orderby Classe les résultats. /users?$orderby=displayName desc
$search Renvoie les résultats en fonction des critères de recherche. /me/messages?$search=pizza
$select Filtre les propriétés (colonnes). /users?$select=givenName,surname
$skip Ignore les éléments d’un jeu de résultats. Également utilisé par certaines API pour implémenter la pagination et peut être utilisé avec $top pour pager manuellement les résultats. /me/messages?$skip=11
$top Définit la taille de la page de résultats. /users?$top=2

Pour trouver les options de requête système OData prises en charge par une API et ses propriétés, consultez la table « Propriétés » dans la page de ressources et la section « Paramètres de requête facultatifs » des opérations LIST et GET pour l’API.

Autres paramètres de requête

Nom Description Exemple
$skipToken Retourne la page suivante des résultats des jeux de résultats qui s’étendent sur plusieurs pages. (Certaines API utilisent $skip à la place.) /users?$skiptoken=X%274453707402000100000017...

Autres fonctionnalités des URL OData

Les fonctionnalités OData 4.0 ci-après sont des segments d’URL, et non des paramètres de requête.

Nom Description Exemple
$count Retourne le total entier de la collection. GET /users/$count
GET /groups/{id}/members/$count

Obtenir un nombre d’utilisateurs
$ref Met à jour l’appartenance d'entités à une collection. POST /groups/{id}/members/$ref

Ajouter un membre à un groupe
$value Retourne ou met à jour la valeur binaire d’un élément. GET /me/photo/$value

Obtenir la photo d’un utilisateur, d’un groupe ou d’une équipe
$batch Combine plusieurs requêtes HTTP dans une requête de traitement par lots. POST /$batch

Traitement par lots JSON

Codage des paramètres de requête

Pourcentage de valeurs de paramètre de requête encodées conformément à la norme RFC 3986. Tous les caractères réservés dans les chaînes de requête doivent être codés en pourcentage. De nombreux clients, navigateurs et outils HTTP (tels que l’Explorer Graph) gèrent automatiquement cet encodage. Si une requête échoue, une cause possible est l’échec de l’encodage approprié des valeurs des paramètres de requête. Parfois, vous devez double-encoder des valeurs.

Remarque

Il existe un problème connu avec l’encodage des symboles esperluette (&) dans $search les expressions sur le point de terminaison v1.0 . Pour plus d’informations sur le problème et la solution de contournement recommandée, consultez Problème connu : $search pour les objets d’annuaire échoue pour l’esperluette encodée (&).

Par exemple, une URL non codée ressemble à ceci :

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

L’URL correctement codée en pourcentage ressemble à ceci :

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

L’URL doublement codée ressemble à ceci :

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

Échappement de guillemets simples

Pour les requêtes qui utilisent des guillemets simples, si des valeurs de paramètre contiennent également des guillemets simples, elles doivent être placées dans une séquence d’échappement double ; sinon, la requête échoue en raison d’une syntaxe non valide. Dans l’exemple, la valeur de chaîne let''s meet for lunch? comporte un guillemet simple en échappement.

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

Count

Utilisez le $count paramètre de requête pour obtenir le nombre total d’éléments dans une collection ou correspondant à une expression. Vous pouvez utiliser $count les méthodes suivantes :

  1. En tant que paramètre de chaîne de requête avec la syntaxe $count=true pour inclure le nombre total d’éléments dans une collection à côté de la page de valeurs de données retournées par Microsoft Graph. Par exemple : users?$count=true.
  2. En tant que segment d’URL pour obtenir uniquement le total entier de la collection. Par exemple : users/$count.
  3. Dans une $filter expression avec des opérateurs d’égalité pour obtenir une collection de données où la propriété filtrée est une collection vide. Consultez Utiliser le paramètre de requête $filter pour filtrer une collection d’objets.

Remarque

  1. Sur les ressources qui dérivent de directoryObject, $count est uniquement pris en charge dans une requête avancée. Consultez Fonctionnalités de requête avancées sur les objets d’annuaire.
  2. L’utilisation de $count n’est pas prise en charge dans les locataires Azure AD B2C.

Par exemple, la requête suivante retourne à la fois la collection de contacts de l’utilisateur actuel et le nombre d’éléments dans la collection de contacts dans une propriété @odata.count .

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

Pour les objets d’annuaire, c’est-à-dire les ressources qui dérivent de directoryObject, le $count paramètre de requête est pris en charge uniquement dans les requêtes avancées.

Expand

De nombreuses ressources Microsoft Graph exposent des propriétés déclarées, ainsi que leurs relations avec les autres ressources. Ces relations sont également appelées propriétés de référence ou propriétés de navigation. Elles peuvent faire référence à une ressource unique ou à une collection de ressources. Par exemple, les dossiers de courrier, le gestionnaire et les collaborateur directs d’un utilisateur sont tous présentés comme relations.

Vous pouvez utiliser le paramètre de chaîne de requête $expand pour inclure la collection ou la ressource développée qui est référencée par une seule relation (propriété de navigation) dans vos résultats. Pour certaines API, une seule relation peut être développée dans une seule requête.

L’exemple suivant indique comment obtenir les informations sur le lecteur racine, ainsi que les éléments enfants de niveau supérieur dans un lecteur :

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

Avec certaines collections de ressources, vous pouvez également spécifier les propriétés à retourner dans les ressources développées en ajoutant un $select paramètre. L’exemple suivant exécute la même requête que l’exemple précédent, mais utilise une $select instruction pour limiter les propriétés retournées pour les éléments enfants développés aux propriétés id et name .

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

Remarque

  • Les relations et les ressources ne prennent pas toutes en charge le paramètre de requête $expand. Par exemple, vous pouvez développer les relations directReports, manager et memberOf sur un utilisateur, mais vous ne pouvez pas développer ses événements, messages ou relations photo . Les ressources ou les relations ne prennent pas toutes en charge l’utilisation de l’option $select sur les éléments développés.

  • Avec Microsoft Entra ressources qui dérivent de directoryObject, comme user et group, $expand retourne généralement un maximum de 20 éléments pour la relation développée et n’a pas de @odata.nextLink. Pour plus d’informations, consultez Limitations des paramètres de requête.

  • $expand n’est actuellement pas pris en charge avec les requêtes avancées.

Filter

Utilisez le $filter paramètre de requête pour obtenir uniquement un sous-ensemble d’une collection. Pour obtenir des conseils sur l’utilisation $filterde , consultez Utiliser le paramètre de requête $filter pour filtrer une collection d’objets.

Format

Pour spécifier le format de média des éléments renvoyés à partir de Microsoft Graph, utilisez le paramètre de requête $format.

Par exemple, la requête suivante retourne les utilisateurs dans le organization au format JSON :

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

Remarque

Le $format paramètre de requête prend en charge de nombreux formats (par exemple, atom, xmlet json), mais les résultats peuvent ne pas être retournés dans tous les formats.

OrderBy

Pour spécifier l’ordre de tri des éléments renvoyés à partir de Microsoft Graph, utilisez le paramètre de requête $orderby. L’ordre par défaut est croissant.

Par exemple, la requête suivante retourne les utilisateurs dans le organization classés par leur nom d’affichage dans l’ordre croissant :

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

Certaines API prennent en charge le tri par entités de type complexe. La requête suivante obtient les messages et les trie en fonction du champ d’adresse de la propriété from , qui est du type complexe emailAddress :

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

Pour trier les résultats dans l’ordre croissant ou décroissant, ajoutez asc ou desc au nom du champ, séparé par un espace ; par exemple, ?$orderby=name desc (non codé), ?$orderby=name%20desc (encodé url). Si vous ne spécifiez pas l’ordre de tri, l’ordre croissant est déduit.

Avec certaines API, vous pouvez trier les résultats dans plusieurs propriétés. Par exemple, la requête suivante trie les messages dans la boîte de réception de l’utilisateur, d’abord en fonction du nom de l’expéditeur dans l’ordre décroissant (de Z à A), puis par objet dans l’ordre croissant (par défaut).

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

Remarque

Lorsque vous spécifiez $filter, le service déduit un ordre de tri pour les résultats. Si vous utilisez $orderby et $filter pour obtenir des messages, étant donné que le serveur déduit toujours un ordre de tri pour les résultats d’un système $filter, vous devez spécifier des propriétés de certaines manières.

L’exemple suivant montre une requête filtrée sur les propriétés subject et importance, puis triées sur les propriétés subject, importance et receivedDateTime dans l’ordre décroissant.

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

Remarque

L’association des paramètres de requête $orderby et $filter est prise en charge pour les objets annuaire. Consultez Fonctionnalités de requête avancées sur les objets d’annuaire.

Utilisez le $search paramètre de requête pour limiter les résultats de la requête à un critère de recherche. Sa syntaxe et son comportement varient selon les ressources. Pour plus d’informations, consultez Utiliser le paramètre de requête $search pour correspondre à un critère de recherche.

Sélectionner

Utilisez le $select paramètre de requête pour retourner un sous-ensemble de propriétés pour une ressource. Avec $select, vous pouvez spécifier un sous-ensemble ou un sur-ensemble des propriétés par défaut.

Lorsque vous effectuez une requête GET sans utiliser $select pour limiter les données de propriété, Microsoft Graph inclut une propriété @microsoft.graph.tips qui fournit une recommandation de bonne pratique pour l’utilisation $select similaire au message suivant :

"@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",

Par exemple, lors de l’obtention des messages de l’utilisateur connecté, vous pouvez spécifier que seules les propriétés from et subject doivent être retournées :

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

Importante

Nous vous recommandons d’utiliser $select pour limiter les propriétés retournées par une requête à celles nécessaires à votre application. Cela est particulièrement vrai pour les requêtes qui peuvent potentiellement retourner un jeu de résultats volumineux. La limitation des propriétés retournées dans chaque ligne réduit la charge réseau et améliore les performances de votre application.

Dans la version 1.0, certaines ressources Microsoft Entra qui dérivent de directoryObject, telles que l’utilisateur et le groupe, retournent un sous-ensemble limité de propriétés par défaut lors des lectures. Pour ces ressources, vous devez utiliser $select pour retourner des propriétés en dehors de l’ensemble par défaut.

Ignorer

Utilisez le $skip paramètre de requête pour définir le nombre d’éléments à ignorer au début d’une collection. Par exemple, la requête suivante retourne des événements pour l’utilisateur triés par date de création, en commençant par le 21e événement dans la collection :

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

Certaines API Microsoft Graph, comme le courrier et calendrier Outlook (message, événement, et calendrier), utilisent $skip pour mettre en œuvre la pagination. Lorsque les résultats de la requête s’étendent sur plusieurs pages, ces API retournent une propriété @odata.nextLink avec une URL qui contient un $skip paramètre. Vous pouvez utiliser cette URL pour renvoyer la page de résultats suivante. Pour plus d’informations, consultez la rubrique relative à la pagination.

Les objets d’annuaire tels que l’utilisateur, le groupe et l’application ne prennent pas en charge $skip.

SkipToken

Certaines demandes retournent plusieurs pages de données, soit en raison d’une pagination côté serveur, soit en raison de l’utilisation du $top paramètre pour limiter la taille de page de la réponse. De nombreuses API Microsoft Graph utilisent le paramètre de requête skipToken pour faire référence aux pages suivantes du résultat.
Ce paramètre contient un jeton opaque qui fait référence à la page de résultats suivante et est retourné dans l’URL fournie dans la propriété @odata.nextLink dans la réponse. Pour plus d’informations, consultez la rubrique relative à la pagination.

Remarque

Remarque : si vous utilisez le compte OData (ajout de $count=true dans la chaîne de requête) pour les requêtes dans les objets annuaire, la propriété @odata.count est présente uniquement dans la première page.

L’en-tête ConsistencyLevel requis pour les requêtes avancées sur les objets d’annuaire n’est pas inclus par défaut dans les demandes de page suivantes. Il doit être défini de manière explicite dans les pages suivantes.

Haut

Utilisez le $top paramètre de requête pour spécifier le nombre d’éléments à inclure dans le résultat.

S’il reste plus d’éléments dans le jeu de résultats, le corps de la réponse contient un paramètre @odata.nextLink . Ce paramètre contient une URL que vous pouvez utiliser pour obtenir la page de résultats suivante. Pour plus d’informations, consultez la rubrique relative à la pagination.

La valeur minimale de $top est 1, et la valeur maximale dépend de l’API correspondante.

Par exemple, la requête liste messages suivante renvoie les cinq premiers messages dans la boîte aux lettres de l’utilisateur :

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

Remarque

L’en-tête ConsistencyLevel requis pour les requêtes avancées sur les objets d’annuaire n’est pas inclus par défaut dans les demandes de page suivantes. Il doit être défini de manière explicite dans les pages suivantes.

Gestion des erreurs pour les paramètres de requête

Certaines requêtes retournent un message d’erreur si un paramètre de requête spécifié n’est pas pris en charge. Par exemple, vous ne pouvez pas utiliser $expand sur la user/photo relation.

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"
        }
    }
}

Toutefois, parfois, les paramètres de requête spécifiés dans une requête échouent en mode silencieux. Par exemple, pour les paramètres de requête non pris en charge et pour les combinaisons de paramètres de requête non prises en charge. Dans ce cas, examinez les données retournées par la requête pour déterminer si les paramètres de requête que vous avez spécifiés ont eu l’effet souhaité.