こんな API だったらいいなの案
Accept: application/json
と Content-Type: application/json
を送る
Content-Type: application/json
を送るX-Api-Version: 1
するとか考える「入力された値に不備があり、受け付けられなかった場合」など 422 Unprocessable Entity
を返せるとよい。
ただ、HTTP のステータスコードとして 4xx を返すと、
を区別できず、サーバーの運用上好ましくないかもしれない。
その点を考慮して、「サーバーのエラーではなく、APIの処理上のエラー」に関しては、 HTTP としては 200 を返し、 X-API-Status: 422
を返す、がよい気がする。
「そんな面倒なことしなくても 422 返してしまえばいい」という考え方もありだと思います。(あるいは、 JSON-RPC にしよう、とか)
[
{
"id": 1
},
{
"id": 2
},
]
のように、リソースのみを含むレスポンスがよい。以下のようにメタ情報は含まないようにしたい。
{
"prevPage": 1,
"nextPage": 3,
"total": 100,
"objects": [
{
"id": 1
},
{
"id": 2
},
]
}
メタ情報はレスポンスヘッダに入れる (どんな風に入れるかは検討。大きくないなら JSON で入れてもいいかもしれない) GitHub の API にインスパイアされています。
Link: <https://api.bitkids.com/resource?page=2>; rel="next", <https://api.bitkids.com/resource?page=5>; rel="last"
X-Object-Count: 100
/questions/1
という URL があった時、どのユーザーが見てもレスポンスは同じ
例えば以下のようなことはしない。
{
"secret_column": "my secret data"
}
{
"secret_column": null
}
{
"student": {
"name": "A Student",
},
"answers_count": 10, // 回答のリソースは含まない。回答の数は、場合によっては含んでもよい
}