Idempotency in microsserviços and REST APIs
As aplicações baeadas na plataforma Devprime já dispoem de um recurso automático de idempotência protegendo os serviços para não ocorrer inclusões duplicadas.
Neste cenário nós utilizaremos uma chave obritatória enviada pela aplicação que estiver utilizando a API. Para utilizar o recurso basta alterar as configurações no microserviço baseado no Devprime.
Criando um microserviço para utilizar no exemplo
Nós utilizaremos um microsserviço baseado na plataforma Devprime
- Utilize uma conta ativa no Devprime e ative o Devprime CLI.
- Inicie os containers pelo Docker (MongoDB, RabbitMQ e Redis)
- Crie a fila orderevents no RabbitMQ.
- Crie um novo microsserviço “order”.
Iniciando a configuração da idempotência
Configuração da idempotência na chave “Devprime_App”
Altere na configuração do Idempotency na opção “Enabled” para “true” e o “Flow” para “frontend”. Nós alteramos a “key” para “my-idempotency-key”. Com essa configuração a API vai requerer no Headar a chave de idempotência.
code .\src\app\appsettings.json
|
|
Inclua um segunda persistência na chave “Devprime_State”
Nesse exemplo utilizaremos um Redis local com uma senha padrão
code .\src\app\appsettings.json
|
|
Iniciando idempotência automática no microsserviço
Agora chegou o momento de testar a configuração. Antes de iniciar o microsserviço certifique de ter ativado os containers e criado a fila no RabbitMQ.
Execute a aplicação e faça um post pela API Order
Nós precisamos passar nesse cenário a chave de idempotência pelo Head por isso você precisa consumiar a API utilizando o curl, podtman, insomnia e muitas outras.
Iniciando o microsserviço configurado para usar uma chave de idempotência
`
Um código json de exemplo para uso na API. Modifique nos seus testes.
|
|
No primeiro teste nós não passaremos a chave da idempotência no POST conforme exemplo realizado no Postman.
Ao olhar o retorna da API nós teremos uma negativa do request pela ausência da chave que na configuração com o “Flow” do tipo “Backend” é obrigatória e deve ser passada pelo Header.
Agora vamos adicionar a nossa chave “my-idempotency-key” e um valor guid.
Após confirmar o post no passo anterior o Log já registra sucesso no processo de idempotência.
Ao tentar realizar um novo Post com a mesma chave anterior o comando duplicado já é negado automaticamente.
Nesse artigo você observou como é fácil implementar o recurso de idempotência nos microsserviços desenvolvimento com a plataforma Devprime.
Você tem a disposição configurações adicionais como “Action” que configurado como “manual” exige que você ative em um metodo especifico e/ou a “Scope” que pode limitar a atuação em um Adapter como “Web” ou “Stream”
Mais artigos sobre idempotência
Implementing idempotency in microsserviços
Building an idempotent event-driven microsserviços