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
1.7k
自動生成された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
190
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
610
Goのローカル開発をWorkspacesではじめよう
uhzz
1
510
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
690
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
110
「ウチも、gRPC使えますか?」
uhzz
0
190
「インタフェースデザインの心理学」を読んで話したい3つのこと
uhzz
0
20k
「世界一「自由」な会社、NETFLIX NO RULES」を読んでみた
uhzz
0
230
Golang入門
uhzz
0
240
Other Decks in Technology
See All in Technology
株式会社EventHub・エンジニア採用資料
eventhub
0
2.3k
Web Intelligence and Visual Media Analytics
weblyzard
PRO
1
3.8k
定量データと定性評価を用いた技術戦略の組織的実践 / Systematic implementation of technology strategies using quantitative data and qualitative evaluation
chaspy
8
860
しみじみ語る Microsoftの考える プラットフォームエンジニアリング
torumakabe
3
500
Autify Company Deck
autifyhq
1
33k
Scala to WebAssembly: Exploring the How and Why
tanishiking
0
400
Cleanup handling in Go / Go Conference 2024
k1low
6
2.3k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2024/3 - 2024/5
oracle4engineer
PRO
1
120
[TimeTree] Aurora から Spanner への 移行の決断と背景
3utama
2
2.7k
Goでテストをしやすくするためにやったこと
kazukihayase
1
550
DockertestとLocalStackを使って 外部サービスに依存した多要素認証の 動作確認・テストをした話 / A story about using Dockertest and LocalStack to check and test the operation of multi-factor authentication that depends on external services
kaminashi
3
250
go get で考慮している ファイルシステムの挙動について
shinnosuke_kishida
3
650
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
45
6.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
26
2.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
42
4.6k
Adopting Sorbet at Scale
ufuk
69
8.7k
Statistics for Hackers
jakevdp
791
220k
Faster Mobile Websites
deanohume
300
30k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
359
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.8k
Testing 201, or: Great Expectations
jmmastey
32
6.8k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Practical Orchestrator
shlominoach
184
9.9k
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