2016-04-18 9 views
5

私はjsonapiを使用してすべてのAPIレスポンスのデータを記述する可能性を検討中のアプリケーションに取り組んでいます。リソースのようなエンティティではうまく機能しますが、レポートデータをjsonapiのような方法で記述する方法がいくつかあります。JSON APIで無駄な集計データを表現する

レポートデータでは、データベースに格納された基本的なリソースのようなデータから、集計して計算したデータを参照します。たとえば、不動産に関する情報を保存するとします。また、住宅、アパート、オフィススペースに関する情報があります。それぞれの場所、面積、サイズ(平方フィート)、不動産の種類(住居、アパート、オフィススペース)およびプロパティに関するその他の関連情報。ここで、?group_by[]=location&group_by[]=typeを受け取るレポートが必要であるとし、その2つのパラメータの交差に関する集約された情報をレスポンスで伝えたいとします。たとえば、指定された場所のすべてのプロパティの平均平方フィートの領域を含むオブジェクトをプロパティのタイプ別にグループ化したものが表示されます。

Average Property Sizes (in square feet) 
       Houses Apartments Offices 
Manhattan  1234.56  234.56 123.45 
Cape Coral  456.78  654.32 876.54 
Portland  4321.00  987.65 2345.67 

私たちは、このデータから考えることができる最も資源のようなものは、各セルであるが、彼らはより基本的なデータの計算された集計の結果であることから、彼らは自然のIDを持っていません。計算されたIDでデータを配信することも考えています(データがグループ化されたディメンションのIDを組み合わせた場合)"house,34"houseはプロパティのタイプを表し、34はロケーション「マンハッタン」のIDです。 )。次に、各セルは、ペイロードのincludedセクションに含まれる対応するロケーションレコードとの関係を持ちます。ここでは、このように見えるだろうかのサンプルJSONファイルです:

{ 
    "data": [ 
    { 
     "id": "house,123", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "house", 
     "value": 108.75 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 123 
      } 
     } 
     } 
    }, 
    { 
     "id": "house,124", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "house", 
     "value": 36.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 124 
      } 
     } 
     } 
    }, 
    { 
     "id": "house,125", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "house", 
     "value": 1.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 125 
      } 
     } 
     } 
    }, 
    { 
     "id": "office,123", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "office", 
     "value": 4.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 123 
      } 
     } 
     } 
    }, 
    { 
     "id": "office,124", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "office", 
     "value": 2.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 124 
      } 
     } 
     } 
    }, 
    { 
     "id": "apartment,123", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "apartment", 
     "value": 2.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 123 
      } 
     } 
     } 
    }, 
    { 
     "id": "apartment,125", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "apartment", 
     "value": 4.5 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 125 
      } 
     } 
     } 
    }, 
    { 
     "id": "apartment,124", 
     "type": "report_items", 
     "attributes": { 
     "property_type": "apartment", 
     "value": 2.0 
     }, 
     "relationships": { 
     "location": { 
      "data": { 
      "type": "locations", 
      "id": 124 
      } 
     } 
     } 
    } 
    ], 
    "included": [ 
    { 
     "type": "locations", 
     "id": "123", 
     "attributes": { 
     "name": "Manhattan" 
     } 
    }, 
    { 
     "type": "locations", 
     "id": "124", 
     "attributes": { 
     "name": "Cape Coral" 
     } 
    }, 
    { 
     "type": "locations", 
     "id": "125", 
     "attributes": { 
     "name": "Portland" 
     } 
    } 
    ] 
} 

私の質問です:これはjsonapiでこの種のデータを表現する適切な方法は何ですか? jsonapiはリソースに直接マップされないデータに適していますか?カスタムjsonでこのデータを表現する方が良いでしょうか?私はこれらの質問にはおそらく明確な答えがないことを知っていますが、おそらく、このようなデータをjsonapiなどに適合させるための類似のシナリオ、賛否両論に近づく方法についての経験は既にあります。とても有難い。ありがとう。

PS:フォーラムやインターネットで掘り下げた後でも、これを投稿しました。これらのリンクは、私が見つけようとしているものに似ていることがわかりました。ここでは、同様の参照のために: 1.- http://discuss.jsonapi.org/t/composite-id-inside-the-resource-object/367/13 2.- http://discuss.jsonapi.org/t/extension-for-chart-graph-data/408

+0

この特定のケースに対する具体的な解決策は求めていませんが、JSON APIをこのような無駄なデータに使用する可能性に関する情報はありません。それはお勧めですか?私のデータをJSON APIに適応させるために余分な努力を払う必要がありますか? JSON APIは、リソースのようなデータに特化して使用されるように設計されていますか? – Ernesto

答えて

3

一般的な答えは、あなたのAPIの両側の身元を保証するのに十分重要であるデータを検討することです。これは、後で参照するか関係で表現するかを決定することを意味します。 JSON APIを使用すると、それらのリソースをリソースとして定義し、不透明なデータに対してより汎用的なJSONとリソースを混在させることができます。

たとえば、おそらくreportsであり、クライアントの作成に使用したオプションとフィルタは、クライアントがidによって同じレポートを最新表示するようにトラッキングする価値があります。サーバーをポーリングして、どのレポートが作成されているかを確認することができます。

クライアント側では、property_typeリソースからそれらのプロパティタイプに関する詳細へのリンクを提示したい場合があります。

おそらくレポート内の結果は、リソース内のJSONのブロブとして表現されることがあります。 attributesおよびmetaには、任意のタイプのJSON値を含めることができます。あなたの特定の場合において

、プライマリリソースタイプreports、又はreport_itemsのアレイ、又はおそらくproperty_typeslocationsに関係を持つproperty_summariesの偶数配列のものであってもよいです。

より一般的な種類のリソースを選択した場合は、レポート処理を一般化できますが、データの重要性は把握できません。

レポート用に特定のリソースを選択する場合は、各タイプのレポートを実際にカスタマイズする必要がありますが、クライアント上のリソース間では意味のある接続を行うことができます。

関連する問題