Conversation
Add ResponseMiddleware similar to NetworkMiddleware so callers can see the response. SingleRequestQueryer and MultiOpQueryer parse the response and then decode only "data" into the receiver, dropping everything else. ResponseMiddleware sees the parsed response and the query's context, before "data" is decoded. The entry point is WithResponseMiddlewares, similar to WithMiddlewares. In MultiOpQueryer the middlewares run once per bundled query, with that query's own context and its own entry of the batched response.
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
NetworkMiddlewarelets callers see every outgoing request, there's no equivalent for inspecting the response. We ran into this when we were trying to implement support forextensionsin our GraphQL gateway (which is based onnautilus/gateway).More specifically,
SingleRequestQueryer.QueryandMultiOpQueryer.Queryparse the response and then decode onlydatainto the receiver, so everything else is dropped, includingextensions.Solution
Add a
ResponseMiddleware, similar toNetworkMiddleware:Both network queryers implement it through
WithResponseMiddlewares, mirroringWithMiddlewares. The middlewares run after the response is parsed and beforedatais decoded. Returning an error aborts the query with that error, like aNetworkMiddlewaredoes on the request side.In
MultiOpQueryerthe middlewares run once per bundled query, with that query's own context and its own entry of the batched response.With no middlewares configured the queryers behave exactly as before.
Tests
queryerResponseMiddleware_test.gocovers the single request queryer (JSON and multipart responses, error propagation) and the multi-op queryer (each bundled query sees its own entry and context).