DEV Community

Diego Yuri
Diego Yuri

Posted on

2

Idempotência: Conceito e Aplicação na Garantia da Qualidade de Softwar

1. Introdução

Você sabe ou já ouviu falar em idempotência?

Em matemática e ciência da computação, a idempotência é a propriedade que algumas operações têm de poderem ser aplicadas várias vezes sem que o valor do resultado se altere após a aplicação inicial. De acordo com a Wikipedia, isso significa que, após a primeira execução de uma operação idempotente, execuções subsequentes não terão efeito adicional. A idempotência é um conceito crucial na qualidade de software (QA), especialmente em serviços web e APIs, pois garante que sistemas sejam mais confiáveis e robustos.

2. Conceito e Exemplos de Idempotência

Em termos de métodos HTTP, a idempotência refere-se a métodos que podem ser chamados múltiplas vezes sem produzir resultados diferentes. Segundo a W3C, o resultado de uma solicitação executada com sucesso é independente do número de vezes que ela é executada. Por exemplo, em aritmética, adicionar zero a um número é uma operação idempotente, pois não altera o valor original.

No contexto de APIs REST, os seguintes verbos HTTP são considerados idempotentes: GET, PUT, DELETE, HEAD e OPTIONS. Por outro lado, o verbo POST não é idempotente. Métodos idempotentes são seguros, ou seja, não alteram o estado da aplicação, enquanto métodos não idempotentes podem alterar o estado.

3. Idempotência em APIs REST: Exemplos Práticos

POST: O método POST é usado principalmente para criar recursos. Cada requisição POST cria um novo recurso, alterando o estado da aplicação. Por exemplo, suponha que temos um endpoint "/user" que recebe um payload para criar um usuário:

{
    "name": "Lucas",
    "last_name": "Paixão",
    "city": "Araraquara"
}
Enter fullscreen mode Exit fullscreen mode

Cada vez que esse endpoint é chamado, um novo usuário é criado, mudando o estado da aplicação e adicionando um novo registro ao banco de dados. Por isso, POST não é idempotente.

GET: O método GET é usado para recuperar dados. Ele é considerado idempotente porque, independentemente de quantas vezes seja chamado, a resposta será a mesma, sem alterar o estado da aplicação.

PUT: O método PUT é usado para atualizar recursos. Ele é idempotente porque, após a primeira chamada, chamadas subsequentes com o mesmo payload não alteram o estado da aplicação. Por exemplo, se enviarmos um payload para alterar a cidade de "Araraquara" para "São Paulo", a resposta será a mesma em chamadas subsequentes, com o estado da aplicação inalterado após a primeira atualização:

{
    "name": "Lucas",
    "last_name": "Paixão",
    "city": "São Paulo"
}
Enter fullscreen mode Exit fullscreen mode

DELETE: O método DELETE é usado para remover recursos. Ele é idempotente porque, após a primeira chamada que deleta o recurso, chamadas subsequentes não terão efeito adicional, retornando o mesmo resultado. Por exemplo, ao deletar um usuário com "/user?name=Lucas", a primeira chamada remove o usuário e as seguintes confirmam que o recurso não existe mais, sem alterar o estado da aplicação.

4. Importância da Idempotência em APIs REST

A idempotência é crucial para garantir que os serviços que consomem APIs REST funcionem corretamente, mesmo em situações de erro ou duplicação de chamadas. Por exemplo, se ocorrer um timeout, é comum que o serviço faça uma nova chamada ao endpoint. Sem idempotência, chamadas duplicadas podem causar resultados inesperados ou exceções.

Implementar idempotência previne erros e garante que o sistema se comporte de maneira previsível e confiável, mesmo sob condições adversas. Isso é essencial para manter a integridade dos dados e a estabilidade do sistema.

5. Conclusão

Em resumo, a idempotência é um conceito fundamental para a qualidade de software, especialmente em serviços web e APIs. Ela garante que operações possam ser repetidas sem causar efeitos colaterais indesejados, aumentando a confiabilidade e a robustez do sistema. Ao implementar idempotência, prevenimos erros, melhoramos a experiência do usuário e garantimos a consistência dos dados. Portanto, adotar práticas idempotentes é uma estratégia vital na garantia da qualidade de software.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay