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.3k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
https://gocon.jp/2024/sessions/21/
uhzz
June 07, 2024
Tweet
Share
More Decks by uhzz
See All by uhzz
MCP調べてみました! / Exploring MCP
uhzz
2
2.2k
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
270
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
750
Goのローカル開発をWorkspacesではじめよう
uhzz
1
880
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
1k
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
210
「ウチも、gRPC使えますか?」
uhzz
0
270
「インタフェースデザインの心理学」を読んで話したい3つのこと
uhzz
0
21k
「世界一「自由」な会社、NETFLIX NO RULES」を読んでみた
uhzz
0
350
Other Decks in Technology
See All in Technology
20250413_湘南kaggler会_音声認識で使うのってメルス・・・なんだっけ?
sugupoko
1
250
20250328_RubyKaigiで出会い鯛_____RubyKaigiから始まったはじめてのOSSコントリビュート.pdf
mterada1228
0
480
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
1
4.9k
チームビルディング「脅威モデリング」ワークショップ
koheiyoshikawa
0
190
OSSコントリビュートをphp-srcメンテナの立場から語る / OSS Contribute
sakitakamachi
0
990
GitHub MCP Serverを使って Pull Requestを作る、レビューする
hiyokose
2
660
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
21k
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.4k
サーバシステムを無理なくコンテナ移行する際に伝えたい4つのポイント/Container_Happy_Migration_Method
ozawa
1
130
さくらの夕べ Debianナイト - さくらのVPS編
dictoss
0
170
NLP2025 参加報告会 / NLP2025
sansan_randd
4
450
30 代子育て SRE が考える SRE ナレッジマネジメントの現在と将来
kworkdev
PRO
0
190
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
The Cost Of JavaScript in 2023
addyosmani
48
7.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
12
1.4k
How to train your dragon (web standard)
notwaldorf
91
6k
BBQ
matthewcrist
88
9.6k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
380
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Speed Design
sergeychernyshev
28
880
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
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