うまく言いたいことや考えがまとまらず書く書く詐欺になっているので、ひとまず起こっていること・思っていることを書いてみたいと思います。
起こっていること
シンプルな、データの永続化を行うだけのWeb APIが、リソースの種類ごとにそれぞれ作られています。「ビジネスロジック」はこの中には極力入れないルールになっています。
思っていること
ということは、今作っているAPIは単なる劣化版SQLでしか無いのではないか、というのが昨今の悩みです。
SQL(or RDB)に比べて良くなっている所
- HTTP故に得られる恩恵があります
- (使おうと思えば)Varnishなどのキャッシュが使えます
- ロードバランサーによる負荷分散ができます(でも後ろのDBは結局シングルポイントです)
- サーバを複数台使用した際の、Service-In や Service-Outが容易です
- ApacheやNginXなどのWebサーバが持っているアクセスコントロール機能やログ機能が使えます
- アプリケーションレベルでログが自由にカスタマイズできます
SQL(or RDB)に比べて不便になっている所
- トランザクションを自力で実装する必要があります。特に、要件上、複数リソースにまたがる原子性が要求されるようなケースでは、
原子性が破壊されないような仕組みを、Consumerが実装する必要があります。
- 一般に、HTTPはコネクションのオーバーヘッドが大きいため、DBアクセスに比べて1リクエストあたりの時間がかかります。サービスによっては大きなボトルネックになることがあります。
SQL(or RDB)と変わっていない点
- ふるまいを記述しないルールなので…
- Consumerの実装次第では本来許容されないようなデータを作成することが可能です
- データの使い方が複雑な場合に、Consumerがデータの解釈方法を知る必要があります
…抽象的すぎて、何を書いてるか、自分でもよくわからないなぁ。