Obtenir des modifications incrémentielles d’utilisateurs

La requête delta dans Microsoft Graph vous permet d’interroger les ajouts, les suppressions ou les mises à jour des ressources prises en charge, par le biais d’une série de demandes delta . Pour les utilisateurs, la requête delta vous permet de découvrir les modifications sans extraire l’ensemble des utilisateurs pour comparer les modifications.

Les clients qui synchronisent des utilisateurs avec un magasin de profils local peuvent utiliser la requête delta pour leur synchronisation complète initiale, ainsi que pour les synchronisations incrémentielles suivantes. En règle générale, un client effectue une synchronisation complète initiale de tous les utilisateurs d’un locataire, puis reçoit régulièrement des modifications incrémentielles pour les utilisateurs.

Suivre les modifications apportées aux utilisateurs

Suivez les modifications de l’utilisateur via une ou plusieurs requêtes GET avec la fonction delta. La requête GET présente les caractéristiques suivantes :

  • Fonction delta ajoutée au chemin d’URL.
  • Jeton d’état (deltatoken ou skipToken) de l’appel de fonction delta GET précédent.
  • [Facultatif] Tous les paramètres de requête pris en charge

Exemple

Cet article présente une série d’exemples de demandes pour suivre les modifications apportées aux utilisateurs :

  1. Une Première requête et réponse
  2. Une Requête nextLink et réponse
  3. Une dernière requête nextLink et réponse
  4. Une demande deltaLink et réponse deltaLink

Première requête

Pour suivre les modifications apportées à la ressource utilisateur, effectuez une requête et incluez la fonction delta en tant que segment d’URL.

Conseil

/delta est un raccourci pour le nom /microsoft.graph.deltacomplet . Les demandes générées par les sdk Microsoft Graph utilisent le nom complet.

Prenez note des éléments suivants :

  • Le paramètre de requête $select facultatif est inclus dans la requête pour montrer comment les paramètres de requête sont inclus automatiquement dans les futures requêtes. Si nécessaire, les paramètres de requête doivent être spécifiés dans la requête initiale.
    • Seules les propriétés incluses dans $select font l’objet d’un suivi des modifications. Si $select n’est pas spécifié, toutes les propriétés de l’objet font l’objet d’un suivi des modifications.
  • La demande initiale n’inclut pas de jeton d’état. Les jetons d’état sont utilisés dans les requêtes suivantes.
GET https://graph.microsoft.com/v1.0/users/delta?$select=displayName,givenName,surname

Première réponse

Si elle réussit, cette méthode renvoie un code de réponse 200 OK et un objet de collection user dans le corps de la réponse. En supposant que l’ensemble des utilisateurs est trop grand, la réponse inclut un jeton d’état @odata.nextLink dans un @odata.nextLink paramètre.

Dans cet exemple, une URL @odata.nextLink est retournée, indiquant qu’il y a plus de pages de données à récupérer dans la session. Notez le $skiptoken dans l’URL. Le paramètre de requête $select de la requête initiale est encodé dans l’URL @odata.nextLink.

La réponse contient également une @removed annotation pour un utilisateur avec l’ID 86462606-fde0-4fc4-9e0c-a20eb73e54c6. L’annotation @removed est ajoutée dans les scénarios suivants :

  • Lorsque l’utilisateur est supprimé, l’élément contient une annotation : @removed avec la valeur de "reason": "changed".
  • Lorsque l’utilisateur est supprimé définitivement, l’élément contient une annotation : @removed avec la valeur ."reason": "deleted"
  • Lorsque l’utilisateur est créé ou restauré à partir du conteneur d’éléments supprimés, il n’y a aucune annotation.
HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users(displayName,givenName,surname)",
  "@odata.nextLink":"https://graph.microsoft.com/v1.0/users/delta?$skiptoken=oEBwdSP6uehIAxQOWq_3Ksh_TLol6KIm3stvdc6hGhZRi1hQ7Spe__dpvm3U4zReE4CYXC2zOtaKdi7KHlUtC2CbRiBIUwOxPKLa",
  "value": [
    {
      "displayName":"Cameron White",
      "givenName":"Cameron",
      "surname":"White",
      "id":"ffff7b1a-13b6-477b-8c0c-380905cd99f7"
    },
    {
      "displayName":"Delia Dennis",
      "givenName":"Delia",
      "surname":"Dennis",
      "id":"605d1257-ffff-40b6-8e6f-528a53f5dc55"
    },
    {
      "id": "86462606-fde0-4fc4-9e0c-a20eb73e54c6",
      "@removed": {
        "reason": "deleted"
      }
    },
    {
      "displayName": "Conf Room Adams",
      "id": "6ea91a8d-e32e-41a1-b7bd-d2d185eed0e0"
    }
  ]
}

La deuxième requête comprend l’URL skipToken renvoyée par la réponse précédente. Notez que le paramètre $select est encodé et inclus dans le skipToken.

GET https://graph.microsoft.com/v1.0/users/delta?$skiptoken=oEBwdSP6uehIAxQOWq_3Ksh_TLol6KIm3stvdc6hGhZRi1hQ7Spe__dpvm3U4zReE4CYXC2zOtaKdi7KHlUtC2CbRiBIUwOxPKLa

