Versión corta de la pregunta:
¿Es necesario que "OBTENER" en un URI particular coincida con lo que se "PUSÓ" a ese URI?Pregunta de DESCANSO: ¿PONER una representación, OBTENER una diferente?
Creo que no. He aquí por qué:
Dado que un recurso es algo abstracto que el cliente no puede conocer teóricamente, cuando hacemos un PUT, solo debemos enviar una representación. Basado en peinar sobre RFC2616, no parece completamente especificado en cuanto a lo que eso significa para un recurso que tiene muchas representaciones (¿potencialmente infinitas?), Pero aquí están mis pensamientos; por favor dígame si está de acuerdo:
Mi expectativa es que si PONGO una representación a un recurso, todas las demás representaciones del recurso en ese URI deben mantenerse consistentes (potencialmente actualizadas) según sea necesario. En otras palabras, le está diciendo al recurso "use esta representación para redefinirse".
Por lo tanto, yo debería ser capaz de hacer esto:
PUT/recursos/foo/myvacation
Content-type: image/jpg
...
y seguimiento con esto:
GET/recursos/foo/myvacation
Aceptar: image/png
...
y obtener la versión actualizada de myvacation en un formato diferente (asumiendo que el servidor sabe cómo hacerlo). La extrapolación de eso, este compuesto atómica PUT "imagen + metadatos" también debería ser legal:
PUT/recursos/foo/myvacation
Content-type: multipart/form-dataContent-disposition: datos de formulario; name = "document"
Content-type: image/jpg
[..]
Content-disposition: form-data; name = "iptc"
Tipo de contenido: application/iptc
[..]
Content-disposition: form-data; name = "Exif"
Content-type: application/Exif
[..]
Y entonces, porque la negociación de contenido del lado del servidor (RFC2616 sección 12.1) puede tener lugar sobre la base de casi cualquier cosa, nos puede por defecto en el "documento" contenido para esto:
GET/recursos/foo/myvacation
Content-type: image/jpg
[..]
o si cree lo mismo que yo hago esa RFC 2396 sección 3.4 "El componente de consulta es una cadena de información para ser interpretada por el recurso". significa que un URI con una cadena de consulta se refiere al mismo recurso que un URI sin una cadena de consulta (y es isomorfo con solo enviar datos application/x-form-urlencoded al recurso), entonces esto también debería ser legal:
?GET/recursos/foo/myvacation content = Exif
Content-Type: application/Exif
[..]
La descripción de PUT dice:
El método PUT solicitudes que el adjunto d entidad se almacena bajo el Request-URI proporcionado.
Para mí, esto es bastante anti-DESCANSO, a menos que lo leas de manera muy liberal. Mi interpretación es "El método PUT solicita que se cree o actualice un recurso en el URI de solicitud proporcionado en función de la representación de la entidad adjunta".
Más adelante, obtenemos:
La diferencia fundamental entre el POST y PUT solicitudes se refleja en el significado diferente de la Solicitud-URI. El URI en una solicitud POST identifica el recurso que manejará la entidad adjunta. Ese recurso puede ser un proceso de aceptación de datos, una puerta de enlace a algún otro protocolo o una entidad separada que acepta anotaciones. Por el contrario, el URI en una solicitud PUT identifica la entidad adjunta a la solicitud: el agente de usuario sabe qué URI está destinado y el servidor NO DEBE intentar aplicar la solicitud a algún otro recurso.
Tenemos que leer esto de forma similar, pero las partes clave aquí son "sabe qué URI está destinado" y "aplica la solicitud".
Por lo tanto, para mí, la representación devuelta por GET en un URI determinado no tiene que ser necesariamente la misma representación que se PON en el URI dado, solo tiene que ser coherente.
¿Es verdadero o no?
Recientemente descubrí que RFC2616 ha sido reemplazado por RFC3986, que define la consulta de modo que se puede usar para ubicar el recurso. No estoy seguro de que me gusta esta nueva definición. : -/ –