4

したがって、オブジェクトの状態を変更しないオブジェクトに対してアクションを実行するためのベストプラクティスを知りたいと思います。それが意味をなさないのであれば、ツイートの例は私が言おうとしていることを説明していると思います。

私はここで説明されているような基本を理解しています:

最良/一般的なRESTfulURL動詞とアクションは何ですか?

また、オブジェクトを更新/取得/削除する場合などにどのように機能するか。しかし、オブジェクトの状態を変更しないアクションについてはどうでしょうか。

たとえば、ツイートオブジェクトがあるとします。

GET     `/tweets  (gets a list of tweets)
GET     `/tweets/new (gets a new page to create a new tweet)
POST    `/tweets (posts data to server to create new tweet)
GET     `/tweets/:id (get a single tweet)
GET    `/tweets/:id/edit (get a page to edit an exisiting tweet)
PUT    `/tweets/:id (put data to server to edit exisiting tweet)
Delete `/tweets/:id (delete an exisiting tweet)

これは私には理にかなっています。しかし、返信/フォロー/リツイート/お気に入りのURLを作成するにはどうすればよいですか?そのうちのいくつかは実際にはツイートの状態を変更しませんか?

私は以下のようなことをすべきですか?

POST   `/tweets/:id/reply       (post the reply message to the server)
POST    `/tweets/:id/follow     (post a boolean? yes I follow?)
POST    `/tweets/:id/retweet    (again post a boolean?)
POST    `/tweets/:id/favorite   (ditto)

または

POST     `/tweet/:id/actions  (Do a post with the action I want to take as a parameter)

または、「標準的な方法」はありません。とにかく助けてくれてありがとう!

4

1 に答える 1

3

素晴らしい質問です。

いつものように、フレーミングを動詞ではなく名詞に切り替えるのに役立ちます。返信などで行動しているリソースは何ですか?また、それらのリソースをフェッチ/アドレス指定することもできますか?

あなたが言及したそれぞれの場合において、私は2番目の質問に対する答えはイエスだと思います。実際、FacebookのGraphAPIGitHubのRESTAPIはどちらもこのアプローチに従います。

返信の例:

  • GET /tweets/:id/replies指定されたツイートに返信したツイートのリストを取得します

  • POST /tweets/:id/replies指定されたツイートに返信して新しいツイートを作成します。ここで重要なのは、成功は、作成されたツイートのエンドポイントにヘッダーが設定されていること201 Createdです。Location/tweets/1234

  • (返信を削除すると、ツイートが削除されます。)

「名詞」は軽量の接続であるため、フォロー/リツイート/お気に入り設定は少し注意が必要です。実際、これらを公開するための「最良の」方法について、StackOverflowに質問しました。

RESTful API設計:軽量接続をCRUDするための最良の方法?

そのスレッドで、フォロー/リツイート/お気に入り設定を実装する特定の方法を確認できます。

お役に立てれば!

于 2012-12-01T16:43:11.057 に答える