Open5
APIのレスポンスで失敗を避ける考え方
このAPIレスポンスは避けたいオブ・ザ・イヤー2021
{
"imiaruBunmyaku1": "hogehoge",
"imiaruBunmyaku2": "hogehoge",
"imiaruBunmyaku3": "hogehoge",
"imiaruBunmyaku4": "hogehoge",
"imiaruBunmyaku5": "hogehoge"
}
なぜか
- 拡張性の問題
- あとからの仕様の都合でnullableになってイケてない。。.
仕様変更入りましたオブ・ザ・イヤー2021
{
"imiaruBunmyaku1": "hogehoge",
"imiaruBunmyaku2": "hogehoge",
"imiaruBunmyaku3": "hogehoge",
"imiaruBunmyaku4": null,
"imiaruBunmyaku5": null
}
- すでに走り出しているAPIと仮定して、項目をなくすと色々面倒なので、nullを返すようになりました。。
どうしたらええねん。。オブ・ザ・イヤー2021
- nullableは避けよう。
- nullを表現する場合、
"item":null
ではなく、そもそも項目自体を存在させないほうがきれいかも - ネストすることを考えよう
少しはましかな?しらんけどオブ・ザ・イヤー2021
{
"imiaruOmotoBunmyaku1":{
"imiaruBunmyaku1":"hogehoge",
"imiaruBunmyaku2":"hogehoge",
"imiaruBunmyaku3":"hogehoge"
},
"imiaruOmotoBunmyaku2":{
"imiaruBunmyaku4":"hogehoge",
"imiaruBunmyaku5":"hogehoge"
}
}
ポイント
- 意味ある文脈にてネストすることで、nullableの表現がきれいになる。
- 新しい項目を追加しやすくなる
表したい意図の例
-
imiaruOmotoBunmyaku1
,imiaruOmotoBunmyaku2
は両方あるかもしれないし、両方ないかもしれない -
imiaruOmotoBunmyaku1
があるということは、imiaruBunmyaku1
,imiaruBunmyaku2
,imiaruBunmyaku3
は基本的にある -
imiaruOmotoBunmyaku2
があるということは、imiaruBunmyaku4
,imiaruBunmyaku5
は基本的にある -
imiaruBunmyaku4
,imiaruBunmyaku5
がともnull ならば、imiaruOmotoBunmyaku2
以下はなくて良い
APIはフロントエンドエンジニアのための情報をかえす。エンドユーザーのための情報は返さなほうがよいかも