こんな 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, // 回答のリソースは含まない。回答の数は、場合によっては含んでもよい
}