周りを見渡してみると、GET および POST 要求以外のものを使用する Web アプリケーション (Web サービスではない) を 1 つも挙げることはできません。これには特定の理由がありますか?一部のブラウザー (またはサーバー) は、他のタイプの要求をサポートしていませんか? それとも歴史的な理由だけですか?PUT および DELETE リクエストを使用して、サーバー側での作業を少し楽にしたいと思っていますが、他の誰もそうしていないので、気が進まないのです。
7 に答える
実際、かなりの数の人がPUTとDELETEを使用しており、主に非ブラウザーAPIに使用されています。いくつかの例は、AtomPublishingProtocolとGoogleDataAPIです。
それを超えると、ほとんどのブラウザはフォームを介したPUTとDELETEをサポートしていないため、一般的な使用法ではPUT/DELETEは表示されません。HTML5はこれを修正しているようです:
ブラウザアプリケーションで機能する方法は次のとおりです。人々はPUTとDELETEを念頭に置いてRESTfulアプリケーションを設計し、ブラウザからのPOSTを介してそれらの要求を「トンネリング」します。たとえば、Ruby on Railsが非表示フィールドを使用してこれを実現する方法については、次のSOの質問を参照してください。
したがって、HTTP動詞のより大きなセットを念頭に置いて、アプリケーションを自分で設計する必要はありません。
編集:ちなみに、ブラウザベースのフォーム投稿にPUT / DELETEがない理由に興味がある場合は、技術的な理由が実際にはないことがわかります。残りの議論のメーリングリストでこのスレッドを読んで、特にRoy Fieldingのコメントは、いくつかのコンテキストで興味深いものです。
編集:AJAXライブラリがすべてのメソッドをサポートするかどうかについてのコメントがいくつかあります。それは、XMLHttpRequestの実際のブラウザー実装に帰着します。誰かがこのリンクを便利だと思うかもしれません。これは、ブラウザをテストして、HttpRequestオブジェクトがさまざまなHTTPオプションにどの程度準拠しているかを確認します。
残念ながら、これらの結果を収集するリファレンスはわかりません。
簡単に言うと、HTML 4.01form
要素では、属性にPOST
「」と「」の値しか使用できません。GET
method
厳しいセキュリティポリシーを持つ一部のプロキシサーバーは、それらを削除する可能性があります。とにかくPUTとDELETEを使用しています。
特定の名前を付けることはできませんが、一部のブラウザは他のHTTPメソッドを適切にサポートしていないことを読みました。
特に、Railsは、ブラウザがこれらのメソッドをサポートしていない場合でも、これを明示的に設定するためのメソッドパラメータをフォームにパックします。あなたがこれをするつもりなら、それは合理的な予防策のように思えます。
私は、HTTP のすべての機能を使用すると言います。おそらく、HTTP プロトコルをより完全かつ適切に使用するきっかけになるでしょう。POST や GET だけでなく、ネット上ではさらに多くのことが起こっています。ブラウザの実装がこれを反映する頃になりました。
これは、ブラウザと Ajax ライブラリによって異なります。たとえば、jQueryはすべての HTTP メソッドをサポートしていますが、ブラウザーがサポートしていない場合があります。たとえば、「type」属性に関するjQueryの「ajax」ドキュメントを参照してください。
Restlet Java フレームワークを使用すると、HTML POST 操作を介して PUT および DELETE 要求をトンネリングできます。これを行うには、URI のクエリ文字列に method=put または method=delete を追加するだけです。次に例を示します。
http://www.example.com/user=xyz?method=delete ...
これは、Ruby on Rails のアプローチ (上記の @ars によって説明されている) と同じです。
個人的には、Web アプリケーションで PUT や DELETE を使用する目的がまったくわかりません。アプリケーションが実行するすべての操作は、読み取りまたは書き込み、つまり入出力です。HTTP 要求のヘッダーで操作の性質を区別する必要があるのはなぜですか? フォーム /object/object_id の同じ URL を使用して ajax 呼び出しを行い、削除、更新、値の取得、作成などの複数の操作を実行できます。URLを見ただけでは、どれだかわかりません。GET と POST のみを使用すると、URL は次のようになります。
/オブジェクト/ID/削除
/オブジェクト/ID/作成
/オブジェクト/id/更新
/object/id --> 暗黙の GET
等
私の限られた経験に基づくと、多くの場合、これは非表示のヘッダー リクエスト タイプよりもはるかにクリーンです。PUT や DELETE を絶対に使用してはいけないと言っているのではなく、絶対に必要な場合にのみ使用してください。
RESTful Web API での HTTP 要求メソッドに関するさまざまなユース ケースと規則について詳しくは、Leonard Richardson による「RESTful Web API」を参照してください。