verbs verbos que metodos entre diferencia delete http rest post httpwebrequest put

que - verbos http laravel



¿Se requieren/se espera que las solicitudes PUT y POST tengan un cuerpo de solicitud? (5)

Estoy escribiendo una API de REST, y estoy pensando en el proceso de creación de una clave por parte de un usuario. Tengo las siguientes posibilidades:

  • La solicitud GET para /new/<keyname> - aunque es muy fácil, creo que no usaré esto, porque escuché que GET es para recuperar y / o listar información;
  • Solicitud POST a /<keyname> : me pareció lo suficientemente fácil y simple, pero no pasa ningún dato en el cuerpo de la solicitud. ¿Puedo hacerlo de esta manera? ¿Esto es raro?
  • La solicitud POST a /keys pasan en el cuerpo de la solicitud "keyname=SomeKey" - ¿Es esta la forma correcta?

Miré esta API desde joyent y en todas sus solicitudes PUT y POST pasaron algunos datos en el cuerpo de la solicitud. ¿Se espera esto? ¿Es realmente incorrecto no requerir un cuerpo de solicitud en una solicitud PUT y POST?



Para responder a su pregunta en una línea. Sí, se espera que tenga Cuerpo / Contenido en cuerpo, pero no es obligatorio (Obligatorio).


Probablemente la mejor manera sea su tercera opción: POST to /keys con keyname=SomeKey .

Aquí le explicamos por qué: es posible que desee agregar otra función a su API, por ejemplo, create_new_user . Entonces sería difícil distinguir la diferencia entre un usuario que intenta POSTAR una clave llamada create_new_user y un usuario que intenta usar la función create_new_user .

Tiene razón al decir que no debería usar GET para realizar esta operación, ya que la operación GET "NO DEBE tener el significado de realizar una acción que no sea la recuperación". (RFC 2616) .


Según okHttp3 (una biblioteca HTTP para Android): los siguientes métodos necesitan un cuerpo: POST, PUT, PATCH, PROPPATCH (WebDAV) y REPORT ( source ). Incluso se bloquea si intenta realizar una solicitud con los métodos dados sin un cuerpo.


RFC2616 es la base RFC para HTTP 1.1

En la forma más general, un mensaje HTTP es este (tenga en cuenta el cuerpo opcional):

generic-message = start-line *(message-header CRLF) CRLF [ message-body ] start-line = Request-Line | Status-Line

Leer más da esto:

9.5 POST The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. ...

y

9.6 PUT The PUT method requests that the enclosed entity be stored under the supplied Request-URI. ... The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource.

Tanto POST como PUT incluyen la frase entidad incluida en la solicitud .

Según mi lectura, creo que se desea un cuerpo (una descripción no normativa, lo sé) tanto para POST como para PUT.

En el contexto de REST, POST se crea y PUT se actualiza. Me imagino creando un objeto vacío (tal vez un marcador de posición para información futura), pero no imagino mucho uso de una actualización vacía.