Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
Search
uhzz
June 07, 2024
Technology
1
2.2k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
https://gocon.jp/2024/sessions/21/
uhzz
June 07, 2024
Tweet
Share
More Decks by uhzz
See All by uhzz
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
250
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
710
Goのローカル開発をWorkspacesではじめよう
uhzz
1
800
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
910
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
190
「ウチも、gRPC使えますか?」
uhzz
0
250
「インタフェースデザインの心理学」を読んで話したい3つのこと
uhzz
0
20k
「世界一「自由」な会社、NETFLIX NO RULES」を読んでみた
uhzz
0
320
Golang入門
uhzz
0
330
Other Decks in Technology
See All in Technology
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.6k
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
670
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
1.5k
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
250
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
230
ハイテク休憩
sat
PRO
2
180
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
380
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
180
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
120
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
160
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
380
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
130
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Producing Creativity
orderedlist
PRO
342
39k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
1
110
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
The Cost Of JavaScript in 2023
addyosmani
46
7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
910
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Optimising Largest Contentful Paint
csswizardry
33
3k
Speed Design
sergeychernyshev
25
680
Transcript
© 2024 Finatext Holdings Ltd. 自動生成されたhttpエンドポイントごとに カスタムミドルウェアを挿入したい話 Go Conference 2024
reo(@_uhzz_)
© 2024 Finatext Holdings Ltd. 自己紹介 1 X:@_uhzz_ GitHub:uh-zz Goとサウナが好きです
Reo Uehara / 株式会社Finatext
© 2024 Finatext Holdings Ltd. • 前提 • oapi-codegen の紹介
• issueで報告されているミドルウェア周りの話 • 独自の解決案を紹介 • まとめ アジェンダ 2
© 2024 Finatext Holdings Ltd. 前提 ルーティングエンジンは、弊社証券サービスで利用しているEchoを対象にします 3 https://techblog.finatext.com/technology-stack-for-reinventing-finance-as-a-service-4c76ea5ee6fc
© 2024 Finatext Holdings Ltd. 4 oapi-codegen の紹介
© 2024 Finatext Holdings Ltd. oapi-codegen の紹介 OpenAPI定義からGoコードを生成するツールです 5 コード生成
https://github.com/deepmap/oapi-codegen
© 2024 Finatext Holdings Ltd. oapi-codegen の紹介 インタフェースに沿って実装するだけ! ルーティングはoapi-codegenが生成したコード側で、設定してくれる 6
インタフェースに沿ったサーバの実装を定義 生成されたルーティング関数に渡します
© 2024 Finatext Holdings Ltd. 7 issueで報告されているミドルウェア周りの話
© 2024 Finatext Holdings Ltd. issueで報告されているミドルウェア周りの話 エンドポイントごとにミドルウェアを差し込めない 上記の関数はルーティングのために生成されたボイラープレートコード 現状、エンドポイント毎にミドルウェアを渡す仕組みが用意されていない 8
© 2024 Finatext Holdings Ltd. 9 独自の解決案を紹介
© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 解決したかった問題 10 やりたかったこと: 認証したあと、個別のエンドポイントに対して
ミドルウェア処理を行いたい 課題: 認証ミドルウェアは個別に設定可能 →ただし認証以外のミドルウェアを個別に設定 する機構がない
© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (OpenAPI→Goコード生成) 11 アプローチ:
スキーマ駆動の精神で、OpenAPI側で制御 具体的には、APIごとにタグ付けを行う ポイント: 生成されるボイラープレートコードの echo.Contextにタグ情報をセットしている
© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (Goアプリケーション側) 12 アプローチ:
独自のContextで、echo.Contextをラップ ポイント: echo.Contextにセットされたタグの取得と、 ミドルウェア呼び出しを独自Contextでラップ することで、コードの再利用性が向上します
© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (Goアプリケーション側) 13 アプローチ:
独自のContextで、echo.Contextをラップ ポイント: echo.Contextにセットされたタグの取得と、 ミドルウェア呼び出しを独自Contextでラップ することで、コードの再利用性が向上します
© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 14 このように解決した (独自のContext実装例) https://codehex.hateblo.jp/entry/echo-context
を参考に実装
© 2024 Finatext Holdings Ltd. • oapi-codegenを使うと、 OpenAPI 準拠の REST
API サーバを 生成することが可能 • 現状、生成されたエンドポイントごとに、カスタムミドルウェアを 割り当てられない問題がある ◦ issueで報告されている ◦ メンテナも反応しているのでサポートされるかも • ミドルウェア相当の処理を各エンドポイントで実行する方法を紹介 まとめ 15 詳細な実装サンプルはブログを書くので、ぜひフォローしてね👍
None