RESTful スタイルのプログラミングでは、HTTP メソッドをビルディング ブロックとして使用する必要があります。どのメソッドが従来の CRUD メソッドと一致するのか、少し混乱しています。GET/Read と DELETE/Delete は明らかです。
しかし、PUT/POST の違いは何ですか? Create と Update で 1 対 1 で一致しますか?
RESTful スタイルのプログラミングでは、HTTP メソッドをビルディング ブロックとして使用する必要があります。どのメソッドが従来の CRUD メソッドと一致するのか、少し混乱しています。GET/Read と DELETE/Delete は明らかです。
しかし、PUT/POST の違いは何ですか? Create と Update で 1 対 1 で一致しますか?
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 の存在に応じて、Create と Update の両方にマップできます。
POST は Create にマップされます。
修正: POST は、通常は Create に使用されますが、Update にもマップできます。POST は部分的な更新にもなり得るため、提案された PATCH メソッドは必要ありません。
全体の鍵は、べき等な変更を行っているかどうかです。つまり、メッセージに対して 2 回アクションを実行した結果、あたかも 1 回だけ実行されたかのように「同じ」ものが存在する場合、べき等の変更があり、PUT にマップする必要があります。そうでない場合は、POST にマップされます。クライアントが URL を合成することを決して許可しない場合、PUT は Update にかなり近く、POST は Create を問題なく処理できますが、それが唯一の方法ではないことは間違いありません。クライアントが作成したいことを知っていて/foo/abc
、そこに置くコンテンツを知っている場合、PUT として問題なく機能します。
POST の標準的な説明は、何かを購入することを約束するときです。これは、誰も知らないうちに繰り返したくない行動です。対照的に、事前に注文の発送先住所を設定するには、PUT を使用して問題なく行うことができます。16 Anywhere Dr, Nowhereville
回、2 回、または 100 回送信するように指示されても、同じ住所のままです。ということは更新ですよね?可能性があります… それはすべて、バックエンドをどのように書きたいかによって異なります。(結果が同一ではない可能性があることに注意してください: リソースの表現の一部として最後に PUT を実行したときにユーザーに報告することができます。これにより、繰り返しの PUT が同一の結果を引き起こさないことが保証されますが、結果は依然として機能的な意味で「同じ」であること)。
私は同じ答えを探していました。これがIBMの発言です。 IBM リンク
POST Creates a new resource. GET Retrieves a resource. PUT Updates an existing resource. DELETE Deletes a resource.
現在 (2016 年) の最新の HTTP 動詞は、GET、POST、PATCH、PUT、および DELETE です。
概要
お役に立てれば!
REST API の設計に興味がある場合は、これを読んでおくべきです。ウェブサイト オンライン版githubリポジトリ
ストームパスによる素晴らしいYouTubeビデオトークがあり、実際にこれを説明しています。URLはビデオの正しい部分にスキップする必要があります。
また、1時間以上話しているのは一見の価値がありますが、RESTAPIの構築に時間を費やすことを考えている場合は非常に興味深いものです。
具体的な状況によって異なりますが、一般的には次のとおりです。
PUT = リソースの具体的な URI を使用して、具体的なリソースを更新または変更します。
POST =指定された URI のソースの下に新しいリソースを作成します。
いえ
ブログ投稿を編集します。
PUT: /blog/entry/1
新しいものを作成します。
投稿: /blog/entry
PUT は、リクエストの前に新しいリソースの URI が明らかな場合に、新しいリソースを作成することがあります。POST は、他のいくつかのユースケース (GET、PUT、DELETE、HEAD、OPTIONS) ではカバーされない他のいくつかのユースケースを実装するためにも使用できます。
CRUD システムの一般的な理解は、GET = リクエスト、POST = 作成、Put = 更新、DELETE = 削除です。
REST の構成要素は、主にリソース (および URI) とハイパーメディアです。このコンテキストでGET
は、リソースの表現を取得する方法です (これは実際SELECT
に CRUD 用語で a にマップできます)。
ただし、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 メソッドと結合したままにしようとします。それらのリストは、次のようにそれらを関連付けます。
そのページで彼らが言っているように、「実際には、多くの最近のブラウザは PUT メソッドと DELETE メソッドをサポートしていません」ということは注目に値します。
私が覚えている限りでは、Symfony は、ブラウザーがサポートしていない場合でも、理論的に正しい HTTP メソッドを使用することにできるだけ近づけるために、フォームを生成するときにそれらをサポートしていないブラウザーに対して PUT と DELETE を「偽造」します。それ。