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.RemarqueLes 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 OKindiquant 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 quetry it laters'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"
}