PUT、POST、PATCHの違いは何ですか?[閉まっている]


281

HTTPプロトコルのPUT、POST、PATCHメソッドの違いは何ですか?



4
2015

12
最新のWeb APIでは、GET / POST以外のものを使用するのはおかしいです。やりすぎです。最近のほとんどのアプリで識別されたURIは、置き換えや更新などの対象となるリソースではありません。それらはドキュメントではありません。彼らは呼ばれている手続きです。URI自体が、呼び出されるメソッド以外の実際のリソースを識別することはほとんどありません。したがって、リクエストの本文にJSONデータまたはファイルを投稿する必要がある場合は、クエリ文字列リクエストとPOSTにGETを使用します。IMO、それ以外のものは、URIと静的HTMLドキュメントの操作を含む時代遅れの概念を、それとは似ていない新しいアーキテクチャに統合しようとしています。
Triynko '26 / 10/26

1
すべての素晴らしい答え。違いの
列車の

@Triynkoそして、あなたが参照している手順には、リソースの作成削除変更が含まれます。RESTfulであることほど、そのようなアイデアを伝えるためのより良い方法はありません。何故なの?
КонстантинВан

回答:


200

HTTP動詞のPUT、POST、GET、DELETE、PATCHの違い:

最も一般的に使用されるHTTP動詞POST、GET、PUT、DELETEは、データベースでのCRUD(作成、読み取り、更新、削除)操作に似ています。これらのHTTP動詞は大文字で指定します。だから、以下はそれらの間の比較です。

  1. 作成-POST
  2. 読み取り-GET
  3. 更新-PUT
  4. 削除-削除

PATCH:リソースに部分的な変更を送信します。リソースの1つのフィールドのみを更新する必要がある場合は、PATCHメソッドを使用できます。

注:
POST、PUT、DELETEはコンテンツを変更するため、以下のURLに対するFiddlerを使用したテストは、更新を模倣するだけです。実際には削除または変更されません。ステータスコードを確認して、挿入、更新、削除が発生しているかどうかを確認できます。

URL: http : //jsonplaceholder.typicode.com/posts/

1)GET:

GETは最も単純なタイプのHTTPリクエストメソッドです。リンクをクリックするか、アドレスバーにURLを入力するたびにブラウザが使用するもの。URLで識別されるデータをクライアントに送信するようサーバーに指示します。GETリクエストの結果としてサーバー側でデータが変更されることはありません。この意味で、GET要求は読み取り専用です。

FiddlerまたはPostManでの確認: 応答の確認にFiddlerを使用できます。Fiddlerを開き、[作成]タブを選択します。以下に示すように動詞とURLを指定し、[実行]をクリックして応答を確認します。

動詞: GET

URL: http : //jsonplaceholder.typicode.com/posts/

応答:次のような応答が返されます。

"userId":1、 "id":1、 "title": "sunt aut ..."、 "body": "quia et suscipit ..."

「ハッピー」(またはエラーではない)パスでは、GETはXMLまたはJSONの表現と200(OK)のHTTP応答コードを返します。エラーの場合、ほとんどの場合、404(見つかりません)または400(不良要求)を返します。

2)POST:

POST動詞は、主に新しいリソースを作成するために使用されます。特に、従属リソースの作成に使用されます。つまり、他のリソース(親など)に従属します。

正常に作成されたら、HTTPステータス201を返します。201HTTPステータスで新しく作成されたリソースへのリンクを含むLocationヘッダーを返します。

FiddlerまたはPostManでの確認: 応答の確認にFiddlerを使用できます。Fiddlerを開き、[作成]タブを選択します。以下に示すように動詞とURLを指定し、[実行]をクリックして応答を確認します。

動詞: POST

URL: http : //jsonplaceholder.typicode.com/posts/

リクエスト本文:

データ:{タイトル: 'foo'、本体: 'bar'、userId:1000、Id:1000}

応答:応答コード201を受け取ります。

Id = 1000で挿入されたレコードを確認する場合は、動詞をGetに変更して同じURLを使用し、[実行]をクリックします。

前述のように、上記のURLでは読み取り(GET)のみが許可されており、更新されたデータを実際に読み取ることはできません。

3)PUT:

PUTは、ほとんどの場合、更新機能に使用されます。元のリソースの新しく更新された表現を含むリクエスト本文を使用して、既知のリソースURIにPUTします。

FiddlerまたはPostManでの確認: 応答の確認にFiddlerを使用できます。Fiddlerを開き、[作成]タブを選択します。以下に示すように動詞とURLを指定し、[実行]をクリックして応答を確認します。

動詞: PUT

URL: http : //jsonplaceholder.typicode.com/posts/1

リクエスト本文:

データ:{タイトル: 'foo'、本文: 'bar'、userId:1、Id:1}

応答:更新が成功すると、PUTから200(または本文のコンテンツを返さない場合は204)を返します。

4)削除:

DELETEは非常に理解しやすいです。URIで識別されるリソースを削除するために使用されます。

正常に削除されたら、HTTPステータス200(OK)と応答本文、削除されたアイテムの表現(帯域幅を必要とすることが多い)、またはラップされた応答(以下の戻り値を参照)を返します。それか、応答本文なしでHTTPステータス204(コンテンツなし)を返します。つまり、本文のない204ステータス、またはJSENDスタイルの応答とHTTPステータス200が推奨される応答です。

FiddlerまたはPostManでの確認: 応答の確認にFiddlerを使用できます。Fiddlerを開き、[作成]タブを選択します。以下に示すように動詞とURLを指定し、[実行]をクリックして応答を確認します。

