¿Qué métodos HTTP coinciden con qué métodos CRUD?


En la programación de estilo RESTful, debemos usar los métodos HTTP como nuestros bloques de construcción. Estoy un poco confundido, aunque los métodos coinciden con los métodos CRUD clásicos. GET / Read y DELETE/Delete son bastante obvios.

Sin embargo, ¿cuál es la diferencia entre PUT/POST? ¿Coinciden uno a uno con Crear y Actualizar?

Author: Drew, 2011-06-01

9 answers

Create = PUT with a new URI
         POST to a base URI returning a newly created URI
Read   = GET
Update = PUT with an existing URI
Delete = DELETE

PUT puede asignar tanto a Create como a Update dependiendo de la existencia del URI utilizado con el PUT.

PUBLICAR mapas para Crear.

Corrección: POST también puede mapear para Actualizar aunque normalmente se usa para Crear. POST también puede ser una actualización parcial por lo que no necesitamos el método de PARCHE propuesto.

 271
Author: Paul Morgan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 14:13:40

La clave completa es si estás haciendo un cambio idempotente o no. Es decir, si tomar acción sobre el mensaje dos veces resultará en que "lo mismo" esté allí como si solo se hiciera una vez, tiene un cambio idempotente y debe mapearse para PUT. Si no, mapas para PUBLICAR. Si nunca permite que el cliente sintetice URLs, PUT está bastante cerca de Actualizar y POST puede manejar Create muy bien, pero esa no es la única manera de hacerlo; si el cliente sabe que quiere para crear /foo/abc y saber qué contenido poner allí, funciona bien como PUT.

La descripción canónica de un POST es cuando estás comprometiéndote a comprar algo: esa es una acción que nadie quiere repetir sin saberlo. Por el contrario, establecer la dirección de envío para el pedido de antemano se puede hacer con PUT just fine: no importa si se le dice que envíe a 6 Anywhere Dr, Nowhereville una, dos o cien veces: sigue siendo la misma dirección. ¿Eso significa que es una actualización? Podría todo depende de cómo quieras escribir el back-end. (Tenga en cuenta que los resultados pueden no ser idénticos: puede informar al usuario la última vez que hizo un PUT como parte de la representación del recurso, lo que aseguraría que los PUTs repetidos no causen un resultado idéntico, pero el resultado seguiría siendo "el mismo" en un sentido funcional.)

 46
Author: Donal Fellows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-01 15:23:28

Estaba buscando la misma respuesta, esto es lo que dice IBM. IBM Link

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
 29
Author: ex0b1t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-01 13:47:11

Hay una gran charla de video de youtube de stormpath con realmente explica esto, la URL debe saltar a la parte correcta del video:

Stormpath youtube video

También vale la pena ver que es más de una hora de hablar, pero muy interesante si su pensamiento de invertir tiempo en la construcción de una api REST.

 9
Author: pleshy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-28 16:38:33

Depende de la situación concreta.. pero en general:

PUT = actualizar o cambiar un recurso concreto con un URI concreto del recurso.

POST = crear un nuevo recurso bajo la fuente del URI dado.

Es decir,

Editar una entrada de blog:

PONER: / blog / entry / 1

Crea uno nuevo:

POST: /blog / entrada

PUT puede crear un nuevo recurso en algunas circunstancias en las que el URI del nuevo recurso está claro antes del solicitud. POST se puede utilizar para implementar varios otros casos de uso, también, que no están cubiertos por los otros (GET, PUT, DELETE, HEAD, OPTIONS)

El entendimiento general para los sistemas CRUD es GET = request, POST = create, Put = update, DELETE = delete

 7
Author: Stuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-01 15:06:03

En este momento (2016) los últimos verbos HTTP son GET, POST, PATCH , PUT y DELETE

Descripción general

  • HTTP GET-SELECT / Request
  • HTTP PUT-UPDATE
  • HTTP POST-INSERT / Create
  • HTTP REVISIÓN - {Cuando[16]}PONERting una completa representación de recurso es engorroso y utiliza más ancho de banda, por ejemplo: cuando tienes que actualizar parcialmente una columna
  • HTTP DELETE-DELETE

Espero que esto ayude!

Si usted es interesado en el diseño de API REST esta es una lectura ansewome tener! versión en línea del sitio web github repositorio

 7
Author: d1jhoni1b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-04 02:03:47

Los bloques de construcción de REST son principalmente los recursos (y URI) y la hipermedia. En este contexto, GET es la forma de obtener una representación del recurso (que de hecho se puede asignar a un SELECT en términos CRUD).

Sin embargo, no debe esperar necesariamente una asignación uno a uno entre las operaciones CRUD y los verbos HTTP. La principal diferencia entre PUT y POST es acerca de su propiedad idempotente. POST también se usa más comúnmente para actualizaciones parciales, ya que PUT generalmente implica envío de una nueva representación completa del recurso.

Sugiero leer esto:

La especificación HTTP también es una referencia útil:

El método PUT solicita que el entidad se almacenan bajo la solicitud suministrada-URI.

[...]

La diferencia fundamental entre la POST y PUT solicitudes se refleja en el significado diferente de la Solicitud-URI. El URI en una solicitud POST identifica el recurso que se manejar la entidad encerrada. Que el recurso puede ser una aceptación de datos proceso, una puerta de entrada a algún otro protocolo, o una entidad separada que acepta anotaciones. En contraste, el URI en una solicitud PUT identifica la entidad adjunta a la solicitud -- el agente de usuario sabe qué es URI destinado y el servidor NO DEBE intentar aplicar la solicitud a algunos otro recurso. Si el servidor lo desea que la solicitud se aplique a un URI diferente,

 4
Author: Bruno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-01 15:15:55

En términos generales, este es el patrón que uso:

  • HTTP GET-SELECT / Request
  • HTTP PUT-UPDATE
  • HTTP POST-INSERT / Create
  • HTTP DELETE-DELETE
 3
Author: AJ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-01 15:00:52

El proyecto Symfony intenta mantener sus métodos HTTP unidos a los métodos CRUD, y su lista los asocia de la siguiente manera:

  • GET Recupera el recurso del servidor
  • PUBLICAR Crear un recurso en el servidor
  • PONER Actualizar el recurso en el servidor
  • ELIMINAR Eliminar el recurso del servidor

Vale la pena señalar que, como se dice en esa página, " En realidad, muchos navegadores modernos no admiten el PUT y DELETE método."

Por lo que recuerdo, Symfony "fakes" PUT and DELETE para aquellos navegadores que no los soportan al generar sus formularios, con el fin de tratar de estar lo más cerca de usar el método HTTP teóricamente correcto incluso cuando un navegador no lo soporta.

 1
Author: Matt Gibson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-01 15:04:27