Tous les produits
Search
Centre de documentation

Resource Orchestration Service:Garantir l'idempotence

Dernière mise à jour :Aug 10, 2026

Lorsque vous appelez l'API Resource Orchestration Service (ROS), le client peut tenter de renvoyer une demande en cas d'expiration du délai ou d'erreur interne sur le serveur. Dans ce cas, spécifiez le paramètre ClientToken dans la demande pour éviter que le client n'envoie la requête à plusieurs reprises.

Qu'est-ce que l'idempotence ?

L'idempotence est une propriété de certaines opérations et ressources en mathématiques ou en informatique. Elle permet d'obtenir le même résultat que lors de la demande initiale, même si vous effectuez les opérations ou appliquez les ressources plusieurs fois. Ce concept est essentiel à la conception des systèmes distribués.

Garantir l'idempotence

Dans la plupart des cas, un client envoie une nouvelle tentative lorsque le code d'état HTTP retourné est 500 Internal Server Error ou 503 Service Unavailable, ou lorsqu'aucun résultat n'est renvoyé. Lorsque vous appelez l'API ROS, définissez un paramètre permettant à votre client de générer une chaîne contenant jusqu'à 64 caractères ASCII. Spécifiez cette chaîne comme valeur du paramètre ClientToken afin de garantir l'idempotence de la demande de nouvelle tentative.

ClientToken

Les informations suivantes décrivent le paramètre de demande ClientToken :

  • La valeur du paramètre ClientToken est une chaîne unique, sensible à la casse, générée par un client et pouvant contenir jusqu'à 64 caractères ASCII. Exemple : ClientToken=123e4567-e89b-12d3-a456-42665544****.

  • Si une demande de nouvelle tentative contient la même valeur ClientToken que la demande initiale, mais des valeurs différentes pour certains autres paramètres, ROS renvoie le code d'erreur InvalidIdempotenceParameter.

    Remarque

    Les valeurs des paramètres

    SignatureNonce

    ,

    Timestamp

    et

    Signature

    dans une demande de nouvelle tentative doivent être modifiées. Dans l'API ROS, le paramètre

    SignatureNonce

    prévient les attaques par rejeu et le paramètre

    Timestamp

    enregistre l'heure de chaque demande. Par conséquent, les valeurs des paramètres

    SignatureNonce

    et

    Timestamp

    dans chaque demande de nouvelle tentative doivent différer de celles de la demande initiale. Par défaut, la valeur du paramètre

    Signature

    est modifiée lorsque vous changez les valeurs des paramètres SignatureNonce et Timestamp.

  • Après avoir spécifié le paramètre ClientToken dans une demande de nouvelle tentative, les résultats suivants peuvent être renvoyés :

    • Le code d'état HTTP 200 OK indiquant un appel réussi est renvoyé. Dans ce cas, le client obtient le même résultat que lors de la demande initiale. Le serveur n'est pas affecté.

    • Un code d'état HTTP indiquant un échec de l'appel, tel que 400 Bad Request, est renvoyé. Dans ce cas, la nouvelle tentative échoue si un message d'erreur tel que try it later s'affiche. Vous pouvez identifier les causes des erreurs en vous basant sur les messages d'erreur et envoyer une autre demande de nouvelle tentative.

Exemples de demandes

Dans cet exemple, l'opération CreateStack est appelée pour créer une pile via une demande de nouvelle tentative. Si vous définissez le paramètre de demande ClientToken sur la valeur ClientToken contenue dans la demande initiale et ne modifiez pas les valeurs des autres paramètres de demande, la valeur StackId renvoyée par le serveur est identique à celle de la demande initiale. Si vous définissez le paramètre ClientToken sur une valeur différente de celle de la demande initiale, le serveur peut renvoyer des valeurs différentes pour le paramètre StackId et créer plusieurs piles.

Exemples de demandes

http(s)://ros.aliyuncs.com/?Action=CreateStack
&RegionId=cn-hangzhou
&StackName=MyStack
&TemplateBody={"ROSTemplateFormatVersion": "2015-09-01"}
&ClientToken=123e4567-e89b-12d3-a456-42665544****
&<Common request parameters>

Exemples de réponses

{
    "StackId": "4a6c9851-3b0f-4f5f-b4ca-a14bf691****",
    "RequestId": "B288A0BE-D927-4888-B0F7-B35EF84B6E6F"    
}