Los verbos HTTP son probablemente una de las cosas más crípticas sobre el protocolo HTTP. Existen, y hay muchos de ellos, pero ¿por qué existen?
Parece que Rails quiere admitir muchos verbos y agregar algunos verbos que no son compatibles con navegadores web de forma nativa.
Aquí hay una lista exhaustiva de verbos http: http://annevankesteren.nl/2007/10/http-methods
Hay el parche HTTP del RFC oficial: https://datatracker.ietf.org/doc/rfc5789/?include_text=1
El método PATCH solicita que se aplique un conjunto de cambios descritos en la entidad de solicitud al recurso identificado por el URI de solicitud. El conjunto de cambios se representa en un formato llamado "documento de parche" identificado por un tipo de medio. Si el URI de solicitud no apunta a un recurso existente, el servidor PUEDE crear un nuevo recurso, dependiendo del tipo de documento de revisión (si puede modificar lógicamente un recurso nulo) y permisos, etc.
La diferencia entre las solicitudes PUT y PATCH se refleja en la forma en que el servidor procesa la entidad adjunta para modificar el recurso identificado por el URI de solicitud. En una solicitud PUT , la entidad adjunta se considera una versión modificada del recurso almacenado en el servidor de origen, y el cliente solicita que se reemplace la versión almacenada. Sin embargo, con PATCH , la entidad adjunta contiene un conjunto de instrucciones que describen cómo se debe modificar un recurso que actualmente reside en el servidor de origen para producir una nueva versión. El
método PATCH afecta el recurso identificado por el URI de solicitud , y también
PUEDEtener efectos secundarios en otros recursos; es decir, se pueden crear nuevos recursos o modificar los existentes mediante la aplicación de un PATCH .
Hasta donde sé, el verbo PATCH no se usa como en las aplicaciones de rieles ... Según tengo entendido, el verbo de parche RFC debería usarse para enviar instrucciones de parche como cuando haces una diferencia entre dos archivos. En lugar de enviar toda la entidad nuevamente, envía un parche que podría ser mucho más pequeño que reenviar toda la entidad.
Imagina que quieres editar un archivo enorme. Editas 3 líneas. En lugar de devolver el archivo, solo tiene que enviar el diff. En el lado positivo, el envío de una solicitud de parche podría usarse para fusionar archivos de forma asincrónica. Un sistema de control de versiones podría utilizar el verbo PATCH para actualizar el código de forma remota.
Otro posible caso de uso está algo relacionado con las bases de datos NoSQL, es posible almacenar documentos. Digamos que usamos una estructura JSON para enviar datos de ida y vuelta desde el servidor al cliente. Si quisiéramos eliminar un campo, podríamos usar una sintaxis similar a la de mongodb para $ unset . En realidad, el método utilizado en mongodb para actualizar documentos probablemente podría usarse para manejar parches json.
Tomando este ejemplo:
db.products.update(
{ sku: "unknown" },
{ $unset: { quantity: "", instock: "" } }
)
Podríamos tener algo como esto:
PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }
Por último, pero no menos importante, las personas pueden decir lo que quieran sobre los verbos HTTP. Solo hay una verdad, y la verdad está en los RFC.
Pasé un par de horas con google y encontré la respuesta aquí
PUT => Si el usuario puede actualizar todo o solo una parte del registro , use PUT (el usuario controla lo que se actualiza)
PATCH => Si el usuario solo puede actualizar un registro parcial , digamos solo una dirección de correo electrónico (la aplicación controla lo que se puede actualizar), use PATCH.
Por qué
Patch
PUT
El método necesita más ancho de banda o manejar recursos completos en su lugar en parcial. AsíPATCH
se introdujo para reducir el ancho de banda.Explicación sobre PATCH
PATCH
es un método que no es seguro, ni idempotente, y permite actualizaciones completas y parciales y efectos secundarios en otros recursos.PATCH
es un método cuya entidad adjunta contiene un conjunto de instrucciones que describen cómo se debe modificar un recurso que actualmente reside en el servidor de origen para producir una nueva versión.Aquí más información sobre put y patch
fuente
PATCH
entrePOST
,PUT
etc. no es "seguro", ya que modifica sus datos (tiene efectos secundarios). En comparación conGET
,OPTIONS
etc. (métodos seguros) donde puede llamar a los puntos finales varias veces sin ningún efecto secundario.puesto
que si quiero cambiar mi
first
nombre a continuación, enviar puesto solicitud de actualizaciónpero aquí tiene un problema es
put
la solicitud que cuando quiero enviarput
solicitud tengo que enviar todos los dos parámetros que esfirst
ylast
por lo que es obligatorio para enviar todo el valor de nuevo
parche :
patch
solicitud dice. solo envíe eldata
que deseeupdate
y no afectará ni cambiará otros datos.así que no es necesario enviar todo el valor nuevamente. solo quiero actualizar mi nombre, así que necesito enviar solo el
first
nombre para actualizar.fuente
Aquí están las diferencias entre los métodos POST, PUT y PATCH de un protocolo HTTP.
ENVIAR
Un método HTTP.POST siempre crea un nuevo recurso en el servidor. Es una solicitud no idempotente, es decir, si el usuario recibe las mismas solicitudes 2 veces, crearía otro recurso nuevo si no hay restricción.
El método de publicación http es como una consulta INSERT en SQL que siempre crea un nuevo registro en la base de datos.
Ejemplo: utilice el método POST para guardar un nuevo usuario, pedido, etc., donde el servidor de fondo decide la identificación del recurso para el nuevo recurso.
PONER
En el método HTTP.PUT, el recurso se identifica primero desde la URL y, si existe, se actualiza; de lo contrario, se crea un nuevo recurso. Cuando el recurso objetivo existe, sobrescribe ese recurso con un nuevo cuerpo completo. Ese es el método HTTP.PUT se utiliza para CREAR o ACTUALIZAR un recurso.
El método http put es como una consulta MERGE en SQL que inserta o actualiza un registro dependiendo de si existe el registro dado.
La solicitud PUT es idempotente, es decir, golpear las mismas solicitudes dos veces actualizaría la grabación existente (no se creó ningún registro nuevo). En el método PUT, el cliente decide la identificación del recurso y se proporciona en la url de solicitud.
Ejemplo: utilice el método PUT para actualizar el usuario u orden existente.
PARCHE
Se utiliza un método HTTP.PATCH para modificaciones parciales de un recurso, es decir, actualizaciones delta.
El método de parche http es como una consulta de ACTUALIZACIÓN en SQL que establece o actualiza las columnas seleccionadas únicamente y no toda la fila.
Ejemplo: podría usar el método PATCH para actualizar el estado del pedido.
PATCH / api / users / 40450236 / order / 10234557
Cuerpo de solicitud: {estado: 'Entregado'}
fuente
Existen limitaciones en PUT over PATCH al realizar actualizaciones. El uso de PUT requiere que especifiquemos todos los atributos, incluso si queremos cambiar solo un atributo. Pero si usamos el método PATCH podemos actualizar solo los campos que necesitamos y no hay necesidad de mencionar todos los campos. PATCH no nos permite modificar un valor en una matriz o eliminar un atributo o entrada de matriz.
fuente
Los métodos PUT y PATCH son de naturaleza similar, pero hay una diferencia clave.
PUT : en la solicitud PUT , la entidad adjunta se consideraría como la versión modificada de un recurso que reside en el servidor y sería reemplazada por esta entidad modificada.
PATCH : en la solicitud PATCH , la entidad adjunta contiene el conjunto de instrucciones sobre cómo se modificaría la entidad que reside en el servidor para producir una versión más nueva.
fuente
De acuerdo con los términos HTTP, la
PUT
solicitud es como una declaración de actualización de la base de datos.PUT
- se utiliza para modificar el recurso existente (previamente PUBLICADO). Por otro lado, laPATCH
solicitud se utiliza para actualizar una parte del recurso existente.Por ejemplo:
Detalles del cliente:
¿Cuándo queremos actualizar a todo el registro? tenemos que usar
Http
PUT
verb
para eso.como:
Por otro lado, si queremos actualizar solo la parte del registro, no el registro completo, entonces vamos por
Http
PATCH
verb
. como:PONER VS POST:
Al usar
PUT
request, debemos enviar todos los parámetros, como firstName, lastName, email, phoneNumber Where como Inpatch
request, solo enviamos los parámetros que queremos actualizar y no afectará ni cambiará otros datos.Para obtener más detalles, visite: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/
fuente
El método Put y Patch son similares. Pero en rails tiene un método diferente. Si queremos actualizar / reemplazar todo el registro, entonces tenemos que usar el método Put. Si queremos actualizar un registro particular, use el método Patch.
fuente