Kurzfassung der Frage:
Muss "GET" bei einem bestimmten URI übereinstimmen, was "PUT" mit diesem URI war?REST Frage: eine Darstellung PUT, ein unterschiedliches erhalten?
glaube ich nicht. Hier ist der Grund:
Da eine Ressource ist eine abstrakte Sache, die vom Client theoretisch unerkennbar ist, wenn wir eine PUT tun, müssen wir sein, nur eine Vertretung schicken. Basierend auf Kämmen über RFC2616, ist es nicht vollständig spezifiziert sein scheinen, was das bedeutet, für eine Ressource, die viele (möglicherweise unendlich?) Darstellungen, aber hier sind meine Gedanken; Bitte sagen Sie mir, wenn Sie zustimmen:
Meine Erwartung ist, dass, wenn ich eine Darstellung auf eine Ressource PUT, alle anderen Darstellungen der Ressource in diesem URI konsistent gehalten werden (möglicherweise aktualisiert) wie nötig. Mit anderen Worten, Sie sagen der Ressource "Verwenden Sie diese Repräsentation, um sich selbst neu zu definieren".
So sollte ich in der Lage sein, dies zu tun:
PUT/resources/foo/myvacation
Content-type: image/jpg
...
und Follow-up mit diesem:
GET/resources/foo/myvacation
akzeptieren: image/png
...
und die aktualisierte Version von myvacation in einem anderen Format erhalten (der Server unter der Annahme, weiß, wie das zu tun). Rechnet man aus, dass dieser Verbund atomaren "Bild + Metadaten" PUT sollte auch legal sein:
PUT/resources/foo/myvacation
Content-type: multipart/form-dataContent-disposition: Formulardaten; name = "document"
Content-type: image/jpg
[..]
Content-disposition: form-data; name = "iptc"
Inhaltstyp: application/iptc
[..]
Inhaltsdisposition: Formulardaten; name = "exif"
Content-type: application/exif
[..]
Und dann, weil serverseitige Content Negotiation (RFC2616 Abschnitt 12.1) stattfinden kann, basierend auf so ziemlich alles, wir Standardmäßig kann das "Dokument" Inhalte für diese:
GET/resources/foo/myvacation
Content-type: image/jpg
[..]
oder wenn Sie glauben, als ich, dass RFC 2396 Abschnitt 3 tun.4 "Die Abfragekomponente ist eine Informationskette, die von der Ressource interpretiert werden soll." bedeutet, dass ein URI mit einer Abfragezeichenfolge auf dieselbe Ressource verweist wie eine URI ohne eine Abfragezeichenfolge (und isomorph ist, wenn nur application/x-form-urlencoded-Daten an die Ressource gesendet werden). Dies sollte auch zulässig sein:
?GET/resources/foo/myvacation content = exif
Content-type: application/exif
[..]
Die Beschreibung der PUT sagt:
Die PUT-Methode Anfragen dass die umschließen d entity wird unter dem angegebenen Request-URI gespeichert.
Für mich ist dies ziemlich anti-REST, es sei denn, Sie lesen es in einer sehr liberalen Art und Weise. Meine Interpretation lautet "Die PUT-Methode fordert an, dass eine Ressource auf der Grundlage der Repräsentation der eingeschlossenen Entität im bereitgestellten Anforderungs-URI erstellt oder aktualisiert wird."
Später, erhalten wir:
Der grundlegende Unterschied zwischen der POST und PUT-Anfragen reflektiert wird in der unterschiedlichen Bedeutung des Request-URI. Der URI in einer POST-Anforderung identifiziert die Ressource, die die eingeschlossene Entität verarbeiten wird. Diese Ressource kann ein Daten akzeptierender Prozess, ein Gateway zu einem anderen Protokoll oder eine separate Entität sein, die Annotationen akzeptiert. Im Gegensatz dazu identifiziert der URI in einer PUT-Anforderung die Entität, die der Anforderung beigefügt ist - der Benutzeragent weiß, welcher URI gemeint ist, und der Server darf NICHT versuchen, die Anforderung auf eine andere Ressource anzuwenden.
Wir müssen das ähnlich kreativ lesen, aber die wichtigsten Bits hier sind "weiß, was URI gemeint ist" und "die Anfrage anwenden".
Also, für mich die Darstellung von GET bei einem bestimmten URI zurückgegeben muss nicht unbedingt die gleiche Darstellung sein, die an den angegebenen URI PUT, es muss nur konsistent sein.
Wahr oder falsch?
Ich habe kürzlich entdeckt, dass RFC2616 durch RFC3986 ersetzt wurde, die die Abfrage so definiert, dass es verwendet werden kann, um die Ressource zu finden. Ich bin mir nicht sicher, ob mir diese neue Definition gefällt. : -/ –