La réponse contient un autre @odata.nextLink avec une nouvelle valeur skipToken, ce qui indique que d’autres modifications suivies pour les utilisateurs sont disponibles. Utilisez l’URL @odata.nextLink dans d’autres requêtes jusqu’à ce qu’une URL de @odata.deltaLink (dans un paramètre @odata.deltaLink ) soit retournée dans la réponse finale, même si la valeur est un tableau vide.

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users",
  "@odata.nextLink":"https://graph.microsoft.com/v1.0/users/delta?$skiptoken=pqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjtQ5LOhVoS7qQG_wdVCHHlbQpga7",
  "value": [
    {
      "displayName":"Mallory Cortez",
      "givenName":"Mallory",
      "surname":"Cortez",
      "id":"d8c37826-ffff-4cae-b348-e2725b1e814b"
    },
    {
      "displayName":"Diego Sicilian",
      "givenName":"Diego",
      "surname":"Sicilian",
      "id":"8b1ee412-cd8f-4d59-ffff-24010edb9f1f"
    }
  ]
}

La troisième requête utilise la dernière skipToken retournée par la dernière demande de synchronisation.

GET https://graph.microsoft.com/v1.0/users/delta?$skiptoken=pqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjtQ5LOhVoS7qQG_wdVCHHlbQpga7

Cette réponse inclut une @odata.deltaLink URL, qui indique qu’il n’y a plus de données sur l’état existant des objets utilisateur. Pour les demandes futures, l’application utilise l’URL @odata.deltaLink pour en savoir plus sur les autres modifications apportées aux utilisateurs. Enregistrez le deltatoken et utilisez-le dans l’URL de requête suivante pour découvrir d’autres modifications apportées aux utilisateurs.

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users",
  "@odata.deltaLink":"https://graph.microsoft.com/v1.0/users/delta?$deltatoken=oEcOySpF_hWYmTIUZBOIfPzcwisr_rPe8o9M54L45qEXQGmvQC6T2dbL-9O7nSU-njKhFiGlAZqewNAThmCVnNxqPu5gOBegrm1CaVZ-ZtFZ2tPOAO98OD9y0ao460",
  "value": [
    {
      "displayName":"Lidia Holloway",
      "givenName":"Lidia",
      "surname":"Holloway",
      "id":"25dcffff-959e-4ece-9973-e5d9b800e8cc"
    },
    {
      "displayName":"Patti Fernandez",
      "givenName":"Patti",
      "surname":"Fernandez",
      "id":"f6ede700-27d0-4c42-bfb9-4dffff43c74a"
    }
  ]
}

À l’aide de deltatoken la dernière réponse, vous obtenez les modifications (ajouts, suppressions ou mises à jour) apportées aux utilisateurs depuis la dernière requête.

GET https://graph.microsoft.com/v1.0/users/delta?$deltatoken=oEcOySpF_hWYmTIUZBOIfPzcwisr_rPe8o9M54L45qEXQGmvQC6T2dbL-9O7nSU-njKhFiGlAZqewNAThmCVnNxqPu5gOBegrm1CaVZ-ZtFZ2tPOAO98OD9y0ao460

S’il n’y a aucune modification, un @odata.deltaLink est retourné sans résultats : la propriété value est un tableau vide.

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users",
  "@odata.deltaLink":"https://graph.microsoft.com/v1.0/users/delta?$deltatoken=MF1LuFYbK6Lw4DtZ4o9PDrcGekRP65WEJfDmM0H26l4v9zILCPFiPwSAAeRBghxgiwsXEfywcVQ9R8VEWuYAB50Yw3KvJ-8Z1zamVotGX2b_AHVS_Z-3b0NAtmGpod",
  "value": []
}

En cas de modifications, une collection d’objets utilisateur modifiés est incluse. La réponse contient également un élément @odata.nextLink (s’il existe plusieurs pages de modifications à récupérer) ou un élément @odata.deltaLink. Implémentez le même modèle de suivi du @odata.nextLink et conservez le @odata.deltaLink final pour les appels futurs.

Remarque

Cette demande peut avoir des retards de réplication pour les utilisateurs qui ont été récemment créés, mis à jour ou supprimés. Réessayez le @odata.nextLink ou @odata.deltaLink après un certain temps pour récupérer les dernières modifications.

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users",
  "@odata.deltaLink":"https://graph.microsoft.com/v1.0/users/delta?$deltatoken=MF1LuFYbK6Lw4DtZ4o9PDrcGekRP65WEJfDmM0H26l4v9zILCPFiPwSAAeRBghxgiwsXEfywcVQ9R8VEWuYAB50Yw3KvJ-8Z1zamVotGX2b_AHVS_Z-3b0NAtmGpod",
  "value": [
    {
      "displayName":"MOD Administrator",
      "givenName":"MOD",
      "surname":"Administrator",
      "id":"25dcffff-959e-4ece-9973-e5d9b800e8cc"
    },
    {
      "id":"8ffff70c-1c63-4860-b963-e34ec660931d",
      "@removed": {
         "reason": "changed"
      }
    }
  ]
}