¿Cuál es la diferencia entre PUT, POST y PATCH? [cerrado]

280

¿Cuál es la diferencia entre los métodos PUT, POST y PATCH en el protocolo HTTP?

selva kumar
fuente
44
posible duplicado de PUT vs POST en REST
Nowhere man
12
Usar cualquier cosa que no sea GET / POST es una locura en las API web modernas. Demasiados lo hacen. Los URI identificados en la mayoría de las aplicaciones modernas NO SON recursos para ser reemplazados, actualizados, etc. No son documentos. Son PROCEDIMIENTOS llamados. El URI en sí rara vez identifica un recurso real, que no sea el método que se invoca. Por lo tanto, use GET para solicitudes de cadena de consulta y POST cuando necesite publicar datos o archivos JSON en el cuerpo de la solicitud. En mi opinión, cualquier otra cosa está tratando de calzar conceptos obsoletos que involucran URI y operaciones en documentos HTML estáticos en una nueva arquitectura que no se parece en nada.
Triynko
1
Todas excelentes respuestas. Solo quería compartir mi respuesta sobre las diferencias y cuándo debe usar cada una.
Entrena el
@Triynko Y los procedimientos a los que se refiere implican la creación , eliminación y modificación de recursos. No hay mejor manera de transmitir tales ideas que ser RESTful. Por qué no?
Константин Ван

Respuestas:

201

Diferencia entre PUT, POST, GET, DELETE y PATCH IN HTTP Verbs:

Los verbos HTTP más utilizados POST, GET, PUT, DELETE son similares a las operaciones CRUD (Crear, Leer, Actualizar y Eliminar) en la base de datos. Especificamos estos verbos HTTP en mayúsculas . Entonces, la siguiente es la comparación entre ellos.

  1. crear - PUBLICAR
  2. leer - OBTENER
  3. actualización - PUT
  4. eliminar - BORRAR

PARCHE: envía una modificación parcial a un recurso. Si solo necesita actualizar un campo para el recurso, puede utilizar el método PATCH.

Nota:
Dado que POST, PUT, DELETE modifica el contenido, las pruebas con Fiddler para la siguiente URL solo imitan las actualizaciones. No elimina o modifica en realidad. Solo podemos ver los códigos de estado para verificar si se producen inserciones, actualizaciones o eliminaciones.

URL: http://jsonplaceholder.typicode.com/posts/

1) OBTENER:

GET es el tipo más simple de método de solicitud HTTP; el que usan los navegadores cada vez que haces clic en un enlace o escribes una URL en la barra de direcciones. Le indica al servidor que transmita los datos identificados por la URL al cliente. Los datos nunca deben modificarse en el lado del servidor como resultado de una solicitud GET. En este sentido, una solicitud GET es de solo lectura.

Verificación con Fiddler o PostMan: podemos usar Fiddler para verificar la respuesta. Abra Fiddler y seleccione la pestaña Componer. Especifique el verbo y la url como se muestra a continuación y haga clic en Ejecutar para verificar la respuesta.

Verbo: OBTENER

url: http://jsonplaceholder.typicode.com/posts/

Respuesta: Obtendrá la respuesta como:

"userId": 1, "id": 1, "title": "sunt aut ...", "body": "quia et suscipit ..."

En la ruta "feliz" (o sin errores), GET devuelve una representación en XML o JSON y un código de respuesta HTTP de 200 (OK). En un caso de error, a menudo devuelve un 404 (NO ENCONTRADO) o 400 (SOLICITUD MALA).

2) POST:

El verbo POST se utiliza principalmente para crear nuevos recursos. En particular, se usa para crear recursos subordinados. Es decir, subordinado a algún otro recurso (por ejemplo, padre).

En la creación exitosa, devuelva el estado HTTP 201, devolviendo un encabezado de ubicación con un enlace al recurso recién creado con el estado HTTP 201.

Verificación con Fiddler o PostMan: podemos usar Fiddler para verificar la respuesta. Abra Fiddler y seleccione la pestaña Componer. Especifique el verbo y la url como se muestra a continuación y haga clic en Ejecutar para verificar la respuesta.

Verbo: POST

url: http://jsonplaceholder.typicode.com/posts/

Cuerpo de solicitud:

data: {title: 'foo', body: 'bar', userId: 1000, Id: 1000}

Respuesta: Recibiría el código de respuesta como 201.

