Obtener los cambios incrementales de grupos
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 . En el caso de los grupos, la consulta delta permite detectar cambios sin capturar todo el conjunto de grupos para comparar los cambios.
Los clientes que sincronizan grupos 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 grupos de un inquilino y, a continuación, obtiene los cambios incrementales en los grupos periódicamente.
Realizar un seguimiento de los cambios en los grupos
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 en los grupos:
- Una solicitud inicial y una respuesta inicial
- Una solicitud de nextLink y respuesta
- Una solicitud final de nextLinkyrespuesta
- Una solicitud deltaLink yuna respuesta deltaLink
Solicitud inicial
Para realizar un seguimiento de los cambios en el recurso de grupo, 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.delta
completo. 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.
- Solo se realiza el seguimiento de los cambios en las propiedades incluidas en
- El parámetro de consulta
$select
opcional también se utiliza para mostrar cómo se pueden recuperar los miembros del grupo junto con los objetos del grupo. Esta funcionalidad permite realizar un seguimiento de los cambios de pertenencia, como cuando los usuarios se agregan o quitan de los grupos. - 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/groups/delta?$select=displayName,description,members
Respuesta inicial
Si se ejecuta correctamente, este método devuelve el código de respuesta 200 OK
y el objeto de colección grupo en el cuerpo de la respuesta. Si todo el conjunto de grupos es demasiado grande para caber en una respuesta, se incluye un @odata.nextLink
que contiene un token de estado.
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 members@delta
propiedad se incluye en el grupo Todas las compañías y contiene los dos miembros actuales del grupo. sg-HR no contiene esa propiedad porque el grupo no tiene ningún miembro.
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups(displayName,description)",
"@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=pqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjvB7XnF_yllFsCrZJ",
"value": [
{
"displayName":"All Company",
"description":"This is the default group for everyone in the network",
"id":"c2f798fd-f95d-4623-8824-63aec21fffff",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "693acd06-2877-4339-8ade-b704261fe7a0"
},
{
"@odata.type": "#microsoft.graph.user",
"id": "49320844-be99-4164-8167-87ff5d047ace"
}
]
},
{
"displayName":"sg-HR",
"description":"All HR personnel",
"id":"ec22655c-8eb2-432a-b4ea-8b8a254bffff"
}
]
}
Solicitud de nextLink
La segunda petición usa el @odata.nextLink
de la respuesta anterior, que contiene el skiptoken
. Observe que el parámetro $select
no está visiblemente presente, ya que está codificado e incluido en el token.
GET https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=pqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjvB7XnF_yllFsCrZJ
respuesta de nextLink
La respuesta contiene otro @odata.nextLink
con un nuevo valor skiptoken
, que indica que hay disponibles más cambios de los que se realizaron seguimiento para los grupos. Use la @odata.nextLink
dirección URL en solicitudes posteriores hasta que se devuelva una @odata.deltaLink
dirección URL (en un @odata.deltaLink
parámetro) 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#groups",
"@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=pqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjtQ5LOhVoS7qQG_wdVCHHlbQpga7",
"value": [
{
"displayName":"Mark 8 Project Team",
"description":"Mark 8 Project Team",
"id":"2e5807ce-58f3-4a94-9b37-ffff2e085957",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "632f6bb2-3ec8-4c1f-9073-0027a8c68593"
}
]
},
{
"displayName":"Sales and Marketing",
"description":"Sales and Marketing",
"id":"421e797f-9406-4934-b778-4908421e3505",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "3c8ac7c4-d365-4df9-abfa-356a9dd7763c"
},
{
"@odata.type": "#microsoft.graph.user",
"id": "49320844-be99-4164-8167-87ff5d047ace"
}
]
}
]
}
solicitud de nextLink final
La tercera solicitud usa la última devolución @odata.nextLink
de la última solicitud de sincronización.
GET https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=ppqwSUjGYvb3jQpbwVAwEL7yuI3dU1LecfkkfLPtnIjtQ5LOhVoS7qQG_wdVCHHlbQpga7
Respuesta de nextLink final
Cuando se devuelve una dirección URL @odata.deltaLink
, no hay más datos sobre el estado existente de los objetos del grupo. Para las solicitudes futuras, la aplicación usa la dirección URL @odata.deltaLink
para obtener información sobre los cambios en los grupos. Guarde deltatoken
y utilícelo en la dirección URL de solicitud posterior para descubrir cambios en los grupos.
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.deltaLink":"https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=sZwAFZibx-LQOdZIo1hHhmmDhHzCY0Hs6snoIHJCSIfCHdqKdWNZ2VX3kErpyna9GygROwBk-rqWWMFxJC3pw",
"value": [
{
"displayName":"All Employees",
"id":"bed7f0d4-750e-4e7e-ffff-169002d06fc9"
},
{
"displayName":"Remote living",
"description":"Remote living",
"id":"421e797f-9406-ffff-b778-4908421e3505"
}
]
}
Solicitud de deltaLink
Con desde @odata.deltaLink
la última respuesta, se obtienen cambios (adiciones, eliminaciones o actualizaciones) en los grupos desde la última solicitud. Los cambios incluyen:
- Nuevos objetos de grupo creados.
- Objetos de grupo eliminados.
- Agrupar objetos para los que cambió una propiedad de seguimiento (por ejemplo, un displayName actualizado).
- Objetos de grupo para los que se agregaron o quitaron objetos miembro.
GET https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=sZwAFZibx-LQOdZIo1hHhmmDhHzCY0Hs6snoIHJCSIfCHdqKdWNZ2VX3kErpyna9GygROwBk-rqWWMFxJC3pw
Respuesta de deltaLink
Respuesta deltaLink con una matriz vacía
Si no hay cambios, se devuelve un @odata.deltaLink
sin resultados: la propiedad value es una matriz vacía. Asegúrese de que reemplaza el vínculo anterior en la aplicación con el nuevo para usar en futuras llamadas.
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.deltaLink":"https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=sZwAFZibx-LQOdZIo1hHhmmDhHzCY0Hs6snoIHJCSIfCHdqKdWNZ2VX3kErpyna9GygROwBk-rqWWMFxJC3pw",
"value": []
}
respuesta deltaLink con cambios
Si hay cambios, se incluye una colección de grupos 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 grupos que se crearon, actualizaron o eliminaron recientemente. Reintente el @odata.nextLink
o @odata.deltaLink
después de un tiempo para recuperar los cambios más recientes.
Algunas cosas a tener en cuenta sobre la respuesta de ejemplo:
- Los objetos se devuelven con el mismo conjunto de propiedades especificadas originalmente a través de los
$select
parámetros de consulta. - Se incluyen las propiedades modificadas y sin cambios: la propiedad description tiene un nuevo valor, mientras que la propiedad displayName no ha cambiado.
members@delta
contiene los siguientes cambios en la pertenencia al grupo.- El usuario con identificador
632f6bb2-3ec8-4c1f-9073-0027a8c6859
se quitó del grupo quitando su pertenencia, tal como se describe en la@removed
propiedad . Las consultas delta no detectan los objetos que se quitan de un grupo mediante la eliminación del objeto. - El segundo usuario con identificador
37de1ae3-408f-4702-8636-20824abda004
se agregó al grupo.
- El usuario con identificador
Un objeto de grupo puede contener la @removed
anotación en los siguientes escenarios:
- Cuando se elimina un grupo (grupos de Microsoft 365), el elemento contiene una anotación:
@removed
con el valor de"reason": "changed"
. - Cuando el grupo se elimina permanentemente (un grupo de seguridad o elimina permanentemente un grupo de Microsoft 365), el elemento contiene una anotación:
@removed
con el valor de"reason": "deleted"
. - Cuando se crea o restaura el grupo, no hay ninguna anotación.
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.deltaLink":"https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=sZwAFZibx-LQOdZIo1hHhmmDhHzCY0Hs6snoIHJCSIfCHdqKdWNZ2VX3kErpyna9GygROwBk-rqWWMFxJC3pw",
"value": [
{
"displayName": "TestGroup3",
"description": "A test group for change tracking",
"id": "2e5807ce-58f3-4a94-9b37-ffff2e085957",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "632f6bb2-3ec8-4c1f-9073-0027a8c6859",
"@removed": {
"reason": "deleted"
}
},
{
"@odata.type": "#microsoft.graph.user",
"id": "37de1ae3-408f-4702-8636-20824abda004"
}
]
}
]
}
Navegar por los miembros en un grupo grande
La members@delta
propiedad se incluye en objetos de grupo de forma predeterminada, cuando no se especifica el $select
parámetro de consulta o cuando el $select=members
parámetro se especifica explícitamente. En el caso de los grupos con muchos miembros, es posible que todos los miembros no quepan en una sola respuesta. Implemente el siguiente patrón para controlar dichos casos.
Nota:
Este patrón se aplica tanto a la recuperación inicial del estado del grupo como a las llamadas posteriores para obtener cambios diferenciales.
Supongamos que ejecuta la siguiente consulta delta, ya sea para capturar el estado completo de los grupos inicial o más adelante para obtener cambios delta:
GET https://graph.microsoft.com/v1.0/groups/delta?$select=displayName,description,members
- Microsoft Graph podría devolver una respuesta que contenga solo un objeto de grupo, con una lista grande de miembros en la
members@delta
propiedad :
Primera Página
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=<...>",
"value": [
{
"displayName":"LargeGroup",
"description":"A group containing thousands of users",
"id":"2e5807ce-58f3-4a94-9b37-ffff2e085957",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "632f6bb2-3ec8-4c1f-9073-0027a8c6859",
"@removed": {
"reason": "deleted"
}
},
{
"@odata.type": "#microsoft.graph.user",
"id": "37de1ae3-408f-4702-8636-20824abda004"
},
<...more users here...>
]
}
<...no more groups included - this group filled out the entire response...>
]
}
- Al seguir ,
@odata.nextLink
es posible que reciba una respuesta que contenga el mismo objeto de grupo. Se devuelven los mismos valores de propiedad, pero lamembers@delta
propiedad ahora contiene una lista diferente de usuarios.
Segunda página
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.nextLink":"https://graph.microsoft.com/v1.0/groups/delta?$skiptoken=<...>",
"value": [
{
"displayName":"LargeGroup",
"description":"A group containing thousands of users",
"id":"2e5807ce-58f3-4a94-9b37-ffff2e085957",
"members@delta": [
{
"@odata.type": "#microsoft.graph.user",
"id": "c08a463b-7b8a-40a4-aa31-f9bf690b9551",
"@removed": {
"reason": "deleted"
}
},
{
"@odata.type": "#microsoft.graph.user",
"id": "23423fa6-821e-44b2-aae4-d039d33884c2"
},
<...more users here...>
]
}
<...no more groups included - this group filled out the entire response...>
]
}
- Finalmente, la lista de miembros completa se devuelve de esta manera y otros grupos comienzan a aparecer en la respuesta.
Le recomendamos los siguientes procedimientos para administrar correctamente este patrón:
- Siga siempre
@odata.nextLink
y combine de forma local cada estado de grupo: a medida que reciba respuestas relacionadas con el mismo grupo, puede usarlas para crear la lista de pertenencia completa en la aplicación. - No suponga una secuencia específica de las respuestas. Suponga que el mismo grupo podría mostrarse en cualquier lugar en la secuencia
@odata.nextLink
y téngalo en cuenta en la lógica de combinación.
Contenido relacionado
- Información general sobre Consulta de delta de Microsoft Graph.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de