En la programación de estilo RESTful, debemos usar métodos HTTP como nuestros bloques de construcción. Sin embargo, estoy un poco confundido sobre qué métodos coinciden con los métodos CRUD clásicos. GET / Read y DELETE / Delete son lo suficientemente obvios.
Sin embargo, ¿cuál es la diferencia entre PUT / POST? ¿Coinciden uno a uno con Crear y actualizar?
http
rest
crud
http-method
Dibujó
fuente
fuente
La clave es si estás haciendo un cambio idempotente o no. Es decir, si tomar medidas sobre el mensaje dos veces resultará en que "lo mismo" esté allí, como si solo se hiciera una vez, usted tiene un cambio idempotente y debe asignarse a PUT. Si no, se asigna a POST. Si nunca permite que el cliente sintetice URL, PUT está bastante cerca de Actualizar y POST puede manejar Crear bien, pero esa no es la única forma de hacerlo; Si el cliente sabe que quiere crear
/foo/abc
y sabe qué contenido poner allí, funciona bien como PUT.La descripción canónica de un POST es cuando te comprometes a comprar algo: esa es una acción que nadie quiere repetir sin saberlo. Por el contrario, configurar la dirección de envío para el pedido de antemano se puede hacer con PUT bien: no importa si le dicen que envíe
6 Anywhere Dr, Nowhereville
una, dos o cien veces: sigue siendo la misma dirección. ¿Eso significa que es una actualización? Podría ser ... Todo depende de cómo quieras escribir el back-end. (Tenga en cuenta que los resultados pueden no ser idénticos: podría informar al usuario la última vez que realizó un PUT como parte de la representación del recurso, lo que garantizaría que los PUT repetidos no causen un resultado idéntico, pero el resultado aún ser "lo mismo" en un sentido funcional.)fuente
POST
yPUT
es interesante, y debería responder a "¿Cuál es 'crear' y cuál es 'actualizar'?" mucho más claro Además, con respecto a la implementación de la API, se deduciría que un repetitivoPUT
debería equivaler a un no-op silencioso, mientras que un repetitivoPOST
podría arrojar una excepción si se supone que algún aspecto de los datos enviados se mantiene único en el almacén de datos. eso respalda la aplicación.Estaba buscando la misma respuesta, esto es lo que dice IBM. Enlace de IBM
fuente
En este momento (2016) los últimos verbos HTTP son GET, POST, PATCH , PUT y DELETE
Visión general
¡Espero que esto ayude!
Si está interesado en diseñar API REST, ¡esta es una lectura increíble! sitio web versión en línea repositorio github
fuente
Hay una gran conversación de video de YouTube con Stormpath que en realidad explica esto, la URL debe saltar a la parte correcta del video:
tormentoso video de youtube
También vale la pena verlo, es más de una hora de conversación pero muy interesante si está pensando en invertir tiempo en construir una API REST.
fuente
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 publicación de blog:
PUT: / blog / entry / 1
Crea uno nuevo:
POST: / blog / entrada
PUT puede crear un nuevo recurso en algunas circunstancias donde el URI del nuevo recurso está claro antes de la solicitud. POST también se puede utilizar para implementar varios otros casos de uso, que no están cubiertos por los demás (GET, PUT, DELETE, HEAD, OPTIONS)
La comprensión general para los sistemas CRUD es GET = solicitud, POST = crear, Put = actualizar, DELETE = eliminar
fuente
Los componentes básicos de REST son principalmente los recursos (y URI) y los hipermedios. En este contexto,
GET
es la forma de obtener una representación del recurso (que de hecho se puede asignar a aSELECT
en términos CRUD).Sin embargo, no necesariamente debe esperar un mapeo uno a uno entre las operaciones CRUD y los verbos HTTP. La principal diferencia entre
PUT
yPOST
es acerca de su propiedad idempotente.POST
también se usa más comúnmente para actualizaciones parciales, ya quePUT
generalmente implica enviar una nueva representación completa del recurso.Sugeriría leer esto:
La especificación HTTP también es una referencia útil:
fuente
En términos generales, este es el patrón que uso:
fuente
El proyecto Symfony intenta mantener sus métodos HTTP unidos con los métodos CRUD, y su lista los asocia de la siguiente manera:
Vale la pena señalar que, como dicen en esa página, "en realidad, muchos navegadores modernos no admiten los métodos PUT y DELETE".
Por lo que recuerdo, Symfony "falsifica" PUT y DELETE para aquellos navegadores que no los admiten al generar sus formularios, para tratar de estar tan cerca de usar el método HTTP teóricamente correcto incluso cuando un navegador no admite eso.
fuente