219

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

しかし、PUT/POST の違いは何ですか? Create と Update で 1 対 1 で一致しますか?

4

9 に答える 9

307
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 メソッドは必要ありません。

于 2011-06-02T03:38:42.187 に答える
51

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

POST の標準的な説明は、何かを購入することを約束するときです。これは、誰も知らないうちに繰り返したくない行動です。対照的に、事前に注文の発送先住所を設定するには、PUT を使用して問題なく行うことができます。16 Anywhere Dr, Nowhereville回、2 回、または 100 回送信するように指示されても、同じ住所のままです。ということは更新ですよね?可能性があります… それはすべて、バックエンドをどのように書きたいかによって異なります。(結果が同一ではない可能性があることに注意してください: リソースの表現の一部として最後に PUT を実行したときにユーザーに報告することができます。これにより、繰り返しの PUT が同一の結果を引き起こさないことが保証されますが、結果は依然として機能的な意味で「同じ」であること)。

于 2011-06-01T15:23:28.033 に答える
38

私は同じ答えを探していました。これがIBMの発言です。 IBM リンク

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
于 2013-11-01T13:47:11.377 に答える
11

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

概要

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

お役に立てれば!

REST API の設計に興味がある場合は、これを読んでおくべきです。ウェブサイト オンライン版githubリポジトリ

于 2016-09-04T02:03:47.160 に答える
10

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

ストームパスYouTubeビデオ

また、1時間以上話しているのは一見の価値がありますが、RESTAPIの構築に時間を費やすことを考えている場合は非常に興味深いものです。

于 2013-02-28T16:38:33.863 に答える
7

具体的な状況によって異なりますが、一般的には次のとおりです。

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

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

いえ

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

PUT: /blog/entry/1

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

投稿: /blog/entry

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

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

于 2011-06-01T15:06:03.190 に答える
4

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

ただし、CRUD 操作と HTTP 動詞が 1 対 1 で対応するとは限りません。との主な違いはPUTPOSTべき等プロパティに関するものです。通常、リソースの完全な新しい表現を送信することを意味するPOSTため、部分的な更新にもより一般的に使用されます。PUT

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

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

PUT メソッドは、囲まれたエンティティが指定された Request-URI の下に格納されることを要求します。

[...]

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

于 2011-06-01T15:08:56.610 に答える
3

一般的に言えば、これは私が使用するパターンです:

  • HTTP GET - 選択/リクエスト
  • HTTP PUT - 更新
  • HTTP POST - 挿入/作成
  • HTTP 削除 - 削除
于 2011-06-01T15:00:52.433 に答える
1

Symfonyプロジェクトは、その HTTP メソッドを CRUD メソッドと結合したままにしようとします。それらのリストは、次のようにそれらを関連付けます。

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

そのページで彼らが言っているように、「実際には、多くの最近のブラウザは PUT メソッドと DELETE メソッドをサポートしていません」ということは注目に値します。

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

于 2011-06-01T15:04:27.347 に答える