web-dev-qa-db-ja.com

PUTおよびDELETE HTTP要求メソッドの有用性は何ですか?

私はこれについて多くのことを読みましたが、このトピックに関する結論を得ることができませんでした。

しかし、PUTまたはDELETE HTTP要求メソッドを使用したことはありません。私の傾向は、システムの統計情報(アプリケーションまたはWebサイト)が影響を受けない場合(製品リストなど)にGETを使用し、影響を受ける場合(発注済み)にPOSTを使用することです。それで十分ではないか、何かが足りませんか?

82
Rupesh Patel

DELETEは、リクエストリソースを削除するためのものです。

DELETEメソッドは、Request-URIによって識別されるリソースをOriginサーバーが削除することを要求します。このメソッドは、Originサーバーでの人間の介入(または他の手段)によってオーバーライドされる場合があります。オリジンサーバーから返されたステータスコードがアクションが正常に完了したことを示していても、クライアントは操作が実行されたことを保証できません…

PUTは、サーバー上のリソースを配置または更新するためのものです。

PUTメソッドは、指定されたRequest-URIで囲まれたエンティティを保存することを要求します。 Request-URIが既存のリソースを参照している場合、囲まれたエンティティは、Originサーバーに存在するエンティティの修正バージョンと見なされる必要があります。 Request-URIが既存のリソースを指しておらず、そのURIが要求ユーザーエージェントによって新しいリソースとして定義できる場合、OriginサーバーはそのURIでリソースを作成できます…

仕様の詳細については、次をご覧ください。

残念ながら、現在のブラウザはPOSTおよびHTMLフォームのGET以外の動詞をサポートしていないため 通常、HTTPを使用してHTTPを最大限に活用することはできません(送信をハイジャックできます) JavaScript))。 HTMLフォームでこれらのメソッドがサポートされていないため、たとえば

POST http://example.com/order/1/delete

またはさらに悪い

POST http://example.com/deleteOrder/id/1

hTTP上でCRUDセマンティクスを効果的にトンネリングします。しかし、動詞がURIの一部になることは決してありませんでした。代わりに、HTTPはすでにHTTPメソッドを介してリソース(例:注文)をCRUDするためのメカニズムとセマンティクスを提供しています。 HTTPはプロトコルであり、単なるデータトンネリングサービスではありません。

したがって、ウェブサーバー上のリソースを削除するには、

DELETE http://example.com/order/1

そして、それを更新するためにあなたが呼び出すだろう

PUT http://example.com/order/1

webサーバーが適用するPUT本文に更新されたリソース表現を提供します。

そのため、 REST API に対して何らかのクライアントを構築している場合、おそらくPUTおよびDELETEリクエストを送信するようにします。これは、ブラウザ内に構築されたクライアントなどです。 JavaScriptを介してリクエストを送信したり、サーバー上で実行されているツールなどです。

詳細については、次をご覧ください。

82
Gordon

GET、POST、DELETE、PUTなどのHTTP要求動詞を使用すると、RESTful Webアプリケーションを構築できます。ここでそれについて読む: http://en.wikipedia.org/wiki/Representational_state_transfer

この利点を確認する最も簡単な方法は、この例を見ることです。すべてのMVCフレームワークには、URL-sをactionControllersにマップするRouter/Dispatcherがあります。したがって、次のようなURL:/blog/article/1blogController::articleAction($id);を呼び出します。このルーターはURLまたは/blog/article/1/のみを認識します

ただし、そのルーターがURLだけでなくHTTPリクエストオブジェクト全体を認識している場合、HTTPリクエスト動詞(GET、POST、PUT、DELETE ...)、および現在のHTTPリクエストに関する他の多くの有用なものにアクセスできます。

これにより、同じURLを受け入れ、HTTP要求動詞に応じて異なるactionControllersにマップできるようにアプリケーションを構成できます。

例えば:

記事1を取得したい場合、これを行うことができます。

GET /blog/article/1 HTTP/1.1

ただし、記事1を削除する場合は、次のようにします。

DELETE /blog/article/1 HTTP/1.1

両方のHTTPリクエストが同じURI/blog/article/1を持っていることに注意してください。唯一の違いはHTTPリクエスト動詞です。そして、その動詞に基づいて、ルーターは異なるactionControllerを呼び出すことができます。これにより、適切なURLを作成できます。

この2つの記事を読んでください。

Symfony 2-HTTPの基礎

Symfony 2-ルーティング

これらの記事はSymfony 2フレームワークに関するものですが、HTTPリクエストとレスポンスがどのように機能するかを理解するのに役立ちます。

お役に立てれば!

23
Limeni

安全なメソッド:リソースの取得/リソースの変更なし
べき等:何回も要求された場合、リソースのステータスに変化はありません
安全でないメソッド:リソースのリソース/変更の作成または更新
非べき等:何回も要求された場合のリソースステータスの変更

要件に応じて:

1)安全でべき等の操作(リソースの取得)には、--------- GET METHODを使用します
2)安全でないide等でない操作(リソースの挿入)の使用--------- POST METHOD
3)安全でないべき等の操作(リソースの更新)の使用--------- PUT METHOD
3)安全でないべき等の操作(リソースの削除)の使用--------- DELETE METHOD

1
user1953168