PUT
Railsアプリケーションでリクエストを使用しています。現在、新しいHTTP動詞PATCH
がブラウザーによって実装されています。ですから、PATCH
とPUT
リクエストの主な違いは何か、そしてどちらを使うべきかを知りたいのです。
PUT
Railsアプリケーションでリクエストを使用しています。現在、新しいHTTP動詞PATCH
がブラウザーによって実装されています。ですから、PATCH
とPUT
リクエストの主な違いは何か、そしてどちらを使うべきかを知りたいのです。
回答:
HTTP動詞は、おそらくHTTPプロトコルの最も謎めいたものの1つです。それらは存在し、それらは多数ありますが、なぜそれらが存在するのですか?
Railsは多くの動詞をサポートし、Webブラウザーでネイティブにサポートされていないいくつかの動詞を追加したいようです。
http動詞の完全なリストは次のとおりです。http://annevankesteren.nl/2007/10/http-methods
公式RFCのHTTPパッチ:https : //datatracker.ietf.org/doc/rfc5789/?include_text=1
PATCHの要求エンティティに説明する変更のセットが要求- URIで識別されるリソースに適用されることが方法を要求します。変更のセットは、メディアタイプによって識別される「パッチドキュメント」と呼ばれる形式で表されます。Request-URIが既存のリソースを指していない場合、サーバーは、パッチドキュメントタイプ(nullリソースを論理的に変更できるかどうか)や権限などに応じて、新しいリソースを作成できます(MAY)。
PUT要求とPATCH要求の違いは、サーバーが囲まれたエンティティを処理してRequest-URIで識別されるリソースを変更する方法に反映されます。でPUTの要求、囲まれたエンティティはオリジンサーバ上に格納されたリソースの修正バージョンであると考えられ、そしてクライアントは、格納されたバージョンを交換することを要求されます。ではPATCH、しかし、囲まれたエンティティは、現在、オリジンサーバ上にあるリソースは、新しいバージョンを生成するように変更する必要がある方法を記述する一連の命令が含まれています。PATCHの 方法はで識別されるリソースに影響のRequest-URIを、そしてそれはまた、 MAY他のリソースに副作用があります。つまり、PATCHを適用することにより、新しいリソースを作成したり、既存のリソースを変更したりできます。
私の知る限り、PATCH動詞はRailsアプリケーションのように使用されていません...これを理解しているように、RFCパッチ動詞を使用して、2つのファイル間でdiffを実行するときのように、パッチの指示を送信する必要があります。エンティティ全体を再送信する代わりに、エンティティ全体を再送信するよりもはるかに小さいパッチを送信します。
巨大なファイルを編集したいとします。3行を編集します。ファイルを送り返す代わりに、差分を送信する必要があります。プラス面として、パッチリクエストの送信を使用して、ファイルを非同期にマージできます。バージョン管理システムは、潜在的にPATCH動詞を使用してリモートでコードを更新できます。
もう1つの考えられる使用例は、NoSQLデータベースにいくらか関連しており、ドキュメントを格納することが可能です。JSON構造を使用して、サーバーとクライアントの間でデータを送受信するとします。フィールドを削除したい場合は、$ unsetにmongodbの構文と同様の構文を使用できます。実際、mongodbでドキュメントを更新するために使用される方法は、おそらくjsonパッチの処理に使用できます。
この例をとります:
db.products.update(
{ sku: "unknown" },
{ $unset: { quantity: "", instock: "" } }
)
私たちはこのようなものを持つことができます:
PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }
最後に重要なことですが、人々はHTTP動詞について好きなように言うことができます。真実は1つだけあり、真実はRFCにあります。
私はグーグルで数時間過ごし、ここで答えを見つけました
PUT => ユーザーがレコードのすべてまたは一部のみを更新できる場合は、 PUTを使用します(ユーザーは更新内容を制御します)
PUT /users/123/email
new.email@example.org
PATCH => ユーザーが部分的なレコードのみを更新できる場合、たとえばメールアドレスのみを更新する場合(アプリケーションが更新できるものを制御する)、PATCHを使用します。
PATCH /users/123
[description of changes]
なぜ Patch
PUT
メソッドはより多くの帯域幅を必要とするか、部分的にではなくリソース全体を処理します だから、PATCH
帯域幅を削減するために導入されました。
パッチについての説明
PATCH
安全ではなく、べき等でもない方法であり、完全および部分的な更新と他のリソースへの副作用を許可します。
PATCH
囲まれたエンティティが、元のサーバーに現在存在するリソースを変更して新しいバージョンを作成する方法を説明する一連の指示を含むメソッドです。
PATCH /users/123
[
{ "op": "replace", "path": "/email", "value": "new.email@example.org" }
]
ここに置くとパッチについての詳細情報
PATCH
Among POST
、PUT
などは「安全」ではありません。データを変更するためです(副作用があります)。比較するとGET
、OPTIONS
あなたが任意の副作用なしのエンドポイントを複数回呼び出すことができます(安全な方法は、など)。
置く
私は私の変更したい場合はfirst
その名前を送信プットの更新のための要求を
{ "first": "Nazmul", "last": "hasan" }
しかし、ここで一つの問題がある持っているput
私が送信する場合、その要求put
の要求を私はすべての2つのパラメータを送信する必要がありますfirst
し、last
再びすべての値を送信するために必須であるので、
パッチ:
patch
リクエストは言う。送信しdata
たいものだけを送信してくださいupdate
。他のデータに影響したり変更したりすることはありません。
したがって、すべての値を再度送信する必要はありません。自分の名前を更新したいだけなので、名前だけを送信first
して更新する必要があります。
HTTPプロトコルのPOST、PUT、PATCHメソッドの違いは次のとおりです。
役職
HTTP.POSTメソッドは常にサーバー上に新しいリソースを作成します。その非べき等のリクエスト、つまりユーザーが同じリクエストを2回ヒットした場合、制約がない場合、別の新しいリソースが作成されます。
http postメソッドは、常にデータベースに新しいレコードを作成するSQLのINSERTクエリに似ています。
例:バックエンドサーバーが新しいリソースのリソースIDを決定する新しいユーザー、注文などを保存するには、POSTメソッドを使用します。
置く
HTTP.PUTメソッドでは、リソースは最初にURLから識別され、存在する場合は更新され、それ以外の場合は新しいリソースが作成されます。ターゲットリソースが存在する場合、そのリソースは完全に新しい本文で上書きされます。つまり、HTTP.PUTメソッドは、リソースを作成または更新するために使用されます。
http putメソッドは、指定されたレコードが存在するかどうかに応じてレコードを挿入または更新するSQLのMERGEクエリに似ています。
PUT要求はべき等です。つまり、同じ要求を2回押すと、既存の記録が更新されます(新しいレコードは作成されません)。PUTメソッドでは、リソースIDはクライアントによって決定され、リクエストURLで提供されます。
例:PUTメソッドを使用して、既存のユーザーまたは注文を更新します。
パッチ
HTTP.PATCHメソッドは、リソースの部分的な変更、つまりデルタ更新に使用されます。
httpパッチメソッドはSQLのUPDATEクエリに似ており、行全体ではなく、選択した列のみを設定または更新します。
例:PATCHメソッドを使用して注文ステータスを更新できます。
パッチ/ api / users / 40450236 / order / 10234557
リクエストの本文:{status: 'Delivered'}
HTTPの用語によれば、PUT
リクエストはデータベースの更新ステートメントのようなものです。
PUT
-既存のリソース(以前はPOSTED)を変更するために使用されます。一方、PATCH
要求は既存のリソースの一部を更新するために使用されます。
例えば:
お客様情報:
// This is just a example.
firstName = "James";
lastName = "Anderson";
email = "email@domain.com";
phoneNumber = "+92 1234567890";
//..
レコード全体を更新したいときは?Http
PUT
verb
そのために使用する必要があります。
といった:
// Customer Details Updated.
firstName = "James++++";
lastName = "Anderson++++";
email = "email@Updated.com";
phoneNumber = "+92 0987654321";
//..
一方、レコード全体ではなくレコードの一部のみを更新する場合は、に進みHttp
PATCH
verb
ます。
といった:
// Only Customer firstName and lastName is Updated.
firstName = "Updated FirstName";
lastName = "Updated LastName";
//..
PUT VS POST:
PUT
リクエストを使用するときは、firstName、lastName、email、phoneNumberなどのすべてのパラメーターを送信するpatch
必要があります。一方、リクエストでは、更新するパラメーターのみを送信し、他のデータに影響または変更を加えません。
詳細については、https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/をご覧ください。