Ich würde dem Vorschlag Mailands, die angeforderte Vertretung in die URI einzubetten, teilweise nicht zustimmen.
Wenn möglich, sollten URIs nur zum Adressieren von Ressourcen und nicht zum Tunneln von HTTP-Methoden / Verben verwendet werden. Eventuell können bestimmte Geschäftsaktionen (Bearbeiten, Sperren usw.) in den URI eingebettet werden, wenn das Erstellen (POST) oder Aktualisieren (PUT) allein nicht den Zweck erfüllt:
POST http://shonzilla.com/orders/08/165;edit
Wenn Sie eine bestimmte Darstellung in URI anfordern, müssen Sie Ihr URI-Design unterbrechen, um es schließlich hässlicher zu machen, zwei unterschiedliche REST-Konzepte an derselben Stelle (dh URI) zu mischen und die generische Verarbeitung von Anforderungen auf der Serverseite zu erschweren. Was Milan vorschlägt und viele das Gleiche tun, inkl. Flickr ist genau das.
Stattdessen würde ein REST-Ansatz einen separaten Ort zum Codieren der bevorzugten Darstellung verwenden, indem ein Accept
HTTP-Header verwendet wird, der für die Inhaltsverhandlung verwendet wird, wobei der Client dem Server mitteilt, welche Inhaltstypen er verarbeiten kann, und der Server versucht, die Anforderung des Clients zu erfüllen. Dieser Ansatz ist Teil des HTTP 1.1-Standards , Software-kompatibel und wird auch von Webbrowsern unterstützt.
Vergleichen Sie dies:
GET /orders/08/165.xml HTTP / 1.1
oder
GET / orders / 08/165 & format = xml HTTP / 1.1
dazu:
GET / orders / 08/165 HTTP / 1.1
Akzeptieren: application / xml
In einem Webbrowser können Sie jeden Inhaltstyp mithilfe setRequestHeader
der XMLHttpRequest
Objektmethode anfordern . Zum Beispiel:
Funktion getOrder (year, yearlyOrderId, contentType) {
var client = new XMLHttpRequest ();
client.open ("GET", "/ order /" + year + "/" + yearlyOrderId);
client.setRequestHeader ("Accept", contentType);
client.send (orderDetails);
}}
Um es zusammenzufassen: Die Adresse, dh der URI einer Ressource, sollte unabhängig von ihrer Darstellung sein, und mit dieser XMLHttpRequest.setRequestHeader
Methode können Sie jede Darstellung über den Accept
HTTP-Header anfordern .
Prost!
Shonzilla