RESTful APIのレスポンスデータ設計
APIを利用する側にレスポンスとしてどのようなデータを返却するかを検討する。
レスポンスデータを設計する上での考え方
APIのレスポンスデータはほとんどの場合プログラムで処理される。また、HTTP経由でAPIが呼ばれるため、HTTPのオーバーヘッドも発生する。そのため、
- できる限りプログラムで処理しやすいレスポンスデータ
- APIへのアクセス回数は極力最小限に
を念頭に検討する必要がある。
レスポンスデータのフォーマットを検討する
JSON、XML等のフォーマットを検討する。昔はXML形式が多かったが最近はJSON形式が主流。以下はGoogleトレンドの検索結果(赤は「xml api」、青は「json api」)。
また、主要なWebサービスはJSONを基本としていて、サービスによってはXMLもサポートしている。つまり世のWeb APIはJSONがデファクトスタンダードとなっている模様。なので、深く検討せずJSONで決めてしまい、需要があればXMLもサポートするという形が好ましいと思う。なお、なぜXMLではなくJSONなのかというのは、JSONに押されるXMLの存在にも記載があるが、簡潔にまとめると以下の通り(「XMLが悪い」と否定しているわけではなく、JSONのほうがマッチしているということ)。
- JSONのほうがシンプル
- JSONのほうがJavaScriptとの相性が良い
レスポンスデータを検討する
実際にどんなデータを返すかを検討する。その際の考え方として、冒頭でも記載した通り「APIへのアクセス回数は極力最小限に」ということを念頭に検討する。そのためにもRESTful APIのリソース設計#何をリソースとするかでも記載した通り、APIのユースケースを明確化しておく必要がある。例えば、本の情報を返すAPIがあった場合、以下のようなレスポンスデータ(idのみ)を返すとする。
{
"books": [
00001,
00002,
00003,
00004,
00005
]
}
本のidだけ返却しても、APIを利用する側からするとほとんどの場合あまり意味はない。APIを利用する側のユースケースとしては、「本の情報を一覧表示する」というケースが考えられるので、最低限idの他にも本の名前、本の詳細を記載したページのURL(もちろん詳細のURLではなく出版社、出版日等の詳細情報を直接返却してもよい)も必要としていることが考えられる。そのため、以下のようにすることで一度のAPI呼び出しで必要な情報が全て取得できるので、APIのアクセス回数を少なくさせることができる。
{
"books": [
{
"id": 00001,
"name": "本の名前1",
"url": "http://example.com/books/00001"
},
{
"id": 00002,
"name": "本の名前2",
"url": "http://example.com/books/00002"
},
{
"id": 00003,
"name": "本の名前3",
"url": "http://example.com/books/00003"
}
]
}
各項目の項目名のデータ型の定義
RESTful APIのリソース設計#リソースの各項目のデータ型の定義にも記載した通り、レスポンスデータの各項目のデータ型や項目名を検討する。データモデル設計でやっても問題ないと思うが、どちらかというとリソース設計の段階で検討するべき内容だと思う。なお、項目名を命名する際の注意点としては以下のようなものがある。
- 多くのAPIで同じ意味に利用されている一般的な単語を用いる
- なるべく少ない単語数で表現する
- 変な省略形は極力利用しない
- 複数の単語を連結する場合、その連結方法はAPI全体を通して統一する
- 単数形/複数形に気をつける
エラー発生時のレスポンスデータの検討
RESTful APIのエラー設計で別途まとめた通り。
参考
Author And Source
この問題について(RESTful APIのレスポンスデータ設計), 我々は、より多くの情報をここで見つけました https://qiita.com/NagaokaKenichi/items/cb04af4f2c71e36bb670著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .