Lang x Lang

API の設計

API 設計方針

API が兼ね備える機能は、概ね以下の通りだ。

  • Authentication (Bearer etc)
  • CORS etc
  • Validation (Params/Methods...)
  • Endpoints (CRUD)
  • DB Access (incl. Caching)
  • (External API Access)
  • Formatting Response
  • Error Handling
  • Logging

脆弱性検査で指摘されやすいポイントとしては、

  • Fetch all
  • Sequentila Parameter
  • Raw Sensitive Information
  • Secret Keys Rotation

あたりだ。これらのうち、案件の内容に左右されるのは、

  • Authentication (Bearer etc)
  • Endpoints (CRUD)
  • (External API Access)

だけなので、それ以外はフレームワーク化してしまいたい。

  • Authentication (Bearer etc)

は、有効な認証パターンがそんなにたくさんある訳ではないので、ライブラリ化して案件によって選択するようにしたい。

  • Endpoints (CRUD)

上記ができてると、これが実装のメインになり、たくさん作ることになるので、基本的なものは、テンプレート化してしまいたい。なるべく工夫の余地をなくし、ササッとテストするだけで良いようにしたい。 ユーザ向けの API と CMS 等で使う API は必要なものが異なるので、そのあたりも考慮して、テンプレート化したい。

  • (External API Access)

外部 API 等へのアクセスは、何度も使うようなものは、AWS S3 へのファイルアップロードくらいなので、都度やれば良くて、メンテナンス工数を考え、仕組み化はしない。

その他にも、Logging が案件によって何を/どこにログするの変わったりするが、これも仕組み化はしない。

モチベーションが下がるドキュメンテーション

とにかく面倒くさくて精神が削られていくのが、

  • API 仕様書
  • ER 図

の作成などだ。あと、DB のテーブル仕様書など。openapi.yaml/json をせっせと書いたり、ER 図をチマチマ書くのは、正直実装より時間がかかる。しかも ER 図などは、先方がきちんと確認してくれたことがないが、これまで納品してもらっているから、という理由で納品を求められるケースが多い。

しんどい。やりたくない。

なのだけど、実際、概ねこれらはコード内で定義したスキーマ設定の別表現、Visualization なだけであったりする。世の中便利なツールがあるので、それらを活用して自分ではやらなくて良いようにする。

もうひとつ、使用している OSS のライセンス一覧の作成も面倒くさい。面倒くさいだけでなく、便利だけど NO LICENSE だったりするやべーの使ってないかは、あとで気づくと泣きながら修正することになる。こちらはピンとくるツールはあんまりないのだが、全部手動で調べるようなことにはならないようにする。

その他に API にあると嬉しい機能

  • Docker で動く
  • リリースバージョンが分かる
  • health check のエンドポイント

Production へのリリースは、今どきだと、Container をリリースすることが多いので、Docker で動くことを前提とする

活発に開発をしている際は、Container を push してからサーバに Deploy されるまで時間がかかったり、Deploy に失敗したことが手元では分からなかったりなど、何が動いているかを確かめる必要がある。また、検証環境が複数あって、UAT で上がってくるバグ・CR のレポートの原因を特定するにもバージョンが分かると嬉しい。

health check のエンドポイントも、AWS 等の環境に Deploy するのにあった方が良い。

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use