8

HTTP DELETE と REST について質問があります。リソースxがあります。xの状態に応じて、xを削除すると次のいずれかが実行されます。

  1. xを完全に削除します。
  2. xを削除済みとしてマークします。これは、xを後で元に戻すことができることを意味します。

HTTP DELETE は、リソースを削除済みとしてマークするのではなく、HTTP/REST の仕様に従ってリソースを削除する必要あると想定しています。これは、2 番目の状況では HTTP DELETE を使用できないことを意味します。この削除動作 (1 と 2 の両方) を RESTful な方法でどのようにモデル化しますか?

次に、一部のリソースを元に戻すことができるため、これも REST API を介して可能にする必要があります。RESTful な方法で元に戻す動作をどのようにモデル化しますか?

簡単にするために、 xがhttp://company/api/x/あるとします。

4

3 に答える 3

5

ごみ箱のアプローチを使用できます。

DELETE http://company/api/x/

xをゴミ箱に移動します。その時点で、次のコマンドでアクセスできます。

GET http://company/api/trashcan/x/

復元したい場合は、取得した表現を取得して実行します

PUT http://company/api/x/

アップデート:

ハイパーメディアを使用すると、クライアントが何をすべきかが少しわかりやすくなります。

GET http://company/api/trashcan/x
=>
200 OK

<x-resource>
  <description>This is the object I deleted</description>
  <link rel="restoreto" href="http://company/api/x/" />
</x-resource>

もう少し考えてみると、PUTは本当に正しい方法です。これは安全ではなく、べき等であり、ファイルを復元する場所のURIも知っています。PUTのセマンティクスに完全に適合する場合。rel = "restoreto"の代わりに、rel="originallocation"を使用することもできます。

于 2011-07-20T14:56:28.497 に答える
3

リソースをある状態から別の状態に移動するアクションを使用して、いくつかの状態(アクティブ、marked_for_deletion、削除済み)のいずれかに存在できるリソースがあります。これは、ステートマシンの古典的な定義です。特定の遷移について、「その特定の遷移を表すHTTP動詞は何ですか?それを悪用する必要がありますか?POSTはキャッチオールですか?自分で発明できますか?」と自問自答します。より良い方法があります。状態を直接公開し、GETとPUTを使用して状態を変更します。サーバーに、以前の状態から新しい状態に移行する方法を理解させます。たとえば、次のようなリソースがあります。

GET /foo -> {"a": 1, "b": 2, "status": "active"}

次のように変更します。

GET /foo -> {"a": 1, "b": 2, "status": "marked"}

DELETEがそれに適しているのか、それともカスタムメソッドが適切なのか疑問に思うかもしれません。あるいは、その新しい状態をPUTして実行することもできます。

GET /foo -> {"a": 1, "b": 2, "status": "active"}
PUT /foo <- {"a": 1, "b": 2, "status": "marked"}
GET /foo -> {"a": 1, "b": 2, "status": "marked"}
于 2011-07-20T15:22:28.790 に答える
0

RESTful は、必要に応じて POST を使用して削除を実行できることを意味します。SOAPベースの Web サービスとは異なり、RESTful Web サービスには「公式の」標準はありません。

この場合、Mark For Delete を POST に変更します (実際には更新であり、削除ではありません)。

于 2011-07-20T13:31:08.233 に答える