Pregunta

El marco agavi utiliza la solicitud PUT para crear y POST para actualizar la información. Por lo general, en esta RESTO se usa al revés (a menudo refiriéndose a POST añadiendo información mientras PUT sustituir todo el conjunto de datos).

Si he entendido bien, lo importante es que PUT debe ser idempotente, mientras que POST no tiene este requisito. Por lo tanto, wounder cómo crear un nuevo registro puede ser idempotente (es decir, solicitud múltiple no conducen a múltiples creaciones de un registro), en particular, cuando por lo general el ORM utiliza un identificador como clave principal y el ID de un nuevo registro no sería conocida al cliente (ya que se crea automáticamente en la base de datos), por lo tanto, no puede ser parte de la solicitud. ¿Cómo mantiene el requisito de agavi idempotencia a la luz de esto para la solicitud PUT.

Gracias.

¿Fue útil?

Solución

PUT se puede utilizar tanto para la creación y para la actualización de los registros completos. POST se utiliza generalmente para las actualizaciones parciales y las operaciones conexas, así como para la creación de un nuevo tipo de registro en el servidor sin especificar una dirección URL para el recurso (por ejemplo POST a / artículos / 23 / comentarios devuelve un estado 201 y una ubicación: / artículos / 23 / comentarios / 283.136 de cabecera). Así, en su caso (con una secuencia / autoincrement ID), se usaría ese enfoque.

Sin embargo, HTML (y por lo tanto las formas web) es diferente. Sólo se sabe GET y POST, PUT y DELETE no. Para las operaciones de eliminación y de actualización, que sobrecarga el método POST.

Es por eso Agavi, de forma predeterminada, los mapas de POST para "escribir" y llegar a "leer" - es el caso de uso más común, y "leer" y "escribir" fueron elegidos porque son relativamente neutral y también de una manera representar los aspectos de seguridad de GET vs POST (seguridad como en "GET puede ser llamado sin efectos secundarios" y bla).

Puede cambiar la asignación de los verbos para la aplicación AgaviWebRequest en factories.xml; consulte la lista de correo de los usuarios Agavi o el canal de IRC si necesita ayuda con eso (o pedir a distancia aquí). Una gran cantidad de gente en el canal de IRC también son bastante experiencia con el diseño del esquema URL en caso de que necesite más ayuda con hacer su API bonita.

Otros consejos

En lugar de pensar PUT como crear, pensar en él como "poner". Se pone un recurso en un URI (es decir, enviar un recurso entero a un URI).

PUT http://example.com/articles/1

Si repite este (enviar el mismo recurso a la totalidad de la misma URI) se obtiene el mismo resultado y no se ha cambiado el recurso en ese URI, eso es lo que hace que sea idempotente.

Si la aplicación de agavi de PUT es idempotente, entonces está implementando PUT correctamente. De lo contrario, no lo es.

PUT se puede utilizar para crear un recurso, excepto que si el recurso ya existe (o que ya ha sido creado por un PUT anterior) se acaba de actualizarlo. El artículo no debe actualizar los recursos, sin embargo, si esto es CRUD sencillo. Tenga en cuenta que los verbos HTTP no tienen una asignación definida a ciertas acciones necesariamente, ya que son útiles para mucho más que simplemente ABM.

También tenga en cuenta que esta cuestión no tiene nada que ver con REST - sólo el uso correcto de HTTP. Así que por favor retire la etiqueta RESTO.

He tenido este problema antes. Esto se puede resolver mediante cambiar el factories.xml

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top