Tengo este siguiente escenario:
- Un usuario realiza una solicitud GET
/projects/1
y recibe un ETag . - El usuario realiza una solicitud PUT
/projects/1
con el ETag desde el paso 1. - El usuario realiza otra solicitud PUT
/projects/1
con el ETag desde el paso 1.
Normalmente, la segunda solicitud PUT recibiría una respuesta 412, ya que el ETag ahora está obsoleto: la primera solicitud PUT modificó el recurso, por lo que el ETag ya no coincide.
Pero, ¿qué pasa si las dos solicitudes PUT se envían al mismo tiempo (o exactamente una después de la otra)? La primera solicitud PUT no tiene tiempo para procesar y actualizar el recurso antes de que llegue PUT # 2, lo que hace que PUT # 2 sobrescriba PUT # 1. El objetivo del bloqueo optimista es que eso no suceda ...