argob / estandares

Estándares de Servicios Digitales
MIT License
92 stars 48 forks source link

Soporte de método HTTP PATCH para actualizaciones parciales #11

Closed lalloni closed 5 years ago

lalloni commented 5 years ago

Actualmente utilizamos el método PATCH (rfc5789) para permitir realizar actualizaciones parciales de recursos.

Es decir, mientras que PUT requiere que se envíe el recurso completo, PATCH permite que se envíen solo los aquellos campos o partes del recurso que se quiere actualizar. Esto representa una gran ventaja para recursos de granularidad gruesa (como recomienda el estilo ReST) ya que permite evitar el envío de todo el documento cuando se desea actualizar solo una pequeña porción.

Aún en un ejemplo simplificado se puede apreciar el beneficio de poder enviar:

PATCH /persona/23535

{"edad":25}

Comparado con:

PUT /persona/23535

{
  "nombre": "pedro josé",
  "edad":20,
  "domicilio": {
    "calle":"blabla",
    "numero":3132,
    "piso":3,
    "departamento":"x",
    "localidad":"xxx"
  },
  "identidad": [
    {
    "tipo":"xxx",
    "identificador":"23423424",
    "vigencia": {
      "desde":"20100101",
      "hasta":"20181231"
    }
    ]
  }
}

Si lo único que se desea es actualizar la edad.

Semánticamente, en el caso de PATCH, se actualizará solo el campo "edad" con el nuevo valor, dejando todo lo demás en su estado preexistente en el recurso.

Si fuera necesario, se pueden utilizar los headers estándar If-Match/Etag para implementar optimistic locking.

Si bien en este proyecto ya se ha tocado el tema (#10, #3), no encuentro una decisión al respecto y creo que sería muy valiosa su incorporación.

lalloni commented 5 years ago

Cierro el issue dado que se aceptó #12.