API チェックリスト

  • URIが短く入力しやすくなっているか
  • URIが人間が読んで理解できるようになっているか
  • URIが小文字のみで構成されているか
  • URIが改造しやすくなっているか
  • URIにサーバ側のアーキテクチャが反映されていないか
  • URIのルールは統一されているか
  • 適切なHTTPメソッドを利用しているか
  • URIで利用する単語は多くのAPIで同じ意味に利用されているものを選んでいるか
  • URIで使われている名詞は複数形になっているか
  • URI中にスペースやエンコードを必要とする文字が入っていないか
  • URI中の単語はハイフンでつないでいるか
  • ページネーションは適切に設計されているか
  • ログインにはOAuth2.0を利用しているか
  • レスポンスのデータ形式はJSONがデフォルトになっているか
  • データ形式の指定にはクエリパラメータを使う方法をサポートしているか
  • 不要なJSONPに対応していないか
  • レスポンスのデータ内容はクライアントから指定できるようになっているか
  • レスポンスデータに不要なエンベロープが入っていないか
  • レスポンスデータの構造は可能なかぎりフラットになっているか
  • レスポンスデータが配列ではなくオブジェクトになっているか
  • レスポンスのデータ名として多くのAPIで同じ意味に利用されている一般的な単語を選んでいるか
  • レスポンスのデータ名はなるべく少ない単語数で表現しているかレスポンスのデータ名として複数の単語を連結する場合、その連結方法はAPI全体を通して統一してあるか
  • レスポンスのデータ名として変な省略形を使用していないかレスポンスのデータ名の単数形/複数形はデータの内容と合っているかエラー時のレスポンスはクライアントが原因を切り分けられるような情報を含んでいるかエラーの際にHTMLが返っていないか適切なステータスコードが返るようになっているか
  • メンテナンス時には503を返すようになっているか適切なメディアタイプを返しているか
  • 必要な場合はCORSに対応しているかクライアントが適切にキャッシュを行えるようにCache-Control、ETag、Last-Modified、Varyなどのレスポンスヘッダを返しているかキャッシュをさせたくないデータにはCache-Control:no-cacheが付けられているか
  • APIはバージョンで管理されているか
  • APIのバージョンはセマンティックバージョニングに沿ったものになっているかメジャーバージョン番号がURIに入っており、ひと目でわかるようになっているか
  • APIの提供を終了する際のことを考慮に入れているか
  • APIの最低提供期間をドキュメントに明記しているか
  • HTTPSでAPIを提供しているか
  • JSONのエスケープをきちんと行っているか
  • JSONはX-Requested-Withヘッダを認識するなど、SCRIPT要素では読み込めないようになっているか
  • ブラウザからアクセスさせるAPIではXSRFトークンを利用しているか
  • APIが受け取るパラメータはきちんと不正値(マイナスの値など)をチェックしているかリクエストが再送信されてもデータを再度更新してしまわないようになっているかレスポンスにセキュリティ対策用の各種ヘッダをきちんと付けているかレートリミットによる制限を行っているかレートリミットの制限回数は想定されるユースケースに対して少なすぎないか