2011-07-10 10 views

答えて

2

厳密に言えば、私はまだそれをRESTfulと考えていますが、そうではないと思います。すべてのHTTP動詞を使用することができない場合があります。これにより、多くのREST APIがPOSTまたはGETを介して他のアクションを許可します。

0

公式のRESTful標準はないので、メソッドoverride =メソッドなどのパラメータで明示的に渡されている限り、問題ありません。

+0

これは公式の安静な標準ではありませんか? :http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm – jaytufch

+0

私はHTTPを介して別のプロトコルをトンネリングしていると思いますが、これは悪い習慣です。 DELETEメソッドがある場合、それを使って削除する必要があります。 – You

+0

いいえ..男の論文のようです。 – DrStrangeLove

0

実用的な見地からは、クライアントが実装するのが容易ではないかもしれませんが、特に、それらがあいまいではなく、DELETEを行う方法がわからない場合は、短い答えはいいえです。

これはあなたのWebサービスだから、あなたのビジネスニーズに最も適したものを実行する必要があります。 RESTの完全な実装は、APIの操作方法に関する偉大なクライアントのドキュメントよりも重要ではありません。

2

これは流行語になっているため、APIが「RESTful」であるかどうかという疑問はありません。より重要な問題は、これがRFC 2616で定義されているHTTPプロトコルをうまく利用しているかどうかということです。関連するセクションはhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec9.htmlです。

「POSTメソッドは、要求に含まれるエンティティを元のサーバーがRequest-LineのRequest-URIによって識別されるリソースの新しい従属として受け入れることを要求するために使用されます。 POSTは通常、コレクション内に新しい項目を作成したり、既存のリソースに注釈を付けるために使用されます。注釈を削除して注釈を付けるのは実際には禁止されておらず、安全性と冪等の問題はありませんが、POSTでの削除は意図したとおりのHTTPの使用ではありません。

つまり、リソース内で「削除フラグを設定する」ことでPOSTや既存のリソースを修正すると、現代のRESTful APIの実践に従うことになります。しかし、完全にそれを打つために?いいえ、それがHTTP DELETEの目的です。

+0

削除フラグを設定するだけでなく、レコードを別のデータベース/テーブルに移動する場合はどうすればよいですか? – jaytufch

+0

URIがどのように影響を受けるかによって異なります。 http://example.com/things/5へのGETがリソースを返すとしましょう。次に、それを "削除"するために同じURIにPOSTします。問題は、そのURIへの次のGETが何かを取得するかどうかです。それを別のテーブルに移動してhttp://example.com/things/5への次のGETが404または410を返した場合、それはHTTPを使用する間違った方法だと言います。おそらく、別のデータベースやテーブルに移動することはできますが、GETには削除されたという表現が返されます。 IMHOのみDELETEを実行すると、次のGETが404または410になるはずです。 –

0

いいえHTTPが意図されている方法ではRESTfulではありません。 DELETEまたはPUTをサポートしていないクライアントが、サポートするように設計されたリソースと対話できるようにする方法は、実行する操作を示すカスタムヘッダーを使用することです。次に、フレームワーク内のレイヤーにヘッダーを調べ、リソースコード内の正しいメソッドを呼び出します。私が最も広く使用しているアプローチは、X-HTTP-Method-Overrideというヘッダーを使用することです。クライアントがHTTPヘッダーを操作できない場合、同じアプローチ(同じ名前を使用するイベント)を要求パラメーターとともに使用できます。

関連する問題