5

REST API を構築しています。実際、私は共通のガイドとルールを理解しています。

しかし、リクエストで本文を介してデータを送信する必要があるため、DELETE メソッドに問題があります。この DELETE メソッドは本文を無視します。

DELETE メソッドで body 経由で送信するデータを尋ねる場合は、「url」とその他のパラメーターです。もちろん、「url」にはデータベース内の id があるので、DELETE を問題なく使用できますDELETE https://api.example.com/content/url:url_id。しかし、IDを渡すのではなく、URL自体と他のパラメーターを渡すことにしました。私のビジネス ロジックと要件により、DELETE メソッドで ID ではなく URL を渡す必要があります。

したがって、読んだ後、プロキシが DELETE および PUT メソッドをブロックしていることもわかりました。また、HTML フォームは GET および POST メソッドのみをサポートします。

REST API でGETのみ使用する方がよいと考え始めています。POSTだから私はこのような削除とオブジェクトまたはリソースのために POST を使用することができます:

POST /content/delete/url
Body :
    url : xxxx
    param1 : xxxx
    param2 : xxx

しかし、「REST API Design rulebook, O'reilly」の 18 ページには、

「どのCRUD機能が実行されるかを示すために、HTTPリクエストメソッドを使用する必要があります」

次のアンチパターンは、すべきでないことの例です。

GET /deleteUser?id=1234
GET /deleteUser/1234
POST /users/1234/delete

検索してもう一度読んだ後、私はいくつかの解決策を見つけました

  1. 使用してX-HTTP-Method-Override

  2. (api.flickr.com/services/rest/?method=flickr.collections.getInfo)flickerやflicker などの API メソッド名を使用するmailchimp(api.mailchimp.com/1.3/?method=campaignDelete)

「X-HTTP-Method-Override」を使用する解決策1が好きだと思います。どう思いますか?

Google は X-HTTP-Method-Override を使用しているようです。これを参照してください https://developers.google.com/gdata/docs/2.0/basics

Flicker と Mailchimp は、ソリューション 2 のようにメソッド名を使用します

4

3 に答える 3

1

DELETE リクエストで本文を送信することはできません。そしてそれは意味がありません!

RESTful は

DELETE  http://www.plocal:3000/api/v1/content/page-1
DELETE  http://www.plocal:3000/api/v1/content/info-page
DELETE  http://www.plocal:3000/api/v1/content/1
DELETE  http://www.plocal:3000/api/v1/content/2

でのテストコール

curl -v http://www.plocal:3000/api/v1/content -X DELETE
于 2013-01-14T16:56:55.200 に答える
0

ビジネス ロジックの一部であることは承知していますが、再考するか、REST の代わりに別のソリューションを使用することをお勧めします。

あなたが言及したようなことをすることによって、あなたはすべてのRESTの概念を壊し、それでもあなたのアプリケーションで十分なことをしていません.

あなたの場合の最善の解決策は、ビジネスロジックを考えることだと思います。RESTを中断せずに実行できるかもしれません。

それができないと思われる場合は、リストされている最初の解決策をお勧めします。違和感が少ないです。

それが役に立てば幸い。

于 2013-01-14T18:59:24.303 に答える
0

URLは削除するコンテンツの識別情報ですか?もしそうなら、

DELETE https://api.example.com/content/:id 

そして、ID の一部として URL を含めます。ID は厳密に整数である必要はありません。

新しいルートを作成することもできます

resources :content, :except => [:delete] do
  member do
    delete delete_by_url
  end
end

そして、より適切な名前と特定のアクションを持つ新しい削除ルートがコントローラーに作成されます。

DELETE https://api.example.com/content/:id/delete_by_url
于 2013-01-14T18:21:54.843 に答える