Principio de idempotencia en los métodos REST

Idempotencia: la ejecución repetida de una petición con los mismos parámetros sobre un mismo recurso tendrá el mismo efecto en el estado de nuestro recurso en el sistema si se ejecuta 1 o N veces.

En este artículo abordaremos un tema importante para el desarrollo basado en servicios REST, la idempotencia de los métodos, según adictosaltrabajo.com podemos definir idempotencia como:

Idempotencia: la ejecución repetida de una petición con los mismos parámetros sobre un mismo recurso tendrá el mismo efecto en el estado de nuestro recurso en el sistema si se ejecuta 1 o N veces.

En la imagen siguiente se ilustra esta característica en los métodos REST fundamentales, existen varias bibliografía que defines este tema de forma distinta, en este caso me baso en mi experiencia como desarrollador de API services:

idempotencia de métodos REST

El principio de idempotencia maneja dos escenarios fundamentales:

  • Ejecución de la petición y cambio en el estado del sistema
  • Ejecución de la petición sin variar el estado del sistema

A continuación, abordamos el tema con un ejemplo para cada escenario partiendo de la siguiente entidad:

public class Compra {

               private int id

               private String nombre_producto;

               private int cantidad;

… resto de la clase…

Ejecución de la petición y cambio en el estado del sistema

Ejecución del método POST: api/area1/compras

Parámetros:

{

“nombre_producto”: “tenis”,

“cantidad”:2

 }

El resultado de esta acción sería la creación de una compra de dos tenis, registrándose en la base de datos una compra con estas características, si volvemos a ejecutar el mismo método con los mismos parámetros:

Ejecución del método POST: api/area1/compras

Parámetros:

{

“nombre_producto”: “tenis”,

“cantidad”:2

 }

El resultado sería la creación de una nueva compra de dos tenis, existirían ahora en la base de datos dos compras similares, en cada caso se modificó el estado del sistema, si ejecutamos la misma acción n veces, el resultado sería n nuevos inserciones en la tabla de compras.

Ejecución de la petición sin variar el estado del sistema

Ejecución del método PUT: api/area1/compras/1

Parámetros:

{

“nombre_producto”: “tenis”,

“cantidad”:2

 }

En este caso la ejecución de esta petición no modifica el estado del sistema ya que se refleja en actualización de un recurso, en este caso la compra con id=1, si ejecutáramos n veces la misma petición el resultado sería el mismo, la actualización n veces de la compra con id=1.

Un aspecto importante a tener en cuenta, la idempotencia debe ser implementada, no es un comportamiento nativo de los métodos REST, debemos ser responsables de lograr estos comportamientos a medid que implementamos nuestra API.

Espero te sea útil este artículo, nunca dejes de aprender.