Wrapperが自動でやってくれること
Wrapperがやってくれること:
ミドルウェアの実行順序管理のみ
code:go
// Wrapperが自動でやること(130-147行目)
func (siw *ServerInterfaceWrapper) GetMe(w http.ResponseWriter, r *http.Request) {
// 1. 認証スコープを設定(自動)
ctx = context.WithValue(ctx, BearerAuthScopes, []string{})
// 2. ミドルウェアを順番に実行(自動)
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
// 3. 私の実装を呼び出し(私のコード)
siw.Handler.GetMe(w, r) // ← ここで私のコードが実行される
}
私が実装すべきもの
code:go
実装すべきもの
1. ビジネスロジック部分
func (c *Core) GetMe(w http.ResponseWriter, r *http.Request) {
2. 認証ミドルウェア
func (h Core) GetAuthMiddleware(ctx context.Context, logger *slog.Logger) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 私が登録したFirebase認証
// 私が登録したJWTトークン検証
// 私が登録したコンテキストにユーザー情報設定
next.ServeHTTP(w, r.WithContext(ctx))
})
}
}
}
3. サーバー設定・起動
func main() {
// 設定読み込み
c := config.Prepare()
// ルーター設定
r := chi.NewRouter()
// DI設定
core := injector.InitializeCoreHandler(...)
// ミドルウェア登録
r.Use(core.GetAuthMiddleware(ctx, logger))
// CORS設定
// サーバー起動
server.ListenAndServe()
}
| 機能 | oapi-codegen(自動) | 私(手動実装) |
|------------|----------------------|------------------|
| 型定義 | ✅ User, UserResponse | ❌ |
| ルーティング | ✅ URLパスとメソッドのマッピング | ❌ |
| ミドルウェア実行管理 | ✅ 順序・呼び出し制御 | ❌ |
| 認証ロジック | ❌ | ✅ Firebase JWT検証 |
| ビジネスロジック | ❌ | ✅ UseCase呼び出し |
| レスポンス作成 | ❌ | ✅ JSON生成 |
| サーバー設定 | ❌ | ✅ ポート、CORS等 |
| DI設定 | ❌ | ✅ Wire設定 |
code:go
処理フロー
1. リクエスト → Chi Router(私が設定)
↓
2. あなたのミドルウェア(Firebase認証)
↓
3. Wrapper(oapi-codegen自動)
├─ 認証スコープ設定
├─ ミドルウェア実行
└─ あなたの実装呼び出し
↓
4. 私のハンドラー(Core.GetMe)
├─ UseCase呼び出し
├─ エラーハンドリング
└─ JSON レスポンス作成
私がやること:
認証の中身(Firebase JWT検証)
ビジネスロジック(UseCase呼び出し)
エラーハンドリング
JSON レスポンス作成
サーバー設定(ポート、CORS、ログ等)