Compartir a través de


Trabajar con acciones de larga duración

En este artículo se describe cómo trabajar con acciones de ejecución prolongada al usar las API de Microsoft Graph. Algunas respuestas de API requieren una cantidad indeterminada de tiempo para completarse. En lugar de esperar hasta que la acción se complete antes de devolver una respuesta, Microsoft Graph podría usar un patrón de acciones de ejecución prolongada. Este patrón proporciona a la aplicación una manera de sondear las actualizaciones de estado en una acción de ejecución prolongada, sin ninguna solicitud a la espera de que se complete la acción.

El patrón general implica los pasos siguientes:

  1. La aplicación solicita una acción de ejecución prolongada a través de la API. La API acepta la acción y devuelve una 202 Accepted respuesta junto con un Location encabezado para que la dirección URL de la API recupere los informes de estado de la acción.
  2. La aplicación solicita la dirección URL del informe de estado de acción y recibe una respuesta asyncJobStatus con el progreso de la acción de ejecución prolongada.
  3. Se completa la acción de ejecución prolongada.
  4. La aplicación vuelve a solicitar la dirección URL del informe de estado de acción y recibe una respuesta asyncJobStatus que muestra la finalización de la acción.

Requisitos previos

También se requieren los mismos permisos necesarios para realizar una acción de ejecución prolongada para consultar el estado de una acción de ejecución prolongada.

Solicitud de acción inicial

En el ejemplo siguiente se usa el método driveitem: copy . En este escenario, la aplicación realiza una solicitud para copiar una carpeta que contiene una gran cantidad de datos. Es probable que esta solicitud tardará varios segundos en completarse porque la cantidad de datos es grande.

POST https://graph.microsoft.com/beta/me/drive/items/{folder-item-id}/copy
Content-Type: application/json

{
  "parentReference": {
    "path": "/drive/root:/Documents"
  },
  "name": "Copy of LargeFolder1"
}

La API responde que se aceptó la acción y proporciona la dirección URL para recuperar el estado de la acción de ejecución prolongada.

HTTP/1.1 202 Accepted
Location: https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

Nota: Es posible que la dirección URL de ubicación devuelta no esté en el punto de conexión de Microsoft Graph API.

En muchos casos, este paso es el final de la solicitud, ya que la acción de copia se completa sin ningún otro trabajo de la aplicación. Sin embargo, si la aplicación necesita mostrar el estado de la acción de copia o asegurarse de que se completa sin errores, puede hacerlo mediante la dirección URL del monitor.

Recuperar un informe de estado desde la dirección URL de supervisión

Para comprobar el estado de la acción de copia, la aplicación realiza una solicitud a la dirección URL proporcionada en la respuesta anterior.

Nota: Esta solicitud no requiere autenticación, ya que la dirección URL es de corta duración y es única para el autor de la llamada original.

GET https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

El servicio responde con información de que la acción de ejecución prolongada todavía está en curso.

HTTP/1.1 202 Accepted
Content-type: application/json

{
  "operation": "ItemCopy",
  "percentageComplete": 27.8,
  "status": "inProgress"
}

Esta información puede usarse para proporcionar una actualización al usuario sobre el progreso de la acción de copia. La aplicación puede continuar sondeando la dirección URL de supervisión para solicitar actualizaciones de estado y mantener el seguimiento del progreso de la acción.

Recuperar un informe de estado completado desde la dirección URL de supervisión

Después de unos segundos, se completa la operación de copia. Esta vez, cuando la aplicación realiza una solicitud a la dirección URL de supervisión, la respuesta es un redireccionamiento al resultado final de la acción.

GET https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

Cuando se completa la acción, la respuesta del servicio de supervisión devuelve el identificador de recurso para los resultados.

HTTP/1.1 202 Accepted
Content-type: application/json

{
    "percentageComplete": 100.0,
    "resourceId": "01MOWKYVJML57KN2ANMBA3JZJS2MBGC7KM",
    "status": "completed"
}

Recuperar los resultados de la operación completada

Cuando se completa el trabajo, la dirección URL del monitor devuelve el identificador de recurso del resultado. En este caso, es la nueva copia del elemento original. En el ejemplo siguiente se muestra cómo abordar este nuevo elemento mediante el identificador de recurso.

GET https://graph.microsoft.com/beta/me/drive/items/{item-id}
HTTP/1.1 200 OK
Content-type: application/json

{
    "id": "",
    "name": "Copy of LargeFolder1",
    "folder": { },
    "size": 12019
}

Recursos admitidos

Las acciones de larga duración se admiten en los métodos siguientes.

Recurso API
driveItem copy