oapi-codegenの自動ルーティング設定
code:go
282-290行目が核心部分
// これが自動で実行される
r.Group(func(r chi.Router) {
r.Delete(options.BaseURL+"/users/me", wrapper.DeleteMe) // DELETE /users/me
})
r.Group(func(r chi.Router) {
r.Get(options.BaseURL+"/users/me", wrapper.GetMe) // GET /users/me
})
r.Group(func(r chi.Router) {
r.Put(options.BaseURL+"/users/me", wrapper.UpdateMe) // PUT /users/me
})
🔧 具体的にやってくれること
1. URLルーティングの自動設定
// 手動でやる必要がないこと:
r.Get("/users/me", someHandler) // ❌ 手動で書く必要なし
r.Put("/users/me", someHandler) // ❌ 手動で書く必要なし
r.Delete("/users/me", someHandler) // ❌ 手動で書く必要なし
// oapi-codegenが自動でやってくれる:
// OpenAPI仕様を読んで、URLとHTTPメソッドを自動で設定
2. Wrapperとの自動接続
// 手動なら:
r.Get("/users/me", func(w http.ResponseWriter, r *http.Request) {
// ミドルウェア実行
// 認証チェック
// 実装呼び出し
core.GetMe(w, r)
})
// 自動(oapi-codegenがやってくれる):
r.Get("/users/me", wrapper.GetMe) // wrapper経由で自動実行
以下を回避
// URLパスを間違えるリスク
// OpenAPI仕様と実装が一致しないリスク
// main関数で以下の1行を呼び出すだけ
// OpenAPI仕様通りのルーティングが完了
oapi.HandlerFromMux(core, r)
code:go
処理フロー
1. ブラウザから「GET /users/me」リクエスト
↓
2. Chi Routerが受信
↓
3. HandlerFromMuxで設定されたルート発見
↓
4. wrapper.GetMeが実行される
↓
5. wrapperが前処理してからcore.GetMeを呼び出し
↓
6. 私の実装(core.GetMe)が実行される