Skip to content

3.4 各データのフォーマット

3.4 各データのフォーマット

3.4.1 各データの名前

データ項目の名前についての考え方

  • 多くの API で同じ意味に利用されている一般的な単語を用いる
  • なるべく少ない単語数で表現する
    (エンドポイント名が/users なら userId ではなく id で良いなど、エンドポイント名も考慮に入れる必要あり)
  • 複数の単語を連結する場合、連結方法は API 全体を通して統一する
  • 省略系は極力利用しない
  • 単数形/複数形に気を付ける
    (この項目で返る値が複数になる可能性があるのか、1つのみなのか)

3.4.2 性別のデータをどう表すか

項目名によって変わる。

sex (生物学的な性別)

生物学的な性別はその他 (不明等) を含めても 3 種類
⇒文字列 (male, female 等) や数字 (1: male, 2: female)

gender (社会的・文化的性別)

社会的に認められつつある性別 (Cis Woman, Trans 等) も含まれるため数が多い。
また今後増減する可能性がある。
⇒基本的に文字列で表す

どちらの項目名を使うかは、サービスが生物学的な性別が必要な場合は sex、そうでない場合は gender を利用する。
API 全体で統一すべき。

3.4.3 日付のフォーマット

フォーマット例

形式名
RFC 822 Sun, 06 Nov 1994 08:49:37 GMT
RFC 850 Sunday, 06-Nov-94 08:49:37 GMT
ANSI C の astime() 形式 Sun Nov 6 08:49:37 1994
RFC 3339 2015-10-12T11:30:22+09:00
Unix タイムスタンプ (epoch 秒) 1396821893

広く一般に公開され、どのようなユーザーが利用するのか予測が難しい API(LSUDs をターゲットとした API) ではRFC 3339を利用するのがよい。

タイムゾーンはUTC(協定世界時, +00:00) を利用するのがよい。

自社アプリ等で SSKDs 対象の場合は Unix タイムスタンプも候補に挙がる。

3.4.4 大きな整数と JSON

大きな数字は処理するシステムや言語によってはトラブルになることがある。
例として JavaScript では数値をすべて 64 ビット浮動小数として扱うため、下記を実行すると 462781738297483260 となり誤差が生じる。

var data = JSON.parse('{"id": 462781738297483264}');
console.log(data.id); // 462781738297483260

このような問題を回避するためには、ID などで巨大な数値を扱う場合は数値をそのままかえすのではなく、文字列として返すと回避することができる。(Twitter API では数値とともに文字列を格納して返している)