要求された表現を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
setRequestHeader
Webブラウザーから、オブジェクトのメソッドを使用して任意のコンテンツタイプを要求でき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
乾杯!
ションジラ