Ich suche in einen erholsamen Design und möchte die HTTP - Methoden ( POST
, GET
, ...) und HTTP - Header so viel wie möglich. Ich habe bereits herausgefunden, dass die HTTP-Methoden PUT
und DELETE
vom Browser nicht unterstützt werden.
Jetzt suche ich nach verschiedenen Darstellungen derselben Ressource und möchte dies tun, indem ich den Accept
Header der Anfrage ändere. Abhängig von diesem Accept
Header kann der Server eine andere Ansicht für dieselbe Ressource bereitstellen.
Das Problem ist, dass ich keine Möglichkeit gefunden habe, meinen Browser anzuweisen, diesen Header zu ändern.
Das <a..>
Tag hat ein Typattribut , das einen MIME-Typ haben kann. Es sah aus wie ein guter Kandidat, aber der Header war immer noch die Standardeinstellung des Browsers (in Firefox kann er about:config
mit dem network.http.accept.default
Schlüssel geändert werden ).
quelle
Antworten:
Ich denke nicht, dass es möglich ist, es so zu machen, wie Sie es versuchen.
Die Angabe des akzeptierten Datenformats erfolgt normalerweise durch Hinzufügen der Erweiterung zum Ressourcennamen. Also, wenn Sie Ressourcen wie haben
und
GET /resources/resource
gibt die HTML-Darstellung zurück. Um anzuzeigen, dass Sie stattdessen die XML-Darstellung wünschen, können Sie das folgende Muster verwenden:Sie müssen dann die Magie zur Bestimmung des akzeptierten Inhaltstyps auf der Serverseite ausführen.
Oder verwenden Sie Javascript, wie James vorschlägt.
quelle
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:
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:
dazu:
In einem Webbrowser können Sie jeden Inhaltstyp mithilfe
setRequestHeader
derXMLHttpRequest
Objektmethode anfordern . Zum Beispiel: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 denAccept
HTTP-Header anfordern .Prost!
Shonzilla
quelle
XML
Ressource (Hyper-) direkt zu verknüpfen . Für einige Anwendungen ist dies möglicherweise erforderlich. Zum Beispiel in OpenCPU, Grafiken können in abgerufen werdenPNG
,PDF
oderSVG
Format. Es ist jedoch unmöglich, dasPNG
Bild in eine HTML-Seite einzubetten, wennAccept
zum Abrufen ein Header erforderlich ist.Ich wollte genau das Gleiche tun (RESTful-Webdienst) und bin auf dieses Firefox-Addon gestoßen, mit dem Sie die Accept-Header (eigentlich alle Anforderungsheader) für Anforderungen ändern können. Es funktioniert perfekt.
https://addons.mozilla.org/en-US/firefox/addon/967/
quelle
Die ModHeader- Erweiterung für Google Chrome ist ebenfalls eine gute Option. Sie können einfach die gewünschten Header festlegen und die URL im Browser eingeben. Die Header werden automatisch aus der Erweiterung übernommen, wenn Sie auf die URL klicken. Das einzige ist, dass es Header für jede URL sendet, auf die Sie klicken, sodass Sie sie nach der Verwendung deaktivieren oder löschen müssen.
quelle
Verwenden Sie etwas Javascript!
quelle