putobject meaning getobject aws rest amazon-web-services amazon-s3

rest - meaning - s3 database



S3 REST API y método POST (4)

En la especificación HTTP original , el recurso dado en la carga útil de una solicitud POST se considera "subordinado al objeto especificado" (es decir, la URL de la solicitud). TimBL ha dicho anteriormente (no se puede encontrar la referencia) que se modeló en el método idéntico en NNTP .

Estoy usando AWS S3 REST API , y después de resolver algunos problemas molestos con la firma parece funcionar. Sin embargo, cuando uso el verbo REST correcto para crear un recurso, es decir, POST , obtengo el 405 method not allowed . La misma solicitud funciona bien con el método PUT y crea recursos.

¿Estoy haciendo algo mal o la API REST AWS S3 no cumple completamente con REST?


Para agregar a @Nicholos

De la http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

ENVIAR:

La entidad publicada está subordinada al URI de la misma manera que un archivo está subordinado a un directorio que lo contiene, un artículo de noticias está subordinado a un grupo de noticias al que se publica, o un registro está subordinado a una base de datos.

La acción realizada por el método POST podría no dar como resultado un recurso que pueda identificarse mediante un URI. En este caso, 200 (OK) o 204 (Sin contenido) es el estado de respuesta apropiado, dependiendo de si la respuesta incluye o no una entidad que describe el resultado.

Si se ha creado un recurso en el servidor de origen, la respuesta DEBERÍA ser 201 (Creado)

PONER:

El método PUT solicita que la entidad adjunta se almacene bajo el URI de solicitud proporcionado. Si el URI de solicitud se refiere a un recurso ya existente, la entidad adjuntada DEBERÍA considerarse como una versión modificada de la que reside en el servidor de origen. Si el URI de solicitud no apunta a un recurso existente, y ese URI puede definirse como un recurso nuevo por el agente de usuario solicitante, el servidor de origen puede crear el recurso con ese URI. Si se crea un nuevo recurso, el servidor de origen DEBE informar al agente de usuario a través de la respuesta 201 (Creado). Si se modifica un recurso existente, se DEBERÁN enviar los códigos de respuesta 200 (OK) o 204 (Sin contenido) para indicar que se completó con éxito la solicitud.

IMO PUT se puede usar para crear o modificar / reemplazar la entidad adjunta.


Sí, te equivocas al mapear CRUD a los métodos HTTP.

A pesar del uso popular y las ideas erróneas generalizadas, incluidas las respuestas mejor calificadas aquí en , POST no es el "método correcto para crear recursos". La semántica de otros métodos está determinada por el protocolo HTTP, pero la semántica de POST está determinada por el tipo de medio de destino en sí. POST es el método utilizado para cualquier operación que no esté estandarizada por HTTP, por lo que se puede usar para la creación, pero también se puede usar para actualizaciones, o cualquier otra cosa que no haya sido realizada por algún otro método. Por ejemplo, es incorrecto utilizar POST para la recuperación, ya que tiene GET estandarizado para eso, pero está bien usar POST para crear un recurso cuando el cliente no puede usar PUT por algún motivo.

De la misma manera, PUT no es el "método correcto para actualizar el recurso". PUT es el método utilizado para reemplazar un recurso por completo, ignorando su estado actual. Puede usar PUT para la creación si tiene toda la representación que el servidor espera, y puede usar PUT para la actualización si proporciona una representación completa, incluidas las partes que no cambiará, pero no es correcto usar PUT para actualizaciones parciales , porque está pidiendo al servidor que considere el estado actual del recurso. PATCH es el método para hacer eso.

En lenguaje informal, lo que cada método le dice al servidor es:

  • POST : toma esta información y aplícala al recurso identificado por el URI dado, siguiendo las reglas que documentaste para el tipo de medio de recursos.

  • PONER : reemplaza lo que se identifique por el URI dado con estos datos, ignorando lo que ya está allí, en todo caso.

  • PARCHE : si el recurso identificado por el URI dado todavía tiene el mismo estado que tenía la última vez que miré, aplique esta diferencia.

Tenga en cuenta que crear o actualizar no se menciona y no es parte de la semántica de esos métodos. Puede crear con POST y PUT, pero no PATCH, ya que depende de un estado actual. Puedes actualizar con cualquiera de ellos, pero con PATCH tienes una actualización condicional al estado desde el que deseas actualizar, con PUT actualizas reemplazando toda la entidad, por lo que es una operación idempotente, y con POST pides al servidor que haga de acuerdo con reglas predefinidas.

Por cierto, no sé si tiene sentido decir que una API cumple o no con REST, ya que REST es un estilo arquitectónico, no una especificación o un estándar, pero incluso teniendo en cuenta que son muy pocas las API que afirman ser REST son realmente RESTful, en la mayoría de los casos porque no son impulsados ​​por hipertexto . AWS S3 definitivamente no es RESTful, aunque en lo que respecta a su pregunta, su uso de los métodos HTTP sigue el estándar HTTP la mayor parte del tiempo.


+--------------------------------------+---------------------+ | POST | PUT | +--------------------------------------+---------------------+ | Neither safe nor idempotent Ex: x++; | Idempotent Ex: x=1; | +--------------------------------------+---------------------+