APIのJSONレスポンスの形式を考える。

未分類


APIの形式は最初にベースをフォーマットを考えて、その形式で統一するのがベストです。

そこでベースフォーマットがどのような形が一般的(汎用的)なのかを調べてみました。

2015年に書かれた記事で、こういったJSONフォーマットがあって、この形で作れば同様の形式で作られたソースを使う事があって便利と言う記事でした。

https://qiita.com/tkawa/items/2841e155e5b51c09ed40

上記の記事のパターンだとかなり重い感じしたので、もっとライトな感じで独自のフォーマットの方が自分は使いやすいかなと思った時に下記の記事を発見しました。

https://zenn.dev/hulk510/articles/bf585a91d6e1b1286e07

自分の前のいたプロジェクトでは、とりあえずdataの中に値を書きましょう的な事しか定義されていなかったのですが、上記の記事では、dataだけでは中身が分かり辛い場合はdataじゃなくてちゃんと値を付けましょうって事でした。

結局どんな形式がよさそう?

よさそうな候補があったのでピックアップ。

まずはJSENDと言うJSONフォーマット形式
statusにまず、success、fail、errorの三種類から選択しのちにデータ等を入れる。
statusではなくsuccessのtrue,false判定も良いかと思ったのですが、エラーの種別がより分かりやすい事からこちらの方が個人的には好みです。

説明必須のキーオプション
success処理の成功status,data
fail処理の失敗status,data
errorシステム上のエラーsatus,messagecode,data

成功のパターン(success)
取得の場合

{
    status : "success",
    data : {
        "user" : { "name" : "山田太郎", "age" : 12" }
     }
}

作成の場合

{
    status : "success",
    data : null
}

失敗の場合(処理の失敗)

作成処理の場合にvalidationにひっかかった場合等

{
    "status" : "fail",
    "data" : { "name" : "名前は必須です" }
}

失敗の場合(システム上のエラー)

DBに接続できない場合

{
    "status" : "error",
    "message" : "データベースに接続に失敗しました。"
}