Idempotencia en microsserviços y APIs REST

Implementación de idempotencia en API REST y mycoservice basado en Devprime

Las aplicaciones basadas en la plataforma Devprime ya cuentan con una función de idempotencia automática, que protege los servicios para evitar inclusiones duplicadas.

En este escenario, usaremos una clave de cifrado enviada por la aplicación mediante la API. Para usar la característica, basta con cambiar la configuración en el microservicio basado en Devprime.

Creación de un microservicio para usar en el ejemplo

Utilizaremos un microservicio basado en la plataforma Devprime

Iniciando la configuración de idempotencia

Ajuste de la idempotencia en el interruptor “Devprime_App”
Cambie la configuración de Idempotencia a “Habilitado” a “verdadero” y el “Flujo” a “frontend”. Cambiamos la “clave” por “mi-clave-de-idempotencia”. Con esta configuración, la API requerirá la clave de idempotencia en Headar.
code .\src\app\appsettings.json

1
2
3
4
5
6
7
8
9
    "Idempotency": {
      "Enable": "true",
      "Alias": "State2",
      "Duration": "86400",
      "Flow": "frontend",
      "key": "my-idempotency-key",
      "Scope": "all",
      "Action": "auto"
    }

Incluir una segunda persistencia en la tecla “Devprime_State”
En este ejemplo, usaremos un Redis local con una contraseña predeterminada
code .\src\app\appsettings.json

1
2
3
4
5
6
7
8
9
{
  "enable": "true",
  "alias": "State2",
  "dbtype": "redis",
  "connection": "127.0.0.1:6379,password=LltF8Nx*yo",
  "timeout": "5",
  "retry": "2",
  "durationofbreak": "45"
}

Inicio de la idempotencia automática en el microservicio

Ahora es el momento de probar la configuración. Antes de iniciar el microservicio, asegúrese de que ha habilitado los contenedores y ha creado la cola en RabbitMQ.

Ejecute la aplicación y publique a través de la API de pedidos
Necesitamos pasar la clave de idempotencia a través de Head en este escenario, por lo que debe consumir la API usando curl, podtman, insomnia y muchos otros.

Inicio del microservicio configurado para usar una clave de idempotencia
Clave de idempotencia de las capacidades de Devprime `

Un ejemplo de código json para su uso en la API. Modifique en sus pruebas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "customerName": "Bill",
  "customerTaxID": "string",
  "itens": [
    {
      "description": "short",
      "amount": 1,
      "sku": "XNY1AC",
      "price": 100
    }
  ],
  "total": 100
}

En la primera prueba, no pasaremos la clave de idempotencia en POST, como en el ejemplo de Postman.
Clave de idempotencia de las capacidades de Devprime

Al mirar el retorno de la API tendremos una petición negativa debido a la ausencia de la clave que en la configuración con el “Flow” de tipo “Backend” es obligatoria y debe pasarse por el Header.
Clave de idempotencia de las capacidades de Devprime

Ahora agreguemos nuestra clave “my-idempotency-key” y un valor guid.
Clave de idempotencia de las capacidades de Devprime

Después de confirmar la publicación en el paso anterior, el registro ya registra el éxito en el proceso de idempotencia.
Clave de idempotencia de las capacidades de Devprime

Al intentar realizar una nueva publicación con la misma clave anterior, el comando duplicado ya se deniega automáticamente.
Clave de idempotencia de las capacidades de Devprime

En este artículo, ha señalado lo fácil que es implementar la función de idempotencia en microservicios desarrollados con la plataforma Devprime.

Tiene a su disposición configuraciones adicionales como “Acción” que configurada como “Manual” requiere que active en un método específico y/o “Alcance” que puede limitar la acción en un Adaptador como “Web” o “Stream”

Más artículos sobre idempotencia

Implementación de la idempotencia en microservicios
Creación de microservicios idempotentes basados en eventos

Última modificación January 10, 2024 (967dcac3)