動詞: DELETE

URL: http : //jsonplaceholder.typicode.com/posts/1

応答:正常に削除されると、応答本文とともにHTTPステータス200(OK)を返します。

PUTとPATCHの間の例

置く

名を変更する必要がある場合は、更新のPUTリクエストを送信します。

{"first": "Nazmul"、 "last": "hasan"}したがって、ここで名を更新するには、データのすべてのパラメーターを再度送信する必要があります。

パッチ:

パッチリクエストでは、変更する必要のあるデータのみを送信し、データの他の部分を変更または影響を与えないようにしています。例:名のみを更新する必要がある場合は、名のみを渡します。

詳細については、以下のリンクを参照してください。

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

PATCHリクエストとPUTリクエストの主な違いは何ですか?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUTは更新されません。PUTは、指定されたURIにあるエンティティを作成または置換します。HTTP仕様によれば、PUTはべき等です。はい、それは更新に使用できますが、更新としてのみ考えるのは正しくありません。
Maladon 2017年

2
PUTが更新されないことに同意します。PUTを送信すると既存のリソースを上書きするため、置換でマッピングできます。ただし、PATCHを送信すると、指定したエントリのみが置き換えられます。
Atul Chavan 2017

1
PUTは作成にも使用できるため、あなたの答えが私が使用するべきものをどのように示しているかわかりませんか?
Rob P.

1
:この答えははるかに優れていますが、PATCHとは比較にならないstackoverflow.com/a/630475/2391795
Vadorequest


11

以下の定義は実際の例からのものです。

例の概要
すべてのクライアントデータについて、そのクライアントデータを見つけるための識別子を保存し、その識別子をそのクライアントに送り返して参照します。

  1. 役職

    • クライアントがPOSTメソッドを使用して識別子なしでデータを送信する場合は、データを保存して新しい識別子を割り当てます。
    • クライアントがPOSTメソッドを使用して同じデータを識別子なしで再度送信した場合、それを保存して新しい識別子を割り当てます。
    • :ここでは複製が許可されています
  2. 置く

    • クライアントが識別子を含むデータを送信する場合、その識別子が存在するかどうかを確認します。識別子が存在する場合はデータを更新し、それ以外の場合はデータを作成して新しい識別子を割り当てます。
  3. パッチ

    • クライアントが識別子を含むデータを送信する場合、その識別子が存在するかどうかを確認します。識別子が存在する場合はデータを更新し、それ以外の場合は例外をスローします。

注:Putメソッドでは、識別子が見つからない場合でも例外はスローされません。しかし、Patchメソッドでは、識別子が見つからない場合に例外をスローします。

上記について質問がある場合はお知らせください。


8

リクエストタイプ

  • 作成-POST
  • 読み取り-GET
  • 作成または更新-PUT
  • 削除-削除
  • 更新-パッチ

GET / PUTはべき等であるPATCHは時々べき等になることがある

べき等とは-クエリを複数回実行しても、クエリの結果に影響を与えないことを意味します(同じ出力。牛が妊娠していると仮定し、再度繁殖させた場合、複数回妊娠することはできません)。

get :-

簡単な取得。サーバーからデータを取得してユーザーに表示する

{
id:1
name:parth
email:x@x.com
}

post :-

データベースに新しいリソースを作成します。新しいデータを追加することを意味します。そのべき等ではありません。

put :-

新しいリソースを作成するか、既存のものに追加します。同じリソースを毎回更新し、出力も同じになるため、べき等です。 例。 -初期データ

{
id:1
name:parth
email:x@x.com
}
  • put-localhost / 1 put email:ppp@ppp.comを実行します
{
id:1
email:ppp@ppp.com
}

patch

したがって、パッチリクエストのパッチが時々べき等になる可能性があります

id:1
name:parth
email:x@x.com
}

パッチ名:w

{
id:1
name:w
email:x@x.com
}
HTTPメソッド
はいGET
POSTいいえ
はい
パッチなし*
オプションはい
ヘッドはい
削除はい

リソース:べき等 - べき等とは何ですか?


「時々」べき等は本当に何を意味しますか?べき等を決定するものは何ですか?
Polv

7

ここにすべての簡単な説明があります:

  • POSTは常にリソースを作成するためのものです(複製されたかどうかは関係ありません)
  • PUTは、リソースが存在するかどうかをチェックして更新し、それ以外の場合は新しいリソースを作成します
  • PATCHは常にリソースを更新するためのものです

5

PUTリクエストとPATCHリクエストの主な違い:

人の名と姓を保持するリソースがあるとします。

名を変更したい場合は、Updateのputリクエストを送信します

{ "first": "Michael", "last": "Angelo" }

ここでは、名だけを変更していますが、PUTリクエストでは、最初と最後の両方のパラメーターを送信する必要があります。
言い換えると、すべての値、つまりペイロード全体を再度送信することが必須です。

ただし、PATCHリクエストを送信する場合は、更新するデータのみを送信します。つまり、更新するために名だけを送信し、姓を送信する必要はありません。


2

PUTとPATCHが完全なデータと部分的なデータを送信して、それぞれ置換/更新するのはかなり論理的な違いです。ただし、以下のようにいくつかの点

  1. 時々、POSTは、作成のためのPUTに関する更新と見なされます。
  2. HTTPは、PATCHで完全なデータと部分的なデータの送信を義務付け/チェックしますか?そうでない場合、PATCHはPUT / POSTの場合と同じようにupdateと同じになる可能性があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.