¿Cuál es la principal diferencia entre la solicitud PATCH y PUT?

Estoy usando una solicitud PUT en mi aplicación Rails. Ahora, los navegadores han implementado un nuevo verbo HTTP, PATCH . Entonces, quiero saber cuál es la principal diferencia entre las solicitudes PATCH y PUT , y cuándo debemos usar una u otra.

    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?

    Rails parece querer apoyar muchos verbos y agregar algunos verbos que no son compatibles con los navegadores web de forma nativa.

    Aquí hay una lista exhaustiva de verbos http: http://annevankesteren.nl/2007/10/http-methods

    Ahí está 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 del parche (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 al recurso identificado por Request-URI , y también PUEDE tener 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 yo sé, el verbo PATCH no se usa como en las aplicaciones de Rails … Según tengo entendido, el verbo de parche RFC se debe usar para enviar instrucciones de parche, como cuando se hace 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 la entidad completa.

    Imagina que quieres editar un gran archivo. Editas 3 líneas. En lugar de enviar el archivo de vuelta, solo tiene que enviar la diferencia. En el lado positivo, enviar una solicitud de parche podría usarse para fusionar archivos de forma asíncrona. Un sistema de control de versiones podría utilizar potencialmente el verbo PATCH para actualizar el código de forma remota.

    Otro caso de uso posible está relacionado con 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 syntax similar a la de mongodb para $ unset . En realidad, el método utilizado en mongodb para actualizar documentos podría usarse probablemente 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 las 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)

     PUT /users/123/email new.email@example.org 

    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.

     PATCH /users/123 [description of changes] 

    Por qué Patch

    PUT método PUT necesita más ancho de banda o maneja recursos completos en lugar de parcial. Entonces PATCH fue introducido 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 que la entidad incluida 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.

     PATCH /users/123 [ { "op": "replace", "path": "/email", "value": "new.email@example.org" } ] 

    Aquí más información sobre put y patch

    poner
    si quiero cambiar mi nombre, entonces enviar solicitud de actualización

     { "first": "Nazmul", "last": "hasan" } 

    pero aquí tiene un problema es solicitar que cuando quiero enviar solicitud de envío tengo que enviar los dos parámetros que es el first y el last
    por lo tanto, es obligatorio enviar todo el valor nuevamente

    parche :
    solicitud de patch dice. solo envíe los data que desea update y no afectará ni cambiará otros datos.
    así que no hay necesidad de enviar todo el valor de nuevo. solo quiero actualizar mi nombre, así que necesito enviar solo el nombre para actualizar.

    Existen limitaciones en PUT sobre PATCH mientras se realizan las 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 es necesario mencionar todos los campos. PATCH no nos permite modificar un valor en una matriz, o eliminar un atributo o entrada de matriz.

    El método Put y Patch son similares. Pero en los Rails tiene un método diferente. Si queremos actualizar / reemplazar un registro completo, entonces tenemos que usar el método Put. Si queremos actualizar un uso de registro particular, el método de parche.

    Los métodos PUT y PATCH son similares en naturaleza, 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 residía 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 la entidad que reside en el servidor se modificará para producir una versión más nueva.