メインコンテンツまでスキップ

Server API Strategy

Overview

サーバーサイドAPIの設計において、ルーティング方式(パスベース vs サブドメインベース)の選択は、アプリケーションの構造やセキュリティ、拡張性に大きな影響を与えます。
NestJS はどちらの方式もサポートしており、ユースケースに応じた選択が可能です。

パスベース vs サブドメインベースの違い

項目パスベース(例: /api/admin/xxxサブドメインベース(例: admin.example.com
URL構造1つのドメイン下に全て存在ドメイン自体が役割で分かれる
クライアントの認知同じアプリとして見える別アプリのように見せられる
Cookie/セッションの分離共有されるドメイン単位で独立可能
マルチテナント設計/t/:id/ 等のルート構成:tenant.example.com の構成
CDN/SSLの設定柔軟性単一で管理しやすいサブドメインごとに設定可能
導入難易度低い(導入しやすい)DNS設定や証明書の対応が必要

NestJSでの実装例

パスベースルーティング

@Controller('admin')
export class AdminController {
@Get('dashboard')
getDashboard() {
return 'admin dashboard';
}
}

サブドメインルーティング

@Controller({ host: 'admin.example.com' })
export class AdminSubdomainController {
@Get()
index(): string {
return 'Admin page';
}
}

⚠️ Fastifyアダプターではサブドメインルーティングはサポートされていないため、Expressアダプターの使用が必要です。

推奨戦略と判断軸

  • 単一アプリケーションで管理したい場合 → パスベース
  • ロールやユースケースで分離したい場合 → サブドメインベース
  • SaaSで顧客ごとにURLを分けたい場合 → サブドメイン or ハイブリッド

まとめ

ルーティング方式は単なるURLの違いにとどまらず、アプリの構成、運用、ユーザー体験全体に関わる設計選択です。NestJSではどちらも柔軟に対応できるため、要件に応じた最適な方式を選びましょう。

Resource