Si queremos verificar el registro insertado con Id = 1000, cambie el verbo Obtener y use la misma url y haga clic en Ejecutar.

Como se dijo anteriormente, la url anterior solo permite lecturas (GET), no podemos leer los datos actualizados en real.

3) PONER:

PUT se utiliza con mayor frecuencia para capacidades de actualización , PUT -ING a un URI de recurso conocido con el cuerpo de solicitud que contiene la representación recientemente actualizada del recurso original.

Verificación con Fiddler o PostMan: podemos usar Fiddler para verificar la respuesta. Abra Fiddler y seleccione la pestaña Componer. Especifique el verbo y la url como se muestra a continuación y haga clic en Ejecutar para verificar la respuesta.

Verbo: PONER

url: http://jsonplaceholder.typicode.com/posts/1

Cuerpo de solicitud:

data: {title: 'foo', body: 'bar', userId: 1, Id: 1}

Respuesta: En una actualización exitosa, devuelve 200 (o 204 si no devuelve ningún contenido en el cuerpo) de un PUT.

4) BORRAR:

ELIMINAR es bastante fácil de entender. Se utiliza para eliminar un recurso identificado por un URI.

En caso de eliminación exitosa, devuelva el estado HTTP 200 (OK) junto con un cuerpo de respuesta, tal vez la representación del elemento eliminado (a menudo exige demasiado ancho de banda) o una respuesta envuelta (consulte Valores de retorno a continuación). O eso o devolver el estado HTTP 204 (SIN CONTENIDO) sin cuerpo de respuesta. En otras palabras, un estado 204 sin cuerpo, o la respuesta de estilo JSEND y el estado HTTP 200 son las respuestas recomendadas.

Verificación con Fiddler o PostMan: podemos usar Fiddler para verificar la respuesta. Abra Fiddler y seleccione la pestaña Componer. Especifique el verbo y la url como se muestra a continuación y haga clic en Ejecutar para verificar la respuesta.

Verbo: BORRAR

url: http://jsonplaceholder.typicode.com/posts/1

Respuesta: Al eliminar con éxito, devuelve el estado HTTP 200 (OK) junto con un cuerpo de respuesta.

Ejemplo entre PUT y PATCH

PONER

Si tuviera que cambiar mi nombre, envíe la solicitud PUT para actualización:

{"first": "Nazmul", "last": "hasan"} Entonces, aquí para actualizar el nombre necesitamos enviar todos los parámetros de los datos nuevamente.

PARCHE:

La solicitud de parche dice que solo enviaríamos los datos que necesitamos modificar sin modificar o afectar otras partes de los datos. Ej: si necesitamos actualizar solo el primer nombre, solo pasamos el primer nombre.

Consulte los enlaces a continuación para obtener más información:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

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

http://www.restapitutorial.com/lessons/httpmethods.html

Krishna
fuente
62
PUT no se actualiza. PUT es crear o reemplazar la entidad en el URI dado. Según la especificación HTTP, PUT es idempotente. Sí, se puede usar para actualizar, pero pensar solo como actualización no es correcto.
Maladon el
2
Estoy de acuerdo en que PUT no se actualiza, se puede asignar con reemplazar, porque cuando envía PUT, anula el recurso existente. Pero si enviamos PATCH, solo reemplazará las entradas especificadas.
Atul Chavan
1
Debido a que PUT también se puede usar para crear, no estoy seguro de cómo su respuesta indica qué debo usar.
Rob P.
1
Esta respuesta es mucho mejor, pero no se compara con PATCH: stackoverflow.com/a/630475/2391795
Vadorequest
11

La siguiente definición es del ejemplo del mundo real.

Descripción general del ejemplo
Para cada dato de cliente, estamos almacenando un identificador para encontrar los datos de ese cliente y enviaremos ese identificador a ese cliente para referencia.

  1. ENVIAR

    • Si el Cliente envía datos sin ningún identificador utilizando el método POST, los almacenaremos y le asignaremos un nuevo identificador.
    • Si el Cliente vuelve a enviar los mismos datos sin ningún identificador utilizando el método POST, los almacenaremos y le asignaremos un nuevo identificador.
    • Nota : la duplicación está permitida aquí
  2. PONER

    • Si el cliente envía datos con un identificador, verificaremos si ese identificador existe. Si el identificador existe, actualizaremos los datos; de lo contrario, lo crearemos y asignaremos un nuevo identificador.
  3. PARCHE

    • Si el cliente envía datos con un identificador, verificaremos si ese identificador existe. Si el identificador existe, actualizaremos los datos; de lo contrario, lanzaremos una excepción.

