¿Qué es una operación idempotente?

Resuelto Will asked hace 15 años • 18 respuestas

¿Qué es una operación idempotente?

Will avatar Jul 03 '09 08:07 Will
Aceptado

En informática, una operación idempotente es aquella que no tiene ningún efecto adicional si se llama más de una vez con los mismos parámetros de entrada. Por ejemplo, eliminar un elemento de un conjunto puede considerarse una operación idempotente en el conjunto.

En matemáticas, una operación idempotente es aquella en la que f(f(x)) = f(x) . Por ejemplo, la abs()función es idempotente porque abs(abs(x)) = abs(x)para todos x.

Estas definiciones ligeramente diferentes pueden conciliarse considerando que x en la definición matemática representa el estado de un objeto y f es una operación que puede mutar ese objeto. Por ejemplo, considere Pythonset y su discardmétodo. El discardmétodo elimina un elemento de un conjunto y no hace nada si el elemento no existe. Entonces:

my_set.discard(x)

tiene exactamente el mismo efecto que hacer la misma operación dos veces:

my_set.discard(x)
my_set.discard(x)

Las operaciones idempotentes se utilizan a menudo en el diseño de protocolos de red, donde se garantiza que una solicitud para realizar una operación ocurrirá al menos una vez, pero también puede ocurrir más de una vez. Si la operación es idempotente, entonces no hay ningún daño en realizarla dos o más veces.

Consulte el artículo de Wikipedia sobre idempotencia para obtener más información.


La respuesta anterior tenía anteriormente algunos ejemplos incorrectos y engañosos. Los comentarios a continuación escritos antes de abril de 2014 se refieren a una revisión anterior.

Greg Hewgill avatar Jul 03 '2009 01:07 Greg Hewgill

Una operación idempotente se puede repetir un número arbitrario de veces y el resultado será el mismo que si se hubiera hecho sólo una vez. En aritmética, sumar cero a un número es idempotente.

Se habla mucho de idempotencia en el contexto de los servicios web "RESTful". REST busca aprovechar al máximo HTTP para brindar a los programas acceso al contenido web y, por lo general, se establece en contraste con los servicios web basados ​​en SOAP, que simplemente canalizan servicios de estilo de llamada a procedimiento remoto dentro de solicitudes y respuestas HTTP.

REST organiza una aplicación web en "recursos" (como un usuario de Twitter o una imagen de Flickr) y luego usa los verbos HTTP de POST, PUT, GET y DELETE para crear, actualizar, leer y eliminar esos recursos.

La idempotencia juega un papel importante en REST. Si OBTIENE una representación de un recurso REST (por ejemplo, OBTIENE una imagen jpeg de Flickr) y la operación falla, puede repetir GET una y otra vez hasta que la operación tenga éxito. Para el servicio web, no importa cuántas veces se obtenga la imagen. Del mismo modo, si utiliza un servicio web RESTful para actualizar la información de su cuenta de Twitter, puede PONER la nueva información tantas veces como sea necesario para obtener la confirmación del servicio web. Ponerlo mil veces es lo mismo que ponerlo una vez. De manera similar, ELIMINAR un recurso REST mil veces es lo mismo que eliminarlo una vez. Por lo tanto, la idempotencia hace que sea mucho más fácil construir un servicio web que sea resistente a los errores de comunicación.

Lecturas adicionales: RESTful Web Services , de Richardson y Ruby (la idempotencia se analiza en las páginas 103-104), y la tesis doctoral de Roy Fielding sobre REST . Fielding fue uno de los autores de HTTP 1.1, RFC-2616, que habla de idempotencia en la sección 9.1.2 .

Jim Ferrans avatar Jul 03 '2009 01:07 Jim Ferrans