🎞️
【Go】gqlgenのミドルウェアでリクエストのクエリ内容を取得
概要
GoのGraphQLライブラリgqlgenでは、GraphQL特有のミドルウェアの記事で紹介されているように、あるタイミングで処理が差し込めるミドルウェア機能が用意されています。今回はこのを利用して、リクエストで来たクエリ内容を取得するにはどう実装するかのメモ書きです。
前提
- 使用したgqlgenのバージョンは
v0.17.49
です。
対応方針
Log every graphql requestのissueで紹介されている通り、AroundOperations
のミドルウェアでOperationContext
を取得した際に、その中にクエリの名前とその中身が格納されています。
実装サンプル
上記のissueで紹介されている実装そのままですが、実装サンプルは以下の通りです。
gqlsrv.AroundOperations(func(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler {
oc := graphql.GetOperationContext(ctx)
fmt.Printf("around: %s %s", oc.OperationName, oc.RawQuery)
return next(ctx)
})
Discussion