API 設計をやってみる

アルバイト

RESTful Web API の概念

そもそも API というのを開発したことがないので、まずは RESTful Web API の基礎概念を学習した。

Representational State Transfer - Wikipedia
Learn REST: A Tutorial
Trying: REST api design
A RESTful Web service, an example
http://www.freshblurbs.com/pragmatic-restful-api-design
http://www.stereoplex.com/blog/mobile-api-design-thinking-beyond-rest

これらのドキュメントから wikipedia:CRUD の考え方、API 設計と URL 設計の違い、リソースの考え方、バージョンと言語のパラメータ、サンプルをみてイメージを膨らませた。また最後の Mobile API Design の記事は、Nate Aune と Anna Callahan による valentun.es の講演について書かれたもので、ちょうど同じお話しを EuroPython 2011 で私も聞いていた。

Put another way, PUT is idempotent - if you do the same PUT twice (and there's no other state changes in between) then the system state will be the same. POST carries no such guarantee.

PUT は idempotent なんだという概念を知らなくて斬新だった。

API 設計

これも EuroPython2011 の基調講演から、一般論として API は階層化するのが良いというのを学んだ。そこで低レベル API と高レベル API を提供し、高レベル API は低レベル API で実装する。低レベル API はテーブルの操作を個別にできるようにすれば良いのかな?と考えて、必要かどうかレビューしてもらったら、高レベル API のみで良かった。

データ定義

いま見てる ER 図は、マスタ系とトランザクション系のテーブルが混在し、さらにそれがテーブル定義書も兼ねている。資料の作り方として、自分なりにメリットとデメリットを考えてみる。

  • メリット
    • 1つ資料に全ての情報が集約されるのでメンテナンスが容易
  • デメリット
    • リレーションに関係ないテーブルがある
    • リレーションの見通しが悪くなる (不要な情報がスペースを占有するから)
    • テーブルのカラムのデータ型や用途、制約を定義するスペースがない

良い悪いのお話じゃなくて、やり方の違いを実感しているところ。ER 図やテーブル定義書を作らない人もいるし、、、。私は基本的にトランザクション系テーブルの ER 図は書かないし、トランザクション系の ER 図が必要な状況があるとしたら、ビジネスロジックの方がおかしいと私は思う。