2012-03-23 14 views
3

RESTful APIで順序付きリストを処理する最良の方法は何か疑問です。次の例を想像してみましょう:新しいLPを追加したい、TOP10にないLPを削除し、その位置を変更するLPのチャートリストを作成しましょう。これらのメソッドをRESTful JSON-APIでどのように実装しますか?RESTfulな方法で順序付けされたリストを処理する

私は次のように考える:

  • GET/ STHを返し、そのユニークなIDでLPを返すために[{ "name": "1st-place LP", "link": "/uid123" }, { "name": "2nd-place LP", "link": "/uid987" }, ...]
  • GET/{UID}よう命じたチャートのリストを返すために、 。例えば、アクセスするためのGET /ランキング/ {位置}。現在のチャート位置

を指定せずに新しいLPを作成するために、リクエストボディ{ "name": "my first LP title" }Location: /uid123

  • POST/のような場所、ヘッダーと303 See Otherを返す現在1位のLPは、今では質問方法です現在のチャートポジションを変更できますか?単にPUT/{uid} ranking属性を更新することができますが、PUT /ランキング/ {位置}はもっと自然だろうと思います。一方、GETを使用する場合は303 See Otherを返すURIに対してPUTを実行するのは意味がありません。

    このようなチャートリストに対処するにはどうすればよいでしょうか? LP-データセットの属性を単にrankingという属性に変更するという解決策は、同じランキングで2つのLPのように無意味な状態に終わる可能性があるため、私は好きではありません。

  • 答えて

    1

    2つの質問があります。 1. APIを設計する最もRESTful(美しい)方法は何ですか? 2. 2つのLPが同じランクにならないようにするにはどうすればよいですか?

    1: あなたのLPには、お互いに関連するいくつかのプロパティがあります。異なるチャートで異なるランキング。私はあなたのLPリソースからランキングを外したかったと言います。別のリソースとして特定のリストのランキングを保つ。例:

    • GET/LPuidはランキング
    • GET /看板リストに3をrankningたLPに3 /看板戻りURIなどのLPについての性質ではなく、相対的な特性を、返します。
    • PUT/billboardは100個のLP URIの文書を取ります。
    • PUT/billboard/3そのランキングでLP URIを挿入し、他のものを下に移動します。

    2:これは休憩とは関係がなく、APIをどのように設計しても問題は発生します。トランザクションは1つの解決策です。

    0

    音楽サービスには2つのコレクションリソースがあります。そのため、私はこのようなURI構造を設計します:

    / => returns links to collections (ergo itself a collection resource) 
    /releases => returns a list of LPs 
    /chart => returns the top 10 LPs, or redirects to the current chart URI 
    

    あなたは/releasesからPOSTが新しいグラフを定義したり、現在のチャートを変更する/chartに新しいLP、およびPUTまたはPATCHを追加します。いずれの場合にどの表現形式が転送されるかを定義する必要があります。

    これが定義するフレキサビリティは、それはクリスマスの日に、2012年

    が立っていたとして、私は特定の位置にLPを挿入し、他のすべてをダウンシャッフルするPUT /chart/{position}を使用することをお勧めしていないチャートを表示する/chart/2012-12-25のように考えているあなたに与えます。仲介者は、そのURIへのPUTが他のリソースにURIを変更させることを知らない。これはキャッシュに悪いことです。

    また、ユーザーとしては、他の回答が示唆するように、「看板」という言葉を避けていただきたいと思います。広告掲示板は、広告掲示板の心の写真に描かれており、ランキングチャートとは関係ありません。

    関連する問題