RESTfulスタイルのプログラミングでは、HTTPメソッドをビルディングブロックとして使用する必要があります。どのメソッドが従来のCRUDメソッドと一致するかは少しわかりません。 GET/ReadとDELETE/Deleteは十分明らかです。
ただし、PUT/POSTの違いは何ですか?作成と更新で一対一に一致しますか?
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メソッドは必要ありません。
重要なのは、idempotent changeを実行しているかどうかです。つまり、メッセージに対して2回アクションを実行すると、「同じ」ことが1回だけ行われたように見える場合、べき等の変更があり、PUTにマップする必要があります。そうでない場合は、POSTにマップします。クライアントがURLを合成することを許可しない場合、PUTはUpdateにかなり近く、POSTはCreateをうまく処理できますが、それが唯一確実な方法ではありません。クライアントが/foo/abc
を作成したいことを知っていて、そこに置くコンテンツを知っている場合、PUTとしては問題なく動作します。
POSTの正規の説明は、何かを購入することにコミットしているときです。これは、誰もそれを知らずに繰り返したくないアクションです。対照的に、オーダーのディスパッチアドレスを事前に設定するには、PUTを使用します。6 Anywhere Dr, Nowhereville
に1回、2回、または100回送信するように指示されても問題ありません。同じアドレスです。それはアップデートだということですか?可能性があります...それはすべて、バックエンドの書き方に依存します。 (結果が同一ではない可能性があることに注意してください。リソースの表現の一部としてユーザーが最後にPUTを行ったときにユーザーに報告することができます。機能的な意味で「同じ」であること。)
私は同じ答えを探していました、ここにIBMの言うことがあります。 IBMリンク
POST Creates a new resource. GET Retrieves a resource. PUT Updates an existing resource. DELETE Deletes a resource.
ストームパスによる素晴らしいYouTubeビデオトークがあり、実際にこれを説明しています。URLはビデオの正しい部分にスキップする必要があります。
また、REST apiの構築に時間を費やすことを考えている場合は、1時間以上話しているのに注目する価値があります。
現在(2016)最新のHTTP動詞はGET、POST、 PATCH 、PUTおよびDELETEです
概要
お役に立てれば!
REST APIの設計に興味がある場合は、これはアンセウォームリーディングです。 ウェブサイトのオンライン版 github リポジトリ
具体的な状況にもよりますが、一般的には:
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 =削除です
RESTの構成要素は、主にリソース(およびURI)とハイパーメディアです。このコンテキストでは、GET
はリソースの表現を取得する方法です(実際には、CRUDの用語でSELECT
にマップできます)。
ただし、必ずしもCRUD操作とHTTP動詞の間の1対1マッピングを期待するべきではありません。 PUT
とPOST
の主な違いは、それらのべき等プロパティです。 POST
は、一般的にリソースの完全に新しい表現を送信することを意味するため、PUT
も部分更新によく使用されます。
これを読むことをお勧めします:
HTTP仕様 も参考になります。
PUTメソッドは、指定されたRequest-URIで囲まれたエンティティを保存することを要求します。
[...]
POST要求とPUT要求の基本的な違いは、Request-URIの異なる意味に反映されます。 POSTリクエストのURIは、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データ受け入れプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティである可能性があります。対照的に、PUTリクエストのURIは、リクエストで囲まれたエンティティを識別します。ユーザーエージェントは、意図されているURIを認識しており、サーバーはリクエストを他のリソースに適用しようとしてはなりません。サーバーがリクエストを別のURIに適用することを希望する場合、
一般的に、これは私が使用するパターンです。
Symfony プロジェクトは、HTTPメソッドをCRUDメソッドと結び付けようとし、 their list はそれらを次のように関連付けます:
そのページで彼らが言うように、「現実には、多くの最新のブラウザはPUTおよびDELETEメソッドをサポートしていない」ことに注意する価値があります。
私が覚えていることから、Symfonyは、フォームを生成するときにそれらをサポートしていないブラウザーのPUTとDELETEを「偽造」し、ブラウザーがサポートしていない場合でも理論的に正しいHTTPメソッドを使用するように近づけるようにしていますそれ。