Releases: hasura/go-graphql-client
Releases · hasura/go-graphql-client
v0.15.1
What's Changed
- fix: preserve retry fields WithRequestModifier and WithDebug by @antoinedeschenes in #186
New Contributors
- @antoinedeschenes made their first contribution in #186
Full Changelog: v0.15.0...v0.15.1
v0.15.0
What's Changed
- Fix and improve union decoding with matching
__typenameby @lelandbatey in #184
New Contributors
- @lelandbatey made their first contribution in #184
Full Changelog: v0.14.5...v0.15.0
v0.14.5
v0.14.4
What's Changed
- Avoid NPE when populating headers with nil response by @kdudfield in #179
New Contributors
- @kdudfield made their first contribution in #179
Full Changelog: v0.14.3...v0.14.4
v0.14.3
What's Changed
Optimize the WebSocketStats by limiting the max size of the closed connection IDs queue, default to 100. You can adjust the limit by setting SetMaxClosedConnectionMetricCacheSize.
Full Changelog: v0.14.2...v0.14.3
v0.14.2
What's Changed
- Improve subscription logging by replacing a
metadatamap with asourcestring, enabling richer logging details. Metadata now includessession_idandconnection_idwhere applicable. - Introduced a
WebSocketStatsstructure to track active and closed WebSocket connections, along with their unique IDs. Added methods to update and retrieve these statistics.
Full Changelog: v0.14.1...v0.14.2
v0.14.1
v0.14.0
Highlights
Subscription enhancements
- The main runner will be a singleton. Get rid of the recursive loop to avoid goroutine leaks
- Enhance the error handling. Add 2 new timeout settings,
WithConnectionInitialisationTimeoutandWithWebsocketConnectionIdleTimeout, to handle errors when the server is unresponsive. Check out the docs for more details. - Behavior changes: The state of subscription requests is retained until the
Closemethod is called. Resubscribing to the subscription will initiate duplicate requests.
Support Retry for Query and Mutation
Introduced retry options for the GraphQL client, allowing customization for retries, backoff intervals, and error handling during GraphQL operations.
client := graphql.NewClient("/graphql", http.DefaultClient,
// number of retries
graphql.WithRetry(3),
// base backoff interval. Optional, default 1 second.
// Prioritize the Retry-After header if it exists in the response.
graphql.WithRetryBaseDelay(time.Second),
// exponential rate. Optional, default 2.0
graphql.WithRetryExponentialRate(2),
// retry on http statuses. Optional, default: 429, 502, 503, 504
graphql.WithRetryHTTPStatus([]int{http.StatusServiceUnavailable}),
// if the http status is 200 but the graphql response is error,
// use this option to check if the error is retryable.
graphql.WithRetryOnGraphQLError(func(errs graphql.Errors) bool {
return len(errs) == 1 && errs[0].Message == "Field 'user' is missing required arguments: login"
}),
)Get headers from response
Use the BindResponseHeaders option to bind headers from the response.
headers := http.Header{}
err := client.Query(context.TODO(), &q, map[string]any{}, graphql.BindResponseHeaders(&headers))
if err != nil {
panic(err)
}
fmt.Println(headers.Get("content-type"))
// application/jsonWhat's Changed
- feat: introduce BindResponseHeaders option by @hgiasac in #163
- fix: subscription goroutine leaks by @hgiasac in #162
- misc: Indicate user agent should be descriptive by @toini in #167
- feat: add retry option to graphql client by @japananh in #168
- feat: add more retry options by @hgiasac in #169
New Contributors
Full Changelog: v0.13.1...v0.14.0
v0.13.1
What's Changed
- migrate
nhooyr.io/websocketto github.com/coder/websocket by @cpouldev in #153
New Contributors
Full Changelog: v0.13.0...v0.13.1
v0.13.0
What's Changed
- feat: returns
NetworkErrorwhen the response returns a non-200 HTTP status code by @LukeSparkLayer in #143 - feat: add
ExecRawWithExtensionsmethod for retrieving extensions in response by @r4fall1 in #144 - feat: decode extensions from response via
BindExtensionsoption by @hgiasac in #146
New Contributors
- @LukeSparkLayer made their first contribution in #143
- @r4fall1 made their first contribution in #144
Full Changelog: v0.12.2...v0.13.0