JSONのDynamic Keyの是非
言語へのバインディングを考えると、MapやDictionaryにマッピングされるため、Aのパターンは型を重視する文化圏の言語では、あまり用いられない。
JSONの定義からのA批判
JSONの定義は、以下のようなものでありMapのデータ型は含めない。
JavaScript syntax defines several native data types that are not included in the JSON standard: Map, Set, Date, Error, Regular Expression, Function, Promise, and undefined.
したがって、Aの表現はJSONとして不適切である。
Valueの型が不定である
Arrayを使うと、中に含まれるデータ型を規定できるが、Mapの場合は型を定義できない。
Aの採用の一理ある理由
Keyで引いた結果をAggregationして返すから
FirestoreなどKey ValueストアがAの形で返すからー、っていうのは設計の放棄だが、BFFなどでバックエンドのAPIから1件ずつIDを元に非同期で取ってきたデータを集約して返す場合、Aの形が自然というのは一理ある。
決め手とならない議論
OpenAPIの仕様ではAは許されてない
additionalPropertiesでDictionary型は許容されるので的外れである。だがadditionalPropertiesは、Entity-Attribute-Valueのアンチパターンをあえて使わざるを得ない、キー不定のデータを扱うケース向けに用意されているので、乱用するものではない。
なお、キー不定のデータを扱うケースでも、nameとvalueの2つのプロパティをもつオブジェクトのArrayでBの形式で返すこともできるが、このときどちらが良さそうか、という議論は↓に見られる。
Aにはidが入ってない
オブジェクト側にもID属性含めればよいだけなので、本質的な議論にはつながらない。
シリアライズ/デシリアライズのライブラリが対応してない/面倒くさい
対応してるものを使おう。