👋 We're getting closer to our release candidate stages so there are far less breaking changes to the API in these versions, rather changes to configuration. We'll have a bit more in the next releases, but nothing as bad as the bumps from pre-v1.0.0-alpha.x versions. Thanks for your feedback and cooperation! ✨
❗ BREAKING ❗
Unified supergraph and execution response types (PR #1708)
apollo_router::services::supergraph::Response
and apollo_router::services::execution::Response
were two structs with identical fields and almost-identical methods. The main difference was that builders were fallible for the former but not the latter.
They are now the same type (with one location a type
alias of the other), with fallible builders. Callers may need to add either a operator ?
(in plugins) or an .unwrap()
call (in tests).
let response = execution::Response::builder()
.error(error)
.status_code(StatusCode::BAD_REQUEST)
.context(req.context)
- .build();
+ .build()?;
By @SimonSapin in #1708
Rename originating_request
to supergraph_request
on various plugin Request
structures (Issue #1713)
We feel that supergraph_request
makes it more clear that this is the request received from the client.
Prometheus is no longer defaulting to the GraphQL endpoint and listener address (Issue #1645)
The Router's Prometheus interface is now exposed at 127.0.0.1:9090/metrics
, rather than http://0.0.0.0:4000/plugins/apollo.telemetry/prometheus
. This should be both more secure and also more generally compatible with the default settings that Prometheus expects (which also uses port 9090
and just /metrics
as its defaults).
To expose to a non-localhost interface, it is necessary to explicitly opt-into binding to a socket address of 0.0.0.0:9090
(i.e., all interfaces on port 9090) or a specific available interface (e.g., 192.168.4.1
) on the host.
Have a look at the Features section (below) to learn how to customize the listen address and the path.
By @o0Ignition0o in #1654
🚀 Features
New plugin helper: map_first_graphql_response
(Issue #1564)
In supergraph and execution services, the service response contains not just one GraphQL response but a stream of them, in order to support features such as @defer
.
This new method of ServiceExt
and ServiceBuilderExt
in apollo_router::layers
wraps a service and calls a callback
when the first GraphQL response in the stream returned by the inner service becomes available. The callback can then access the HTTP parts (headers, status code, etc) or the first GraphQL response before returning them.
See the doc-comments in apollo-router/src/layers/mod.rs
for more.
By @SimonSapin in #1708
Users can customize the Prometheus listener address and URL path (Issue #1645)
You can now customize the Prometheus listener socket address and URL path in your YAML configuration:
telemetry:
metrics:
prometheus:
listen: 127.0.0.1:9090 # default
path: /metrics # default
enabled: true
By @o0Ignition0o in #1654
Add an apollo_router::graphql::ResponseStream
type alias (PR #1697)
It is equivalent to BoxStream<'static, graphql::Response>
and makes
some type signatures slightly simpler.
By @SimonSapin in #1697
🐛 Fixes
Fix metrics duration for router request (#1705)
With the introduction of BoxStream
for @defer
we introduced a bug when computing HTTP request duration metrics where we failed to wait for the first response in the BoxStream
.
Numerous fixes to preview @defer
query planning (Issue #1698)
Updated to Federation 2.1.2-alpha.0
which brings in a number of fixes for the preview @defer
support. These fixes include: