21

定義によると、HTTP PUT は特定の URI に何かを格納するべき等の要求であることを知っています ( rfcから引用) 。

The PUT method requests that the enclosed entity be stored under the supplied Request-URI.

しかし、「囲まれた実体」の定義は何ですか? フォーム データ (HTTP POST 要求など) を送信することはできないようです。JSON/XML または他のシリアル化形式を介してエンティティの表現を送信するのはどうですか?

つまり、HTTP PUT リクエストを送信して、特定の URI で情報を保存/更新するにはどうすればよいでしょうか?

4

5 に答える 5

14

REST には次のものがあります。

GET - retrieve resource
POST - create new resource
PUT - update existing resource
DELETE - delete resource

したがって、PUT 動詞は、サーバー上の既存のリソースを更新するために使用されます。クライアントに応じて、PUT 要求を送信するさまざまな方法があります。たとえば、jquery AJAX の場合:

$.ajax({
    type: 'PUT',
    url: '/products/123',
    data: { name: 'new product name' }
});
于 2010-12-18T09:22:42.800 に答える
12

囲まれたエンティティは、HTTP メッセージ本文に含まれるペイロード データです (転送エンコーディングが削除された後)。メッセージ本文の送信に問題がある場合は、Content-Length ヘッダーを含めるのを忘れている可能性があります -これは、HTTP メッセージに本文があることを示す 2 つの方法のうちの 1 つです。

PUT は、次のセマンティックの違いを除いて POST と同じです。POST では、サーブレットなどのエンティティを処理するリソースを URI が識別します。PUT を使用すると、URI はエンティティ自体を識別します。たとえば、エンティティ本体のコンテンツで作成/置換されるファイルです。

于 2010-12-18T15:32:20.153 に答える
5

そのため、HTTP PUTリクエストは、特定のURIに現在保存されているリソースを置き換えるために発行されることがよくあります。たとえば、https://example.org/book/1に保存されている本があり、データは次のようにJSONで表すことができます。

$ curl --request GET https://example.org/book/1
{
    "title": "Stackoverflow Compilation Book 1",
    "year": 2019
}

架空の本が昨年(2018年)に出版されたためにフィールドを修正したいとします。その人はyear、HTTPPUTリクエストを介して完全に更新された本の情報を送信する必要があります。

$ curl --request PUT
      --header "Content-Type: application/json"
      --data '{"title": "Stackoverflow Compilation Book 1", "year": 2018}'

year属性の変更に注意してください。

HTTP PUTリクエストは本質的に置換操作であると考えると、URIで表される本を別のものに置き換えることもできます。例えば、

$ curl --request PUT
      --header "Content-Type: application/json"
      --data '{"title": "Some random book that nobody publishes", "year": 2019}'

Content-Type添付データは、サポートされている限り、任意の形式(通常は上記のように要求ヘッダーでも指定)にすることができ、通常はAccept応答ヘッダー(アプリケーションが処理するデータ型の種類を示す)によって報告されます。 。送信されたデータが有効かどうかを判断するために、アプリケーションコードによってさらに検証が処理されます。

于 2010-12-18T09:37:07.873 に答える
2

本文が要求された URL の下に保存したい「囲まれたエンティティ」である HTTP PUT を送信します。POST と非常によく似ていますが、RFC で指定されているセマンティクスのみが異なります。

于 2010-12-18T09:23:41.673 に答える