web-dev-qa-db-ja.com

どのHTTPメソッドがどのCRUDメソッドと一致しますか?

RESTfulスタイルのプログラミングでは、HTTPメソッドをビルディングブロックとして使用する必要があります。どのメソッドが従来のCRUDメソッドと一致するかは少しわかりません。 GET/ReadとDELETE/Deleteは十分明らかです。

ただし、PUT/POSTの違いは何ですか?作成と更新で一対一に一致しますか?

198
Drew
Create = PUT with a new URI
         POST to a base URI returning a newly created URI
Read   = GET
Update = PUT with an existing URI
Delete = DELETE

PUTは、PUTで​​使用されるURIの存在に応じて、作成と更新の両方にマップできます。

POSTはCreateにマップされます。

修正:POSTは、更新にマップすることもできますが、通常は作成に使用されます。 POSTは部分的な更新でもあるため、提案されているPATCHメソッドは必要ありません。

281
Paul Morgan

重要なのは、idempotent changeを実行しているかどうかです。つまり、メッセージに対して2回アクションを実行すると、「同じ」ことが1回だけ行われたように見える場合、べき等の変更があり、PUTにマップする必要があります。そうでない場合は、POSTにマップします。クライアントがURLを合成することを許可しない場合、PUTはUpdateにかなり近く、POSTはCreateをうまく処理できますが、それが唯一確実な方法ではありません。クライアントが/foo/abcを作成したいことを知っていて、そこに置くコンテンツを知っている場合、PUTとしては問題なく動作します。

POSTの正規の説明は、何かを購入することにコミットしているときです。これは、誰もそれを知らずに繰り返したくないアクションです。対照的に、オーダーのディスパッチアドレスを事前に設定するには、PUTを使用します。6 Anywhere Dr, Nowherevilleに1回、2回、または100回送信するように指示されても問題ありません。同じアドレスです。それはアップデートだということですか?可能性があります...それはすべて、バックエンドの書き方に依存します。 (結果が同一ではない可能性があることに注意してください。リソースの表現の一部としてユーザーが最後にPUTを行ったときにユーザーに報告することができます。機能的な意味で「同じ」であること。)

47
Donal Fellows

私は同じ答えを探していました、ここにIBMの言うことがあります。 IBMリンク

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
30
ex0b1t

ストームパスによる素晴らしいYouTubeビデオトークがあり、実際にこれを説明しています。URLはビデオの正しい部分にスキップする必要があります。

stormpath youtube video

また、REST apiの構築に時間を費やすことを考えている場合は、1時間以上話しているのに注目する価値があります。

9
pleshy

現在(2016)最新のHTTP動詞はGET、POST、 PATCH 、PUTおよびDELETEです

概要

  • HTTP GET-SELECT /リクエスト
  • HTTP PUT-更新
  • HTTP POST-挿入/作成
  • HTTP PATCH -WHEN完全なリソース表現を指定するのは面倒で、より多くの帯域幅を使用します。列を部分的に更新する必要があります
  • HTTP削除-削除

お役に立てれば!

REST AP​​Iの設計に興味がある場合は、これはアンセウォームリーディングです。 ウェブサイトのオンライン版 github リポジトリ

8
d1jhoni1b

具体的な状況にもよりますが、一般的には:

PUT =リソースの具象URIを使用して具象リソースを更新または変更します。

POST =新しいリソースを作成しますnder指定されたURIのソース。

つまり.

ブログ投稿を編集します。

PUT:/ blog/entry/1

新しいものを作成します。

POST:/ blog/entry

PUTは、リクエストの前に新しいリソースのURIが明確になっている状況では、新しいリソースを作成する場合があります。 POSTは、他のいくつかのユースケース(GET、PUT、DELETE、HEAD、OPTIONS)でカバーされないユースケースを実装するためにも使用できます

CRUDシステムの一般的な理解は、GET =リクエスト、POST =作成、Put =更新、DELETE =削除です

7
Stuck

RESTの構成要素は、主にリソース(およびURI)とハイパーメディアです。このコンテキストでは、GETはリソースの表現を取得する方法です(実際には、CRUDの用語でSELECTにマップできます)。

ただし、必ずしもCRUD操作とHTTP動詞の間の1対1マッピングを期待するべきではありません。 PUTPOSTの主な違いは、それらのべき等プロパティです。 POSTは、一般的にリソースの完全に新しい表現を送信することを意味するため、PUTも部分更新によく使用されます。

これを読むことをお勧めします:

HTTP仕様 も参考になります。

PUTメソッドは、指定されたRequest-URIで囲まれたエンティティを保存することを要求します。

[...]

POST要求とPUT要求の基本的な違いは、Request-URIの異なる意味に反映されます。 POSTリクエストのURIは、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データ受け入れプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティである可能性があります。対照的に、PUTリクエストのURIは、リクエストで囲まれたエンティティを識別します。ユーザーエージェントは、意図されているURIを認識しており、サーバーはリクエストを他のリソースに適用しようとしてはなりません。サーバーがリクエストを別のURIに適用することを希望する場合、

4
Bruno

一般的に、これは私が使用するパターンです。

  • HTTP GET-SELECT /リクエスト
  • HTTP PUT-更新
  • HTTP POST-挿入/作成
  • HTTP削除-削除
3
AJ.

Symfony プロジェクトは、HTTPメソッドをCRUDメソッドと結び付けようとし、 their list はそれらを次のように関連付けます:

  • GETサーバーからリソースを取得します
  • POSTサーバーにリソースを作成します
  • PUTサーバー上のリソースを更新します
  • DELETEサーバーからリソースを削除します

そのページで彼らが言うように、「現実には、多くの最新のブラウザはPUTおよびDELETEメソッドをサポートしていない」ことに注意する価値があります。

私が覚えていることから、Symfonyは、フォームを生成するときにそれらをサポートしていないブラウザーのPUTとDELETEを「偽造」し、ブラウザーがサポートしていない場合でも理論的に正しいHTTPメソッドを使用するように近づけるようにしていますそれ。

1
Matt Gibson