Nota: En el Método Put , no estamos lanzando una excepción si no se encuentra un identificador. Pero en el método Patch , estamos lanzando una excepción si no se encuentra el identificador.

Avíseme si tiene alguna consulta sobre lo anterior.

Yokesh Waran
fuente
8

Tipos de solicitud

  • crear - PUBLICAR
  • leer - OBTENER
  • crear o actualizar - PONER
  • eliminar - BORRAR
  • actualización - PARCHE

GET / PUT es idempotente PARCHE puede ser a veces idempotente

Lo que es idempotente: significa que si disparamos la consulta varias veces, no debería afectar el resultado de la misma (mismo resultado. Supongamos que una vaca está preñada y si la criamos de nuevo, no se puede embarazar varias veces)

get : -

simple obtener. Obtenga los datos del servidor y muéstrelos al usuario

{
id:1
name:parth
email:x@x.com
}

post : -

crear un nuevo recurso en la base de datos. Significa que agrega nuevos datos. No es idempotente.

put : -

Cree un nuevo recurso, de lo contrario, agréguelo a los existentes. Idempotente porque actualizará el mismo recurso cada vez y la salida será la misma. ex. - datos iniciales

{
id:1
name:parth
email:x@x.com
}
{
id:1
email:ppp@ppp.com
}

patch

así que ahora llegó la solicitud de parche PATCH puede ser a veces idempotente

id:1
name:parth
email:[email protected]
}

nombre del parche: w

{
id:1
name:w
email:x@x.com
}
Método HTTP
OBTENER SI
Publicar no
PONER sí
PARCHE no *
OPCIONES si
CABEZA si
BORRAR sí

Recursos: Idempotente - ¿Qué es la idempotencia?

Parth Patel
fuente
¿Qué significa realmente "a veces" idempotente? ¿Qué determina la idempotencia?
Polv
7

Aquí hay una descripción simple de todo:

  • POST es siempre para crear un recurso (no importa si fue duplicado)
  • PUT es para verificar si existe un recurso y luego actualizar, de lo contrario crear un nuevo recurso
  • PATCH siempre es para actualizar un recurso
a_m_dev
fuente
5

Diferencia principal entre las solicitudes PUT y PATCH :

Supongamos que tenemos un recurso que contiene el nombre y el apellido de una persona.

Si queremos cambiar el nombre, enviamos una solicitud de actualización.

{ "first": "Michael", "last": "Angelo" }

Aquí, aunque solo estamos cambiando el nombre, con la solicitud PUT tenemos que enviar ambos parámetros primero y último.
En otras palabras, es obligatorio enviar todos los valores nuevamente, la carga útil completa.

Sin embargo, cuando enviamos una solicitud PATCH, solo enviamos los datos que queremos actualizar. En otras palabras, solo enviamos el nombre para actualizar, no es necesario enviar el apellido.

principiantes
fuente
2

Es bastante lógica la diferencia entre PUT y PATCH wrt enviando datos completos y parciales para reemplazar / actualizar respectivamente. Sin embargo, solo un par de puntos como a continuación

  1. A veces, POST se considera como actualizaciones wrt PUT para crear
  2. ¿HTTP manda / verifica el envío de datos completos o parciales en PATCH? De lo contrario, PATCH puede ser muy similar a la actualización como en PUT / POST
agrawal varonil
fuente
2

Piénsalo de esta manera...

POST - crear

PUT - reemplazar

PARCHE - actualización

OBTENER - leer

BORRAR - borrar

Kwame Opare Asiedu
fuente
2
Probablemente agregaría esta distinción : " PONER si el cliente determina la dirección del recurso resultante, POSTAR si el servidor lo hace "
ruffin
1

La explicación más simple:

POST - Crear NUEVO registro

PUT: si el registro existe, actualice más, cree un nuevo registro

PARCHE - actualización

OBTENER - leer

BORRAR - borrar

Sahibzada Abdul Hadi
fuente
¿Cómo es esto sustancialmente diferente de la respuesta de Kwame publicada unas dos semanas antes que la tuya?
ruffin