1. ホーム
  2. http

[解決済み] PUTとDELETE HTTPリクエストメソッドの有用性について教えてください。

2023-01-19 13:03:29

質問

PUT や DELETE HTTP リクエストメソッドを使用したことがありません。私の傾向としては、システム (私のアプリケーションまたは Web サイト) の状態が影響を受けない場合 (製品リストのような場合) には GET を使用し、影響を受ける場合 (注文を行うような場合) には POST を使用することです。これらの2つは常に十分ではありませんか、それとも私は何かを見逃していますか?

どのように解決するのですか?

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

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

PUT は、サーバーにリソースを置いたり更新したりするためのものです。

PUTメソッドは、指定されたRequest-URIの下に同封のエンティティが格納されることを要求します。Request-URIが既に存在するリソースを参照する場合、同封のエンティティはオリジンサーバーに存在するものの修正版とみなされるべきです (SHOULD)。Request-URIが既存のリソースを指しておらず、そのURIが要求しているユーザーエージェントによって新しいリソースとして定義可能な場合、オリジンサーバーはそのURIでリソースを作成することができます ...。

完全な仕様については、こちらをご覧ください。

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

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

あるいはさらに悪いことに

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

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

ですから、ウェブサーバー上でリソースを削除するには、次のように呼び出します。

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

を呼び出し、それを更新するために

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

で、更新されたResource RepresentationをPUTボディで提供し、ウェブサーバがそれを適用するようにします。

ですから、もしあなたが、ある種の REST API に対して何らかのクライアントを構築する場合、おそらく PUT と DELETE のリクエストを送信するようにします。これは、JavaScript を介してリクエストを送信するなど、ブラウザ内に構築されたクライアントである可能性もありますし、サーバー上で動作するツールなどである可能性もあります。

より詳細な情報は、こちらをご覧ください。