1. ホーム
  2. rest

[解決済み] RESTでは、POSTとPUTのどちらがupsert操作に最適ですか?

2023-04-30 09:39:38

質問

サーバにクライアント用のKey-Valueストレージを保持しています。ユーザーがキーquot;k1"を送信した場合、私はそれをデータベースにupsertします。これは POST それとも PUT ?

また、既存のキーをすべて削除し、新しいキーを追加する別の操作があります。これは POST それとも PUT は、レコードを消去して新しいレコードを追加するからです。

どのように解決するのですか?

ユーザーがキーを送信した場合 "k1" 私はデータベースにそれをupsert。これは、POSTまたはPUTと見なされます。

によると HTTP 仕様 :

PUT メソッドは、指定された Request-URI の下に同封のエンティティを格納するよう要求します。Request-URIが既に存在するリソースを参照している場合、同封のエンティティはオリジンサーバーに存在するものの修正版とみなされるべきです(SHOULD)。Request-URIが既存のリソースを指しておらず、そのURIがリクエストするユーザーエージェントによって新しいリソースとして定義可能な場合、オリジンサーバーはそのURIでリソースを作成することができる。

したがって、両方のケースでURIが事前に知られている場合、挿入または更新のためのPUTの使用は完全に正当であると私は思います。URIの一部としてキーを使用している場合 (たとえば http://www.somewhere.com/resources/k1 のk1のように)キーをURIの一部として使用している場合は、このようになるはずです。しかし、理想的なRESTfulであるためには、同じURLへのGETでリソースをダウンロードすることもできるようにする必要があります。

また、既存のキーをすべて削除して新しいキーを追加する別の操作がありますが、これはレコードをクリアして新しいものを追加するため、POST または PUT ですか。

この操作は2つのことを行っているため、RESTfulとはみなされないと思います。データへの単純なアクセスではなく、特定のクライアントのニーズを満たすためにマクロを提供しているように見えます。標準的な RESTful な設計は次のとおりです。

  1. 親 URL に GET を送信してキーのリストを取得する。上記の例では、次のようになります。 http://www.somewhere.com/resources ;
  2. にDELETEを送信して、それらのキーをそれぞれ削除する。 http://www.somewhere.com/resources/k1 ;
  3. へのPUT送信による置換の追加 http://www.somewhere.com/resources/k2 .

あまり明確ではありませんが、すべてのリソースを削除するには、1つのDELETEリクエストを http://www.somewhere.com/resources .