language-agnostic - meaning - idempotent translate
¿Qué es una operación idempotente? (15)
Métodos idempotentes
Un método idempotente es un método que producirá los mismos resultados independientemente de cuántas veces se llame.
El método
GET
es idempotente, ya que varias llamadas al recurso GET siempre devolverán la misma respuesta.El método
PUT
es idempotente, ya que llamar al método PUT varias veces actualizará el mismo recurso y no cambiará el resultado.El
POST
no es idempotente, y llamar al método POST varias veces puede tener diferentes resultados y dará lugar a la creación de nuevos recursos.EL
DELETE
es idempotente porque una vez que se elimina el recurso, desaparece y llamar al método varias veces no cambiará el resultado.
¿Qué es una operación idempotente?
En computación, 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 función abs()
es idempotente porque abs(abs(x)) = abs(x)
para todo x
.
Estas definiciones ligeramente diferentes se pueden reconciliar 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 el set
Python y su método de discard
. El método de discard
elimina un elemento de un conjunto y no hace nada si el elemento no existe. Asi que:
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 la solicitud para realizar una operación suceda al menos una vez, pero también puede ocurrir más de una vez. Si la operación es idempotente, entonces no hay daño en realizar la operación dos o más veces.
Vea el artículo de Wikipedia sobre idempotence para más información.
La respuesta anterior tenía algunos ejemplos incorrectos y engañosos. Los comentarios a continuación escritos antes de abril de 2014 se refieren a una revisión anterior.
Es cualquier operación que cada n º resultado dará como resultado una salida que coincida con el valor del primer resultado. Por ejemplo, el valor absoluto de -1 es 1. El valor absoluto del valor absoluto de -1 es 1. El valor absoluto del valor absoluto del valor absoluto de -1 es 1. Y así sucesivamente.
Ver también: ¿Cuándo sería un momento realmente tonto usar la recursión?
Idempotence significa que aplicar una operación una vez o aplicarla varias veces tiene el mismo efecto.
Ejemplos:
- Multiplicación por cero. No importa cuántas veces lo hagas, el resultado sigue siendo cero.
- Estableciendo una bandera booleana. No importa cuántas veces lo hagas, la bandera se mantiene fija.
- Eliminar una fila de una base de datos con un ID determinado. Si lo intentas de nuevo, la fila todavía se ha ido.
Para funciones puras (funciones sin efectos secundarios), la idempotencia implica que f (x) = f (f (x)) = f (f (f (x))) = f (f (f (f (x))) ) = ...... para todos los valores de x
Para funciones con efectos secundarios , la idempotencia implica además que no se causarán efectos secundarios adicionales después de la primera aplicación. Si lo desea, puede considerar el estado del mundo como un parámetro "oculto" adicional a la función.
Tenga en cuenta que en un mundo en el que haya acciones simultáneas en curso, puede encontrar que las operaciones que pensó que eran idempotentes dejan de serlo (por ejemplo, otro hilo podría desarmar el valor de la bandera booleana en el ejemplo anterior). Básicamente, siempre que tenga concurrencia y estado mutable, debe pensar mucho más cuidadosamente acerca de la idempotencia.
La idempotencia es a menudo una propiedad útil en la construcción de sistemas robustos. Por ejemplo, si existe el riesgo de que reciba un mensaje duplicado de un tercero, es útil que el manejador de mensajes actúe como una operación idempotente para que el efecto del mensaje solo ocurra una vez.
Mi 5c: En la integración y en la red, la idempotencia es muy importante. Varios ejemplos de la vida real: Imagine, entregamos datos al sistema de destino. Datos entregados por una secuencia de mensajes. 1. ¿Qué pasaría si la secuencia se mezcla en el canal? (Como siempre hacen los paquetes de red :)). Si el sistema de destino es idempotente, el resultado no será diferente. Si el sistema de destino depende del orden correcto en la secuencia, tenemos que implementar el resecuenciador en el sitio de destino, lo que restablecería el orden correcto. 2. ¿Qué pasaría si hay duplicados de mensajes? Si el canal del sistema de destino no lo reconoce oportunamente, el sistema de origen (o el propio canal) generalmente envía otra copia del mensaje. Como resultado, podemos tener un mensaje duplicado en el lado del sistema de destino. Si el sistema objetivo es idempotente, lo cuida y el resultado no será diferente. Si el sistema de destino no es idempotente, debemos implementar el deduplicador en el lado del sistema de destino del canal.
No importa cuántas veces llame a la operación, el resultado será el mismo.
Respuestas bastante detalladas y técnicas. Simplemente añadiendo una definición simple.
Idempotent = Re-ejecutable
Por ejemplo, no se garantiza que la operación de Create
en sí misma se ejecute sin error si se ejecuta más de una vez. Pero si hay una operación CreateOrUpdate
entonces indica la CreateOrUpdate
(Idempotency).
Solo quería tirar un caso de uso real que demuestre idempotencia. En JavaScript, supongamos que está definiendo un grupo de clases de modelo (como en el modelo MVC). La forma en que esto se implementa a menudo es funcionalmente equivalente a algo como esto (ejemplo básico):
function model(name) {
function Model() {
this.name = name;
}
return Model;
}
A continuación, podría definir nuevas clases como esta:
var User = model(''user'');
var Article = model(''article'');
Pero si intentara obtener la clase de User
través del model(''user'')
, desde algún otro lugar del código, fallaría:
var User = model(''user'');
// ... then somewhere else in the code (in a different scope)
var User = model(''user'');
Esos dos constructores de User
serían diferentes. Es decir,
model(''user'') !== model(''user'');
Para hacerlo idempotente , solo deberías agregar algún tipo de mecanismo de almacenamiento en caché, como este:
var collection = {};
function model(name) {
if (collection[name])
return collection[name];
function Model() {
this.name = name;
}
collection[name] = Model;
return Model;
}
Al agregar el almacenamiento en caché, cada vez que hiciste un model(''user'')
será el mismo objeto, y por lo tanto es idempotente. Asi que:
model(''user'') === model(''user'');
Una operación idempotente es una operación, acción o solicitud que se puede aplicar varias veces sin cambiar el resultado, es decir, el estado del sistema, más allá de la aplicación inicial.
EJEMPLOS (CONTEXTO DE LA APLICACIÓN WEB):
NULLIPOTENT: Si una operación no tiene efectos secundarios, como mostrar información en una página web sin ningún cambio en la base de datos (en otras palabras, solo está leyendo la base de datos), decimos que la operación es NULLIPOTENT. Todos los GET deberían ser nulipotentes. De lo contrario, utilice POST.
IDEMPOTENTE: un mensaje en un sistema de mensajería de correo electrónico se abre y marca como "abierto" en la base de datos. Uno puede abrir el mensaje muchas veces, pero esta acción repetida solo dará como resultado que ese mensaje se encuentre en el estado "abierto". Esta es una operación idempotente.
NO IDEMPOTENTE: Si una operación siempre provoca un cambio en el estado, como POSTAR el mismo mensaje a un usuario una y otra vez, lo que resulta en un nuevo mensaje enviado y almacenado en la base de datos cada vez, decimos que la operación no es IDEMPOTENTE.
Cuando se habla del estado del sistema, obviamente estamos ignorando efectos inevitablemente inofensivos e inevitables como el registro y el diagnóstico.
Una operación idempotente produce el resultado en el mismo estado incluso si lo llama más de una vez, siempre que pase los mismos parámetros.
Una operación idempotente se puede repetir un número arbitrario de veces y el resultado será el mismo que si se hubiera realizado solo una vez. En aritmética, agregar cero a un número es idempotente.
Se habla mucho sobre idempotence en el contexto de los servicios web "RESTful". REST busca aprovechar al máximo HTTP para dar acceso a los programas al contenido web, y por lo general se configura en contraste con los servicios web basados en SOAP, que solo 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 (p. Ej., OBTENGA una imagen jpeg de Flickr) y la operación falla, simplemente puede repetir el GET una y otra vez hasta que la operación sea exitosa. 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 información nueva tantas veces como sea necesario para obtener la confirmación del servicio web. Ponerlo mil veces es lo mismo que PONERlo una vez. De forma similar, BORRAR un recurso REST mil veces es lo mismo que borrarlo una vez. Idempotence hace que sea mucho más fácil construir un servicio web que sea resistente a los errores de comunicación.
Más información: Servicios web RESTful , por Richardson y Ruby (se analiza la idempotencia en la página 103-104), y la disertación del doctorado de Roy Fielding sobre REST . Fielding fue uno de los autores de HTTP 1.1, RFC-2616, que habla de idempotence en la sección 9.1.2 .
Una operación idempotente sobre un conjunto deja a sus miembros sin cambios cuando se aplica una o más veces.
Puede ser una operación unaria como absoluta (x) donde x pertenece a un conjunto de enteros positivos. Aquí absoluto (absoluto (x)) = x.
Puede ser una operación binaria, ya que la unión de un conjunto consigo misma siempre devolvería el mismo conjunto.
aclamaciones
En resumen , las operaciones Idempotent significan que la operación no generará resultados diferentes, independientemente de las veces que realice las operaciones idempotent.
Por ejemplo, de acuerdo con la definición de la especificación de HTTP, GET, HEAD, PUT, and DELETE
son operaciones idempotentes; Sin embargo, POST and PATCH
no lo son. Es por eso que a veces POST es reemplazado por PATCH.
Operaciones idempotentes: operaciones que no tienen efectos secundarios si se ejecutan varias veces.
Ejemplo : una operación que recupera valores de un recurso de datos y dice, lo imprime
Operaciones no idempotentes: operaciones que podrían causar algún daño si se ejecutan varias veces. (A medida que cambian algunos valores o estados)
Ejemplo: una operación que se retira de una cuenta bancaria
reintentar a salvo.
Suele ser la forma más fácil de entender su significado en informática.