🎞️

【Go】gqlgenのミドルウェアでリクエストのクエリ内容を取得

2024/09/03に公開

概要

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