❗ BREAKING ❗
Move cors
configuration from server
to root-level (PR #1586)
The cors
configuration is now located at the root-level of the configuration file, rather than inside server
.
For example:
- server:
- cors:
- origins:
- - https://yourdomain.com
+ cors:
+ origins:
+ - https://yourdomain.com
Exit the router after logging panic details (PR #1602)
The Router will now terminate in the (unlikely) case where it panics.
Rename the endpoint
parameter to graphql_path
(#1606)
The endpoint
parameter within the server
portion of the YAML configuration has been renamed to graphql_path
to more accurately reflect its behavior.
If you used this option, the necessary change would look like:
- server:
- endpoint: /graphql
+ server:
+ graphql_path: /graphql
Remove activate()
from the plugin API (PR #1569)
Recent changes to configuration reloading means that the only known consumer of this API, telemetry, is no longer using it.
Let's remove it since it's simple to add back if later required.
Rename TestHarness methods (PR #1579)
Some methods of apollo_router::TestHarness
were renamed:
extra_supergraph_plugin
→supergraph_hook
extra_execution_plugin
→execution_hook
extra_subgraph_plugin
→subgraph_hook
By @SimonSapin in #1579
Request
and Response
types from apollo_router::http_ext
are private (Issue #1589)
These types were wrappers around the Request
and Response
types from the http
crate.
Now the latter are used directly instead.
By @SimonSapin in #1589
Changes to IntoHeaderName
and IntoHeaderValue
(PR #1607)
Note: These types are typically not used directly, so we expect most user code to require no changes.
- Move from
apollo_router::http_ext
toapollo_router::services
- Rename to
TryIntoHeaderName
andTryIntoHeaderValue
- Make contents opaque
- Replace generic
From<T: Display>
conversion with multiple specific conversions
that are implemented byhttp::headers::Header{Name,Value}
.
By @SimonSapin in #1607
QueryPlan::usage_reporting
and QueryPlannerContent
are private (Issue #1556)
These items have been removed from the public API of apollo_router::services::execution
.
By @SimonSapin in #1568
Insert the full target triplet in the package name, and prefix with v
(Issue #1385)
The release tarballs now contain the full target triplet in their name along with a v
prefix to be consistent with our other packaging techniques (e.g., Rover).
For example:
router-0.16.0-x86_64-linux.tar.gz
becomesrouter-v0.16.0-x86_64-unknown-linux-gnu.tar.gz
router-0.16.0-x86_64-macos.tar.gz
becomesrouter-v0.16.0-x86_64-apple-darwin.tar.gz
router-0.16.0-x86_64-windows.tar.gz
becomesrouter-v0.16.0-x86_64-pc-windows-msvc.tar.gz
By @abernix and @Geal in #1433 (which re-lands work done in #1393)
Many structs and enums are now #[non_exhaustive]
(Issue #1550)
This means we may adjust struct
fields or enum
variants in additive ways in the future without breaking changes. To prepare for that eventuality:
- When using a struct pattern (such as for deconstructing a value into its fields),
use..
to allow further fields:
-let PluginInit { config, supergraph_sdl } = init;
+let PluginInit { config, supergraph_sdl, .. } = init;
- Use field access instead:
-let PluginInit { config, supergraph_sdl } = init;
+let config = init.config;
+let supergraph_sdl = init.supergraph_sdl;
- When constructing a struct, use a builder or constructor method instead of struct literal syntax:
-let error = graphql::Error {
- message: "something went wrong".to_string(),
- ..Default::default()
-};
+let error = graphql::Error::builder()
+ .message("something went wrong")
+ .build();
- When matching on an enum, add a wildcard match arm:
match error {
ApolloRouterError::StartupError => "StartupError",
ApolloRouterError::HttpServerLifecycleError => "HttpServerLifecycleError",
ApolloRouterError::NoConfiguration => "NoConfiguration",
ApolloRouterError::NoSchema => "NoSchema",
ApolloRouterError::ServiceCreationError(_) => "ServiceCreationError",
ApolloRouterError::ServerCreationError(_) => "ServerCreationError",
+ _ => "other error",
}
By @SimonSapin in #1614
Some error enums or variants were removed (Issue #81)
They were not used anymore in the public API (or at all).
By @SimonSapin in #1621
🚀 Features
Instrument the rhai plugin with a tracing span (PR #1598)
If you have an active rhai script in your router, you will now see a "rhai plugin" span in tracing.
🐛 Fixes
Only send one report for a response with deferred responses (PR #1576)
The router was sending one report per response (even deferred ones), while Studio was expecting one report for the entire
response. The router now sends one report which is inclusive of the latency of the entire operation.
Include formatted query plan when exposing the query plan (#1557)
Move the location of the text
field when exposing the query plan and fill it with a formatted query plan.
Change state machine log messages to trace
(#1578)
We no longer show internal state machine log events at the info
level since they are unnecessary during normal operation. They are instead emitted at the trace
level and can be enabled selectively using the --log trace
flag.
Formatting problem fix of scalar fields selected several times (PR #1583)
Fixed a bug where querying scalar fields several times would put null
s instead of expected values.
Fix typo on HTTP errors from subgraph (#1593)
Remove the closed parenthesis at the end of error messages resulting from HTTP errors from subgraphs.
By @nmoutschen in #1593
Only send one report for a response with deferred responses (PR #1596)
Deferred responses come as multipart/mixed
elements and are sent as individual HTTP response chunks. When a client receives one chunk,
that chunk should contain the next delimiter. This gives the client the ability to start processing the response instead of waiting for the
next chunk just for the delimiter.
Patch async-compression
to compress responses in streaming (PR #1604)
The async-compression
crate is a dependency used for HTTP response compression. Its implementation accumulates the entire compressed response in memory before sending it. However, this created problems for @defer
responses since we want those responses to come as soon as
possible, rather than waiting until the entire total response has been received and compressed.
Queries with @defer
must have the accept: multipart/mixed
header (PR #1610)
Since deferred responses can come back as multipart responses, we must check that the client supports that content-type
.
This will allow older clients to show a meaningful error message instead of a parsing error if the @defer
directive is
used but they don't support it.
🛠 Maintenance
Depend on published router-bridge
(PR #1613)
The router-bridge
package is now published which means the router
repository no longer depends on having Node.js installed to build.
By @o0Ignition0o in #1613
Re-organize our release steps checklist (PR #1605)
We've got a lot of manual steps we need to do in order to release the Router binaries, but we can at least organize them meaningfuly for ourselves to follow! This is only a Router-team concern today!