Partager via


Opérations de longue durée

Une opération de longue durée (LRO) est une tâche chronophage asynchrone qui permet l’interrogation asynchrone tout en conservant la réactivité et l’extensibilité. L’interrogation fait référence au modèle client requis pour vérifier périodiquement l’état de l’opération jusqu’à ce qu’elle se termine.

Dans le contexte des services web et des API, les LRO font référence aux tâches ou aux processus qui nécessitent un temps considérable d’exécution, ce qui rend les LRO inadaptés à l’achèvement immédiat dans un cycle de réponse à une demande unique.

Par exemple, ces opérations incluent des chargements de données volumineux, des calculs complexes, un traitement par lots ou un provisionnement de ressources dans des environnements cloud. Toutes les opérations de longue durée n’ont pas de résultat dans Fabric. Certaines opérations s’exécutent simplement jusqu’à la fin sans fournir d’URL de résultat.

Spécification d’API

Une API qui utilise l’infrastructure LRO retourne l’un des deux résultats réussis :

  • Code d’état HTTP 200 OK ou 201 CREATED : le corps de la réponse contient le résultat de l’API, s’il existe un résultat.
  • Code d’état HTTP 202 Accepté : le corps de la réponse est vide.

Trois en-têtes de réponse sont automatiquement ajoutés par l’infrastructure LRO :

  • Location header: contient l’URL permettant d’interroger l’état de l’opération.
  • x-ms-operation-id header: contient l’ID d’opération, qui peut être utilisé pour construire l’URL d’état de l’opération.
  • Retry-After header: contient un entier représentant le nombre de secondes pendant lesquelles un appelant doit attendre avant d’interroger l’état de l’opération.

Interrogation de l’état et obtention du résultat

Il existe deux approches que vous pouvez adopter pour interroger l’état et obtenir le résultat une fois l’opération terminée :

  • Utilisation de l’en-tête de localisation : l'en-tête de localisation retourné, pendant que l’opération s’exécute, correspond à l’API Obtenir l’état de l’opération avec l’ID de l’opération pour l’opération en cours. Une fois l’opération terminée, l’en-tête de localisation retourné pointe vers l’API Obtenir le résultat de l’opération avec l’ID de l’opération et le résultat.

  • À l’aide de x-ms-operation-id : vous pouvez générer des appels d’API qui retournent dans l’en-tête de l’opération à l’aide de l’en-tête x-ms-operation-id retourné dans la réponse de l’appel initial. Extrayez l’état avec l’API Obtenir l’état de l’opération, à l’aide de l’ID d’opération et obtenez le résultat avec l’API Get Operation Result (à l’aide de l’ID d’opération).

Exemple de code C# pour interroger l’état de l’opération

// Get operationUrl from location header or by building it with operation ID and Get State API.  
do 
{ 
  Thread.Sleep(retryAfter * 1000); // Get retryAfter value from Retry-After header. 
  response = client.GetAsync(operationUrl).Result;  
  jsonOperation = response.Content.ReadAsStringAsync().Result; 
  operation = JsonSerializer.Deserialize<FabricOperation>(jsonOperation); 
} while (operation.status != "Succeeded" && operation.status != "Failed"); 

Exemple de création d’élément

Il s’agit d’un exemple d’opération LRO. Dans cet exemple, l’utilisateur a créé deux blocs-notes.

Étape 1 : Créer deux blocs-notes

Créez deux blocs-notes.

Phase 2 : Interroger les notebooks

Interrogez la création du notebook à l’aide de Obtenir l’état de l’opération .

Notebook 1 : retourne 201. L’opération est terminée.

{ 
  "id": "551e6a4d-d81a-4079-b08c-25cec3cebba9", 
  "type": "Notebook", 
  "displayName": "Notebook1", 
  "description": "", 
  "workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519" 
} 

Notebook 2 - Renvoie 202. L’opération n’est pas terminée. Le notebook 2 n’est pas créé.

{ 
"status": "Running", 
"createdTimeUtc": "2023-11-13T22:24:40.477Z", 
"lastUpdatedTimeUtc": "2023-11-13T22:24:41.532Z", 
"percentComplete": 25 
} 

Phase 3 : Interroger le notebook 2

Attendez 20 minutes, puis sondez le bloc-notes 2 en utilisant Get Operation State.

GET https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78

Notebook 2 - Renvoie 201. L’opération est terminée. Le notebook 2 est créé.

L'opération est terminée - a reçu le code d'état HTTP 200-OK. Corps de réponse :

{ 
  "status": "Succeeded", 
  "createdTimeUtc": "2023-11-13T22:25:06.1193103", 
  "lastUpdatedTimeUtc": "2023-11-13T22:25:09.0255787", 
  "percentComplete": 100, 
  "error": null 
} 

Étape 4 : Obtenir le résultat de l’opération notebook 2

Obtenez le résultat de l’opération pour notebook 2 avec Obtenir le résultat de l’opération.

GET https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78/result

Notebook 2 - Renvoie 200. Le carnet de notes 2 est créé.

{ 
"id": "221a6eea-0f27-41eb-bcc5-e4d7b216ed43", 
"type": "Notebook", 
"displayName": " Notebook2", 
"description": "", 
"workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519" 
}