APIを分割する考え方|Webアプリ開発実践ノート Day04 | SORAXIOMラボ

Day04:APIを分割する考え方(Controller的な役割分離)

スポンサーリンク
Webアプリ開発実践ノート

はじめに

Day03では、Node.jsで最小のAPIを作り、
「APIはJSONを返すだけ」という役割を確認した。

今回はそこから一歩進んで、
APIをどう分けて考えるか
つまり Controller的な考え方 を整理する。

この回は、
コード量よりも 構造の理解 を重視する。


なぜ分割が必要になるのか

最初は、1ファイルに全部書いても動く。

ただし少し処理が増えると、すぐにこうなる。

  • 何をしているAPIなのか分からない
  • 修正すると別の処理が壊れそう
  • 似たような処理が増えてくる

これは 処理の役割が混ざっている 状態。

Webアプリでは、
役割ごとに考えること がとても重要になる。


APIの中で起きていること

APIの中では、実は次のような処理が連続している。

  1. リクエストを受け取る
  2. 入力内容を確認する
  3. 処理を実行する
  4. 結果を返す

これらを全部一緒に書くと、
「何をしているAPIか」が見えなくなる。


Controller的な役割とは

ここで出てくるのが Controller的な考え方

Controllerの役割は、とても限定的。

  • リクエストを受け取る
  • 必要な処理を呼び出す
  • 結果を返す

自分では判断しない。処理しない。

あくまで「交通整理役」。


処理はどこに書くのか

実際の処理は、別の役割に任せる。

たとえば、

  • データを加工する
  • 業務ルールを適用する
  • 将来DBとやり取りする

こういったものは、
Service的な役割 に切り出す。


分割後のイメージ

routes / controller
 └─ リクエスト受付
service
 └─ 実際の処理

Controllerは薄く、
Serviceが少し厚くなる。

この構造は、

  • Expressでも
  • NestJSでも
  • 将来の別言語でも

ほぼ共通。


TypeScriptがここで効いてくる

役割を分けると、
データの受け渡し が増える。

ここでTypeScriptの型が効いてくる。

  • Controller → Service
  • Service → Controller

この間で、
「どんなデータが来て、何を返すのか」
を型で明示できる。

これは、
コードで会話する感覚に近い。


なぜ NestJS に近づいているのか

ここまでの考え方は、
実は NestJSの基本構造そのもの

  • Controller
  • Service
  • Module

Expressでこの分割を理解しておくと、
NestJSに移行したときに
「なぜこうなっているのか」がすぐ分かる。


今は「完璧な設計」を目指さない

この段階で、

  • 正解の分割
  • 美しい設計
  • 将来を見越した構成

を目指す必要はない。

大事なのは、

  • 役割を分けて考える
  • 混ぜない意識を持つ

それだけ。


Day04 のまとめ

  • APIは複数の役割でできている
  • Controllerは「受け取って返す」だけ
  • 処理はServiceに寄せる
  • TypeScriptは役割間の橋渡しになる
  • この考え方はNestJSに直結する

次回は、
この分割を実コードで形にする


次回予告

Day05:APIを分割して書いてみる(Controller / Service 実装)

コメント

Copied title and URL