2010-12-18 8 views
14

Ich weiß, HTTP PUT ist eine Idempotent Anforderung, die etwas zu einem bestimmten URI speichern, entsprechend der Definition (aus den rfc zitiert)Wie wird eine HTTP PUT-Anforderung normalerweise ausgegeben?

The PUT method requests that the enclosed entity be stored under the supplied Request-URI. 

Aber was ist die Definition von ‚geschlossener Einheit‘? Es scheint mir nicht möglich, Formulardaten (wie für HTTP POST Anfrage) zu senden. Was ist mit dem Senden der Repräsentation der Entität über JSON/XML oder in anderen Serialisierungsformaten?

Kurz gesagt, wie sendet man eine HTTP PUT Anfrage über das Speichern/Aktualisieren von Informationen an einem bestimmten URI dann?

+0

http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services – W55tKQbuRu28Q4xv

Antwort

10

Die eingeschlossene Entität sind die im HTTP-Nachrichtentext enthaltenen Nutzdaten (nachdem alle Übertragungsencodierungen entfernt wurden). Wenn beim Senden des Nachrichtentexts Probleme auftreten, haben Sie möglicherweise vergessen, einen Inhalt hinzuzufügen -Length-Header - das ist eine von zwei Möglichkeiten, um anzuzeigen, dass die HTTP-Nachricht einen Body hat.

PUT ist bis auf diesen semantischen Unterschied identisch mit POST: Mit POST identifiziert der URI eine Ressource, die die Entität behandelt, z. B. ein Servlet. Mit PUT identifiziert der URI die Entität selbst, z. B. eine Datei, die mit dem Inhalt des Entitätshauptteils erstellt/ersetzt wird.

10

In REST Sie haben:

GET - retrieve resource 
POST - create new resource 
PUT - update existing resource 
DELETE - delete resource 

So ist das PUT Verb verwendet wird, um eine bestehende Ressource auf dem Server zu aktualisieren. Je nach Client gibt es verschiedene Möglichkeiten, eine PUT-Anfrage zu senden. Zum Beispiel mit Jquery AJAX:

$.ajax({ 
    type: 'PUT', 
    url: '/products/123', 
    data: { name: 'new product name' } 
}); 
+0

aber wie geben Sie eine HTTP PUT Anfrage aus? Ist der in der folgenden Frage geschriebene der richtige Weg? http://stackoverflow.com/questions/2719610/should-i-allow-sending-complete-structures-when-using-put-for-updates-in-a-rest-a – Jeffrey04

+1

@ Jeffrey04, hängt davon ab, was die Server erwartet. In dem Beispiel, das Sie zeigen, ist es XML. Aber Sie könnten auch andere Formate verwenden.Ich würde Ihnen empfehlen, [dieses Video zur Verwendung von REST for SOA] anzuschauen (http://www.infoq.com/presentations/Using-REST-for-SOA). –

+0

http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/ gute Erklärung der verschiedenen Anwendungen von POST und PUT. IT-Nutzung abhängig, nicht Aktion. –

2

Sie einen HTTP-PUT schicken, wo der Körper die ‚geschlossene Einheit‘ ist, die Sie wollen unter der angeforderten URL speichern. Sehr ähnlich zu POST, unterscheidet sich nur die Semantik wie im RFC spezifiziert.

+1

Stört es dich, ein Beispiel aufzunehmen? danke – Jeffrey04

+0

Vielleicht sind Sie darüber verwirrt: Sie senden tatsächlich eine HTTP-POST-Anfrage - Ihr Web-Browser unterstützt nicht PUT. Sie übergeben Typ = PUT in den Formulardaten, damit Ihre Webanwendung (d. H. Rails) weiß, was zu tun ist. –

+0

@Paul Ich entwickle eigentlich eine restliche API-Seite über PHP (zend_framework), aber ich wusste nicht, wie PUT tatsächlich gemacht wird (daher die Frage) und sieht nicht wie Formulareingabe aus, sollte/kann verwendet werden. Mein Webserver und das PHP-Skript können PUT-Anfragen bearbeiten. – Jeffrey04

3

nicht sicher, ob dies die richtige Antwort ist, aber ich werde wahrscheinlich versuchen, nur

nehme an, nachdem ein HTTP GET zu http://example.org/api/foo/1 Ausgabe, bekomme ich diese

GET http://example.org/api/foo/1 
Accept: application/json 

Antwort:

{ 
    "foo": "bar" 
} 

dann eine Put-Anfrage

PUT http://example.org/api/foo/1 
{ 
    "foo": "baz" 
} 

solange die auf dem Endpunkt gehostete Anwendung das Format, das ich sende, versteht.

1

Wenn sich der Request-URI auf eine bereits vorhandene Ressource bezieht, sollte die beiliegende Entität als eine modifizierte Version der auf dem Ursprungsserver befindlichen Entität betrachtet werden. Wenn der Anforderungs-URI nicht auf eine vorhandene Ressource verweist und dieser URI vom anfragenden Benutzeragenten als neue Ressource definiert werden kann, kann der Ursprungsserver die Ressource mit diesem URI erstellen.