Ao chamar uma operação de API do AnalyticDB for PostgreSQL, a requisição pode atingir o tempo limite ou o servidor pode retornar um erro antes da conclusão da operação. Se o seu cliente tentar repetir a requisição sem nenhuma proteção, a operação poderá ser executada mais de uma vez, criando recursos duplicados ou acionando efeitos colaterais indesejados. Utilize o parâmetro ClientToken para tornar as tentativas de repetição idempotentes, garantindo que múltiplas requisições idênticas produzam o mesmo resultado de uma única requisição.
Como funciona a idempotência
A idempotência é uma propriedade de certas operações e recursos na matemática e na ciência da computação, sendo fundamental para o projeto de sistemas distribuídos. Uma operação idempotente produz sempre o mesmo resultado, independentemente de quantas vezes seja executada. Para ativar a idempotência em uma requisição de API do AnalyticDB for PostgreSQL, inclua um valor ClientToken na requisição. O cliente gera esse token e o AnalyticDB for PostgreSQL o utiliza para detectar requisições duplicadas, retornando o resultado original sem repetir a operação.
Uso do ClientToken
O ClientToken é uma string exclusiva e sensível a maiúsculas e minúsculas, gerada no lado do cliente. Ela pode conter até 64 caracteres ASCII.
Exemplo: ClientToken=123e4567-e89b-12d3-a456-426655440000
Inclua o ClientToken em requisições que possam precisar de nova tentativa, como quando uma requisição retorna 500 Internal Server Error ou 503 Service Unavailable, ou quando nenhuma resposta é recebida.
Cada nova tentativa deve usar novos valores para
SignatureNonce
,
Timestamp
e
Signature
. O AnalyticDB for PostgreSQL usa
SignatureNonce
para evitar ataques de replay e
Timestamp
para identificar quando a requisição foi feita. Como ambos os valores mudam a cada tentativa,
Signature
também muda. Mantenha o
ClientToken
igual em todas as tentativas referentes à mesma requisição lógica.
Comportamento de repetição por código de status HTTP
|
Código de status HTTP |
Ação |
Detalhes |
|
200 |
Não repetir |
A requisição original foi bem-sucedida. Tentativas subsequentes retornam o mesmo resultado sem modificar o estado do servidor. |
|
4xx com |
Aguardar e repetir |
O servidor está temporariamente ocupado. Aguarde antes de tentar novamente. |
|
Outros 4xx |
Solucionar problemas primeiro |
Há um problema na própria requisição. Resolva a questão com base na mensagem de erro antes de tentar novamente. |
|
500 ou 503 |
Repetir |
Erro transitório no lado do servidor. Repita a requisição com o mesmo |
Erro: IdempotentParameterMismatch
Se você reutilizar um valor de ClientToken mas alterar outros parâmetros da requisição, o AnalyticDB for PostgreSQL retornará o código de erro IdempotentParameterMismatch. Para resolver isso, reutilize os parâmetros da requisição original ou gere um novo ClientToken para a nova requisição.