79

POST安らかな設計を検討しており、HTTP メソッド ( 、GET、...) と HTTP ヘッダーを可能な限り使用したいと考えています。HTTP メソッドPUTDELETEがブラウザーからサポートされていないことは既にわかっています。

Accept現在、同じリソースの異なる表現を取得しようとしていますが、リクエストのヘッダーを変更してこれを行いたいと考えています。Acceptこのヘッダーに応じて、サーバーは同じリソースで異なるビューを提供できます。

問題は、ブラウザにこのヘッダーを変更するように指示する方法が見つからなかったことです。

<a..>タグにはtype属性があり、MIME タイプを持つことができ、良い候補のように見えましたが、ヘッダーは依然としてブラウザのデフォルトのままでした (Firefox ではabout:confignetwork.http.accept.defaultキーで変更できます)。

4

5 に答える 5

44

要求された表現をURIに埋め込むというMilanの提案には部分的に同意しません。

とにかく可能であれば、URIはリソースのアドレス指定にのみ使用し、 HTTPメソッド/動詞のトンネリングには使用しないでください。最終的に、作成(POST)または更新(PUT)だけでは目的が果たされない場合、特定のビジネスアクション(編集、ロックなど)がURIに埋め込まれる可能性があります。

POSThttp://shonzilla.com/orders/08/165;編集

URIで特定の表現を要求する場合は、URI設計を中断して最終的に醜くし、同じ場所(つまり、URI)に2つの異なるREST概念を混在させ、サーバー側で要求を一般的に処理することを困難にする必要があります。ミラノが示唆していること、そして多くの人が同じことをしています。Flickr、まさにこれです。

代わりに、よりRESTfulなアプローチは、コンテンツネゴシエーションに使用されるHTTPヘッダーを使用して、別の場所を使用して優先表現をエンコードするAcceptことです。このヘッダーは、クライアントがサーバーに処理/処理できるコンテンツタイプを通知し、サーバーがクライアントの要求を満たそうとします。このアプローチはHTTP1.1標準の一部であり、ソフトウェアに準拠しており、Webブラウザでもサポートされています。

これを比較してください:

GET /orders/08/165.xml HTTP / 1.1
また
GET /orders / 08/165&format = xml HTTP / 1.1

これに:

GET /orders/08/165 HTTP / 1.1
 Accept:application / xml

setRequestHeaderWebブラウザーから、オブジェクトのメソッドを使用して任意のコンテンツタイプを要求できXMLHttpRequestます。例えば:

function getOrder(year、yearlyOrderId、contentType){
 var client = new XMLHttpRequest();
 client.open( "GET"、 "/ order /" + year + "/" + yearlyOrderId);
 client.setRequestHeader( "Accept"、contentType);
 client.send(orderDetails);
}

要約すると、アドレス、つまりリソー​​スのURIはその表現から独立している必要があり、メソッドを使用すると、 HTTPヘッダーXMLHttpRequest.setRequestHeaderを使用して任意の表現を要求できます。Accept

乾杯!
ションジラ

于 2008-12-29T17:24:28.163 に答える
12

私はまったく同じこと(RESTful Webサービス)を実行しようとしていましたが、このFirefoxアドオンに出くわしました。このアドオンを使用すると、リクエストの受け入れヘッダー(実際には任意のリクエストヘッダー)を変更できます。それは完璧に動作します。

https://addons.mozilla.org/en-US/firefox/addon/967/

于 2010-09-11T16:01:35.133 に答える
8

あなたがやろうとしている方法でそれを行うことは不可能だと思います。

受け入れられるデータ形式の表示は、通常、リソース名に拡張子を追加することによって行われます。したがって、次のようなリソースがある場合

/resources/resource

HTML 表現をGET /resources/resource返します。代わりに XML 表現が必要であることを示すには、次のパターンを使用できます。

/resources/resource.xml

次に、サーバー側で受け入れられたコンテンツ タイプ決定マジックを実行する必要があります。

または、James が提案するように Javascript を使用します。

于 2008-12-17T15:44:45.007 に答える
5

Google Chrome のModHeader拡張機能も良いオプションです。必要なヘッダーを設定し、ブラウザーに URL を入力するだけで、URL にアクセスすると拡張機能からヘッダーが自動的に取得されます。唯一のことは、ヒットするすべての URL のヘッダーを送信するため、使用後に無効にするか削除する必要があることです。

于 2018-07-25T12:22:23.130 に答える
0

いくつかのJavaScriptを使用してください!

xmlhttp = new XMLHttpRequest();
xmlhttp.open('PUT'、http://www.mydomain.org/documents/standards/browsers/supportlist)
xmlhttp.send( "ページコンテンツはここにあります");
于 2008-12-17T15:36:47.160 に答える