- - -
- -> **This documentation helps you run a _self-hosted_ instance of a router.** If you [create a cloud supergraph](/graphos/quickstart/cloud/) with Apollo GraphOS, Apollo provisions and hosts a GraphOS Router for you. -> -> Cloud supergraphs are recommended for organizations that don't need to host their router in their own infrastructure. - - -## Features - -- Full support for [Apollo Federation](/federation/) and supergraph management via [GraphOS](/graphos/) -- Extensive declarative [configuration options](./configuration/overview) (header propagation, CORS settings, OpenTelemetry support, and more) -- Support for [scripting](./customizations/rhai/) via the Rhai scripting language -- Advanced [GraphOS Enterprise features](./enterprise-features), including: - - Real-time data via [GraphQL subscriptions](./executing-operations/subscription-support/) - - [JWT authentication](./configuration/authn-jwt) - - [Distributed caching](./configuration/distributed-caching/) for multi-router fleets - - Customization in any language via [external coprocessing](./customizations/coprocessor/) - - [Operation limits](./configuration/operation-limits/) diff --git a/docs/source/privacy.mdx b/docs/source/privacy.mdx deleted file mode 100644 index 5d675f8779..0000000000 --- a/docs/source/privacy.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Privacy and Data Collection -subtitle: Learn what data the router collects and how to opt out -description: Learn what data the Apollo GraphOS Router and Apollo Router Core collect and how to opt out. By default, the router collects anonymous usage data to help improve the product. ---- - -By default, the GraphOS Router or Apollo Router Core collects anonymous usage data to help us improve the product. - -The router doesn't collect any personally identifiable information such as API keys, graph names, or file paths. - -- |
-Standard Check Behavior -(Legacy reference reporting) - |
-
-Enhanced Check Behavior -(Extended reference reporting) - |
-||
---|---|---|---|---|
+
+
+ |
+ Standard Check Behavior |
+ + (Legacy reference reporting) +
+ Enhanced Check Behavior |
+ + (Extended reference reporting) + | |
##### Enum value removal - | -Removing any enum values is considered a breaking change if any operations use the enum. | -Removing enum values is only a breaking change if historical operations use the specific enum value(s) that were removed. | -||
+ | +Removing any enum values is considered a breaking change if any operations use the enum. | +Removing enum values is only a breaking change if historical operations use the specific enum value(s) that were removed. | +||
##### Default argument changes for input object fields - | - -Changing or removing a default argument is generally considered a breaking change, but changing or removing default values for input object fields isn't. | -- -Changing or removing default values for input object fields is considered a breaking change. -You can [configure checks to ignore default values changes](/graphos/delivery/schema-checks/#ignored-conditions-settings). + | ++ Changing or removing a default argument is generally considered a breaking change, but changing or removing default values for input object fields isn't. + | ++ Changing or removing default values for input object fields is considered a breaking change. +You can [configure checks to ignore default values changes](/graphos/platform/schema-management/checks#ignored-conditions-settings). - | -
+ | +||||
##### Nullable input object field removal - | -Removing a nullable input object field is always considered a breaking change. | -Removing a nullable input object field is only considered a breaking change if the nullable field is present in historical operations. If the nullable field is always omitted in historical operations, its removal isn't considered a breaking change. | -||
+ | +Removing a nullable input object field is always considered a breaking change. | +Removing a nullable input object field is only considered a breaking change if the nullable field is present in historical operations. If the nullable field is always omitted in historical operations, its removal isn't considered a breaking change. | +||
##### Changing nullable input object fields to non-nullable - | -Changing a nullable input object field to non-nullable is considered a breaking change. | -Changing a nullable input object field to non-nullable is only considered a breaking change if the field had a null value in historical operations. If the field was always a non-null value in historical operations, changing it to non-nullable isn't considered a breaking change. |
-Changing a nullable input object field to non-nullable is considered a breaking change. | +Changing a nullable input object field to non-nullable is only considered a breaking change if the field had a null value in historical operations. If the field was always a non-null value in historical operations, changing it to non-nullable isn't considered a breaking change. |
+
+
Router type | +Description | +Configurability | +Plan availability | +
---|---|---|---|
Shared cloud router | +Apollo provisions and manages routers on shared infrastructure. | ++ Basic configurability, including HTTP header rules, CORS settings, and + subgraph error inclusion + | ++ Serverless** + | +
Dedicated cloud router | ++ Apollo provisions and manages routers on dedicated infrastructure that + you control and scale. + | ++ Highly configurable, including all options for shared cloud routers and + additional configurations + | ++ Dedicated** + | +
Self-hosted router | +You host and manage the router on your own infrastructure. | ++ Highly configurable and customizable, including all options for Cloud + Dedicated routers and additional [customization options](/graphos/routing/customization/overview). + | ++ The Apollo Router Core is available as a free and source-available router. + Connecting your self-hosted router to GraphOS requires an{' '} + Enterprise plan. + | +
❌
+ +```yaml title="bad_configuration.yaml" +headers: + all: + request: + - remove: + named: 'test' + - propagate: + matching: .* +``` + +In this example, first any header named `test` is removed from the list of headers to propagate. However, the list of headers to propagate is currently empty! Next, the `propagate` rule adds all headers to the propagation list, including `test`. + +To correctly remove a header from the propagation list, make sure to define your `remove` rule after any `propagate` rules: + +✅
+ +```yaml title="good_configuration.yaml" +headers: + all: + request: + - propagate: + matching: .* + - remove: + named: 'test' +``` + +With this ordering, first all headers are added to the propagation list, then the `test` header is removed. + +#### Example + +Here's a complete example that demonstrates all supported `headers` configuration options: + +```yaml +headers: + # Header rules for all subgraphs + all: + request: + # Propagate matching headers + - propagate: + matching: ^upstream-header-.* + # Propagate matching headers + - propagate: + named: 'some-header' + default: 'default-value' + rename: 'destination-header' + # Remove the "x-legacy-account-id" header + - remove: + named: 'x-legacy-account-id' + # Remove matching headers + - remove: + matching: ^x-deprecated-.* + # Insert the 'my-company' header + - insert: + name: 'my-company' + value: 'acme' + # Subgraph-specific header rules + subgraphs: + products: + request: + # Calls to the products subgraph have the "router-subgraph-name" header set to `products`. + - insert: + name: 'router-subgraph-name' + value: 'products' + accounts: + request: + # Calls to the accounts subgraph have the "router-subgraph-name" header set to `accounts`. + - insert: + name: 'router-subgraph-name' + value: 'accounts' +``` + +### CORS settings + +
+