APIのレスポンスをListで返すか、Mapで返すかについて

イシュー

  • 世の中のAPIのレスポンスは、ほとんどListで返すだろうが(rssとか)、Mapで返した場合のメリット・デメリットについて考えてみる。

Listのメリット・デメリット

メリット

  • Listの要素数を固定にできるため、Metadataで表現しやすい

デメリット

Mapのメリット・デメリット

メリット

  • キーが分かっていれば、使用する時に変換不要で使える。(Listだとmatchさせるか、Mapに変換する必要がある)

デメリット

  • キーがわかっていないと、value値(のデータ)を取得できない。
    • なので、rssなどのキーが固定されないAPIでは使用できない
  • Mapのキーが要素となるため、Metadataでどう表現するか? (value値がキーになるのでMetadata化できない)
  • ListじゃないのでFilterが作れない(一旦Listに入れなおす必要がある)
    • (Mapだとループさせにくい)
  • Mapの場合、id をキーとするため、id 必須となる。
    • create 時はid 無しで処理するので、mapの構造が、参照時と異なる(List ならid要素がnullであるだけ)

参考

{
  "statuses": [
    {
      "coordinates": null,
      "favorited": false,
      "truncated": false,
      "created_at": "Mon Sep 24 03:35:21 +0000 2012",
      "id_str": "250075927172759552",
      "entities": {
        中略
      },
      "in_reply_to_user_id_str": null,
      "contributors": null,
      "text": "Aggressive Ponytail #freebandnames",
      "metadata": {
        中略
      },
      "retweet_count": 0,
      "in_reply_to_status_id_str": null,
      "id": 250075927172759552,
      "geo": null,
      "retweeted": false,
      "in_reply_to_user_id": null,
      "place": null,
      "user": {
        中略
      },
      "in_reply_to_screen_name": null,
      "source": "<a>Twitter for Mac</a>",
      "in_reply_to_status_id": null
    },
    {
      以下ループ
    }
  ],
  "search_metadata": {
    "max_id": 250126199840518145,
    "since_id": 24012619984051000,
    "refresh_url": "?since_id=250126199840518145&q=%23freebandnames&result_type=mixed&include_entities=1",
    "next_results": "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed",
    "count": 4,
    "completed_in": 0.035,
    "since_id_str": "24012619984051000",
    "query": "%23freebandnames",
    "max_id_str": "250126199840518145"
  }
}