Todos os produtos
Search
Central de documentação

Resource Orchestration Service:Garantir idempotência

Última atualização: Jun 27, 2026

Se ocorrer timeout de requisição ou erro interno no servidor durante a chamada da API do Resource Orchestration Service (ROS), o cliente pode tentar reenviar a requisição. Nesse caso, especifique o parâmetro ClientToken na requisição para evitar envios repetidos pelo cliente.

O que é idempotência?

A idempotência é uma propriedade de certas operações e recursos na matemática e na ciência da computação. Ela garante a obtenção do mesmo resultado da requisição inicial, mesmo após executar a operação ou aplicar o recurso várias vezes. Esse conceito é fundamental no design de sistemas distribuídos.

Garantir idempotência

Geralmente, o cliente envia uma nova tentativa de requisição quando o código de status HTTP retornado é 500 Internal Server Error ou 503 Service Unavailable, ou quando não há retorno de resultado. Ao chamar a API do ROS, defina um parâmetro para que o cliente gere uma string de até 64 caracteres ASCII. Use essa string como valor do parâmetro ClientToken para assegurar a idempotência da requisição de nova tentativa.

ClientToken

As informações a seguir descrevem o parâmetro de requisição ClientToken:

  • O valor do parâmetro ClientToken é uma string única, sensível a maiúsculas e minúsculas, gerada pelo cliente com até 64 caracteres ASCII. Exemplo: ClientToken=123e4567-e89b-12d3-a456-42665544****.

  • Se uma requisição de nova tentativa contiver o mesmo valor de ClientToken da requisição inicial, mas apresentar valores diferentes em outros parâmetros, o ROS retornará o código de erro InvalidIdempotenceParameter.

    Nota

    Altere os valores dos parâmetros

    SignatureNonce

    ,

    Timestamp

    e

    Signature

    em cada requisição de nova tentativa. Na API do ROS, o parâmetro

    SignatureNonce

    evita ataques de replay, enquanto o parâmetro

    Timestamp

    registra o horário de cada requisição. Portanto, os valores de

    SignatureNonce

    e

    Timestamp

    devem ser diferentes dos usados na requisição original. Por padrão, o valor do parâmetro

    Signature

    muda automaticamente ao alterar os valores de SignatureNonce e Timestamp.

  • Ao definir o parâmetro ClientToken em uma requisição de nova tentativa, podem ocorrer os seguintes resultados:

    • Retorno do código de status HTTP 200 OK, indicando sucesso na chamada. Nessa situação, o cliente obtém o mesmo resultado da requisição inicial, sem impacto no servidor.

    • Retorno de um código de status HTTP de falha, como 400 Bad Request. Se aparecer uma mensagem de erro como try it later, a requisição de nova tentativa falhou. Analise as causas com base nas mensagens de erro e envie outra requisição.

Exemplos de requisições

Neste exemplo, a operação CreateStack cria uma stack em uma requisição de nova tentativa. Se você definir o parâmetro de requisição ClientToken com o mesmo valor usado na requisição inicial e não alterar os demais parâmetros, o valor de StackId retornado pelo servidor será idêntico ao da primeira requisição. Caso o parâmetro ClientToken tenha um valor diferente do original, o servidor poderá retornar valores distintos para StackId e criar múltiplas stacks.

Exemplos de requisições

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>

Exemplos de respostas

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