5

user_stats というリソースがあるとします。このリソースには、ユーザーの投稿、コメント、いいね、フォロワーの数などがあります。その統計の一部のみを要求する RESTful な方法はありますか (つまり、user_stats/3 の場合、このユーザーが持っている投稿とコメントの数を教えてください。ただし、このユーザーが持っているフォロワーの数は教えてくれません)。

私が尋ねている理由は、いくつかの統計属性が計算集約的である可能性があるためです (はい、クエリ時にそれらを生成しています)。したがって、単にそれを求めないだけで、作業負荷を軽減できます。

4

2 に答える 2

10

Web API の設計に関するベスト プラクティスが記載された、非常に役立つ 38 ページの無料の電子ブックがあります。少なくとも私は役に立ちました。

あなたの場合、それは述べられています:

コンマ区切りのリストにオプションのフィールドを追加する

Google のアプローチは非常にうまく機能します。

このアプローチを使用して、dogs API から必要な情報だけを取得する方法は次のとおりです。

/dogs?fields=name,color,location

読みやすいです。開発者は、特定の時点でアプリが必要とする情報だけを選択できます。モバイルアプリにとって重要な帯域幅の問題を削減します。部分選択構文を使用して、必要な情報を取得するために必要な要求の数を削減する関連リソースを含めることもできます。

多分それはあなたが探しているものですか?

于 2013-04-12T20:52:55.120 に答える
3

少なくとも 3 つのオプションがあります。

  1. クエリ パラメータをフィルタとして使用する

    例: user_stats?fields=posts,comments

  2. user_stats 複合リソースを作成し、特定の統計用の新しいリソースを作成します

    例: JSON の /user_stats

    {
      "blogs" : {
          "count" : 10,
          "link" : "/user_stats_blobs"
       },
       ...
    } 
    

    その後、統計全体 (GET /user_stats) または一部 (GET /user_stats_blobs) を取得できます。

  3. フィルター表現を作成します。POST を使用して、フィルター表現をリクエストの一部として投稿します

    例: Request POST /user_stats/filter

     {
         "fields" : [ "blogs", ...]
     }
    

    応答本文には、要求/フィルタリングされたデータのみが含まれます。

すべてのソリューションは RESTful です。解決策 1. は簡単に実装できますが、拡張性と透明性に制限があります。解決策 2. この場合、オーバーヘッドとなる新しいリソースを作成する必要があります (必要な数値は 1 つだけです)。そのため、解決策 3 をお勧めします。これは、実装がそれほど難しくなく、簡単に拡張でき、透過的であるためです。

于 2013-04-12T20:53:28.913 に答える