Obtener los cambios incrementales de usuarios

La consulta delta de Microsoft Graph le permite consultar adiciones, eliminaciones o actualizaciones en los recursos admitidos a través de una serie de solicitudes delta . Para los usuarios, la consulta delta permite detectar cambios sin capturar todo el conjunto de usuarios para comparar los cambios.

Los clientes que sincronizan usuarios con un almacén de perfiles local pueden usar la consulta delta para su sincronización completa inicial junto con las sincronizaciones incrementales posteriores. Normalmente, un cliente realiza una sincronización completa inicial de todos los usuarios de un inquilino y, a continuación, obtiene los cambios incrementales a los usuarios periódicamente.

Realizar un seguimiento de los cambios en los usuarios

Realice un seguimiento de los cambios del usuario a través de una o más solicitudes GET con la función delta. La solicitud GET tiene las siguientes características:

  • Función delta antepuesto a la ruta de acceso de la dirección URL.
  • Un token de estado (deltatoken o skipToken) de la llamada a la función delta GET anterior.
  • [Opcional] Cualquier parámetro de consulta admitido

Ejemplo

En este artículo se muestra una serie de solicitudes de ejemplo para realizar un seguimiento de los cambios realizados en los usuarios:

  1. Una solicitud inicial y una respuesta inicial
  2. Una solicitud de nextLink y respuesta
  3. Una solicitud final de nextLinkyrespuesta
  4. Una solicitud deltaLink yuna respuesta deltaLink

Solicitud inicial

Para realizar un seguimiento de los cambios en el recurso de usuario, realice una solicitud e incluya la función delta como segmento de dirección URL.

Sugerencia

/delta es un acceso directo para el nombre /microsoft.graph.deltacompleto. Las solicitudes generadas por los SDK de Microsoft Graph usan el nombre completo.

Tenga en cuenta los siguientes elementos:

  • El parámetro de consulta $select opcional se incluye en la solicitud para demostrar cómo los parámetros de consulta se incluyen automáticamente en futuras solicitudes. Si es necesario, los parámetros de consulta deben especificarse en la solicitud inicial.
    • Solo se realiza el seguimiento de los cambios en las propiedades incluidas en $select . Si $select no se especifica, se realiza un seguimiento de todos los cambios en todas las propiedades del objeto.
  • La solicitud inicial no incluye un token de estado. Los tokens de estado se usan en solicitudes posteriores.
GET https://graph.microsoft.com/v1.0/users/delta?$select=displayName,givenName,surname

Respuesta inicial

Si se ejecuta correctamente, este método devuelve el código de respuesta 200 OK y el objeto de colección usuario en el cuerpo de la respuesta. Suponiendo que todo el conjunto de usuarios es demasiado grande, la respuesta incluye un @odata.nextLink token de estado en un @odata.nextLink parámetro.

En este ejemplo, se devuelve una dirección URL de @odata.nextLink que indica que hay más páginas de datos para recuperar en la sesión. Observe en $skiptoken la dirección URL. El $select parámetro de consulta de la solicitud inicial se codifica en la @odata.nextLink dirección URL.

La respuesta también contiene una @removed anotación para un usuario con el identificador 86462606-fde0-4fc4-9e0c-a20eb73e54c6. La @removed anotación se agrega en los siguientes escenarios:

  • Cuando el usuario se elimina, el elemento contiene una anotación: @removed con el valor de "reason": "changed".
  • Cuando el usuario se elimina permanentemente, el elemento contiene una anotación: @removed con el valor de "reason": "deleted".
  • Cuando se crea o restaura el usuario desde el contenedor de elementos eliminados, no hay ninguna anotación.
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 segunda solicitud especifica el skipToken devuelto de la respuesta anterior. Observe que el parámetro $select está codificado y se incluye en el skipToken.

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

La respuesta contiene otra @odata.nextLink con un nuevo valor skipToken, que indica que hay disponibles más cambios que se realizaron por los usuarios. Use la dirección URL de @odata.nextLink en más solicitudes hasta que se devuelva una dirección URL de @odata.deltaLink (en un parámetro @odata.deltaLink ) en la respuesta final, incluso si el valor es una matriz vacía.

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 tercera solicitud usa la última devolución skipToken de la última solicitud de sincronización.

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

Esta respuesta incluye una @odata.deltaLink dirección URL, que indica que no hay más datos sobre el estado existente de los objetos de usuario. Para solicitudes futuras, la aplicación usa la dirección URL de @odata.deltaLink para obtener información sobre otros cambios en los usuarios. Guarde el deltatoken y úselo en la dirección URL de solicitud posterior para detectar más cambios en los usuarios.

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

Con desde deltatoken la última respuesta, se obtienen cambios (adiciones, eliminaciones o actualizaciones) a los usuarios desde la última solicitud.

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

Si no hay cambios, se devuelve un @odata.deltaLink sin resultados: la propiedad value es una matriz vacía.

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": []
}

Si hay cambios, se incluye una colección de objetos de usuario modificados. La respuesta también contiene un @odata.nextLink, en caso de que haya varias páginas de cambios para recuperar, o un @odata.deltaLink. Implemente el mismo patrón de procedimientos siguiendo el @odata.nextLink y conserve el último @odata.deltaLink para futuras llamadas.

Nota:

Esta solicitud puede tener retrasos de replicación para los usuarios que se crearon, actualizaron o eliminaron recientemente. Vuelva a intentar el@odata.nextLink o el @odata.deltaLink después de un tiempo para recuperar los cambios más recientes.

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