Utilisation d’actions de longue durée (version bêta)

La durée d’exécution de certaines réponses d’API est indéterminée. Au lieu d’attendre que l’action soit terminée pour renvoyer une réponse, Microsoft Graph peut utiliser un motif d’action de longue durée. Ce modèle permet à votre application d’interroger status mises à jour sur une action de longue durée, sans qu’aucune demande n’attende la fin de l’action.

Le motif général procède comme suit :

  1. Votre application demande une action de longue durée via l’API. L’API accepte l’action et renvoie une réponse 202 Accepted avec un en-tête Location pour l’URL de l’API afin de récupérer les rapports d’état de l’action.
  2. Votre application demande l’URL du rapport d’état de l’action et reçoit une réponse AsyncJobStatus avec la progression de l’action de longue durée.
  3. L’action de longue durée est terminée.
  4. Votre application demande l’URL du rapport d’état de l’action et reçoit une réponse AsyncJobStatus affichant la fin de l’action.

Demande d’action initiale

Découvrons maintenant les étapes pour un exemple de scénario de copie d’une ressource DriveItem. Dans ce scénario, votre application demande de copier un dossier qui contient un volume important de données. Cette demande risque de prendre plusieurs secondes car le volume de données est conséquent.

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

L’API répond que l’action a été acceptée et envoie l’URL pour récupérer l’état de l’action de longue durée.

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

Remarque : l’URL de l’emplacement renvoyée peut ne pas être sur le point de terminaison de l’API Microsoft Graph.

Dans de nombreux cas, il peut s’agir de la fin de la demande, car l’action de copie est effectuée sans que l’application effectue de travail supplémentaire. Toutefois, si votre application doit afficher l’état de l’action de copie ou pour s’assurer qu’elle s’exécute sans erreur, l’URL de surveillance peut être utilisée.

Récupérer un rapport d’état à partir de l’URL de surveillance

Pour vérifier l’état de l’action de copie, l’application soumet une demande à l’URL fournie dans la réponse précédente. Remarque : Cette demande ne requiert pas d’authentification, car l’URL est de courte durée et propre à l’appelant d’origine.

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

Le service informe que l’action de longue durée est toujours en cours :

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

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

Ces informations peuvent être utilisées pour fournir une mise à jour à l’utilisateur sur la progression de l’action de copie. L’application continue d’interroger l’URL de surveillance pour demander les mises à jour du statut et effectuer le suivi de l’avancement de l’action.

Récupérer un rapport d’état de fin de l’URL de surveillance

Au bout de quelques secondes, l’opération de copie est terminée. À ce stade, lorsque l’application soumet une demande à l’URL de surveillance, la réponse est une redirection vers le résultat final de l’action.

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

Une fois l’action terminée, la réponse du service de surveillance renvoie l’objet resourceId pour les résultats.

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

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

Récupérer les résultats de l’action terminée

Une fois la tâche terminée, l’URL de surveillance renvoie l’objet resourceId du résultat, dans ce cas, il s’agit de la nouvelle copie de l’élément d’origine. Vous pouvez utiliser ce nouvel élément à l’aide de l’objet resourceId, par exemple :

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
}

Ressources prises en charge

Les actions de longue durée sont prises en charge dans les méthodes d’API suivantes :

Ressource API
DriveItem Copier

Conditions préalables

Les autorisations requises pour effectuer une action de longue durée sont également requises pour interroger l’état d’une action de longue durée.