Slide 1

Slide 1 text

© 2024 Finatext Holdings Ltd. 自動生成されたhttpエンドポイントごとに カスタムミドルウェアを挿入したい話 Go Conference 2024 reo(@_uhzz_)

Slide 2

Slide 2 text

© 2024 Finatext Holdings Ltd. 自己紹介 1 X:@_uhzz_ GitHub:uh-zz Goとサウナが好きです Reo Uehara / 株式会社Finatext

Slide 3

Slide 3 text

© 2024 Finatext Holdings Ltd. ● 前提 ● oapi-codegen の紹介 ● issueで報告されているミドルウェア周りの話 ● 独自の解決案を紹介 ● まとめ アジェンダ 2

Slide 4

Slide 4 text

© 2024 Finatext Holdings Ltd. 前提 ルーティングエンジンは、弊社証券サービスで利用しているEchoを対象にします 3 https://techblog.finatext.com/technology-stack-for-reinventing-finance-as-a-service-4c76ea5ee6fc

Slide 5

Slide 5 text

© 2024 Finatext Holdings Ltd. 4 oapi-codegen の紹介

Slide 6

Slide 6 text

© 2024 Finatext Holdings Ltd. oapi-codegen の紹介 OpenAPI定義からGoコードを生成するツールです 5 コード生成 https://github.com/deepmap/oapi-codegen

Slide 7

Slide 7 text

© 2024 Finatext Holdings Ltd. oapi-codegen の紹介 インタフェースに沿って実装するだけ! ルーティングはoapi-codegenが生成したコード側で、設定してくれる 6 インタフェースに沿ったサーバの実装を定義 生成されたルーティング関数に渡します

Slide 8

Slide 8 text

© 2024 Finatext Holdings Ltd. 7 issueで報告されているミドルウェア周りの話

Slide 9

Slide 9 text

© 2024 Finatext Holdings Ltd. issueで報告されているミドルウェア周りの話 エンドポイントごとにミドルウェアを差し込めない 上記の関数はルーティングのために生成されたボイラープレートコード 現状、エンドポイント毎にミドルウェアを渡す仕組みが用意されていない 8

Slide 10

Slide 10 text

© 2024 Finatext Holdings Ltd. 9 独自の解決案を紹介

Slide 11

Slide 11 text

© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 解決したかった問題 10 やりたかったこと: 認証したあと、個別のエンドポイントに対して ミドルウェア処理を行いたい 課題: 認証ミドルウェアは個別に設定可能 →ただし認証以外のミドルウェアを個別に設定 する機構がない

Slide 12

Slide 12 text

© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (OpenAPI→Goコード生成) 11 アプローチ: スキーマ駆動の精神で、OpenAPI側で制御 具体的には、APIごとにタグ付けを行う ポイント: 生成されるボイラープレートコードの echo.Contextにタグ情報をセットしている

Slide 13

Slide 13 text

© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (Goアプリケーション側) 12 アプローチ: 独自のContextで、echo.Contextをラップ ポイント: echo.Contextにセットされたタグの取得と、 ミドルウェア呼び出しを独自Contextでラップ することで、コードの再利用性が向上します

Slide 14

Slide 14 text

© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 このように解決した (Goアプリケーション側) 13 アプローチ: 独自のContextで、echo.Contextをラップ ポイント: echo.Contextにセットされたタグの取得と、 ミドルウェア呼び出しを独自Contextでラップ することで、コードの再利用性が向上します

Slide 15

Slide 15 text

© 2024 Finatext Holdings Ltd. 独自の解決案を紹介 14 このように解決した (独自のContext実装例) https://codehex.hateblo.jp/entry/echo-context を参考に実装

Slide 16

Slide 16 text

© 2024 Finatext Holdings Ltd. ● oapi-codegenを使うと、 OpenAPI 準拠の REST API サーバを 生成することが可能 ● 現状、生成されたエンドポイントごとに、カスタムミドルウェアを 割り当てられない問題がある ○ issueで報告されている ○ メンテナも反応しているのでサポートされるかも ● ミドルウェア相当の処理を各エンドポイントで実行する方法を紹介 まとめ 15 詳細な実装サンプルはブログを書くので、ぜひフォローしてね👍

Slide 17

Slide 17 text

No content