Product Roadmap 2020

StevenACoffman commented :

In the Go community, it might also be worth noting these other two approaches:

Nautilus Gateway

Nautilus is based around the assumption that all your services are GraphQL Services. It uses the Node interface (Relay Gloabl Object Identification) to automatically federate between multiple services. This approach is quite similar to the approach Apollo Federation took. So all services have to comply to the Relay Global Object spec and you’re ready to go. Nautilus gateway will analyze your services via introspection at startup time and generate the final gateway schema.

Tyk’s Graphql Gateway

In contrast Tyk’s Graphql Gateway (and I believe this tyk gateway as well? ) goes with a complete different approach. The basic assumption is that your public gateway schema should not be an artifact. The gateway schema is the contract between gateway and clients. The gateway doesn’t make any assumptions on your services other than complying to some protocol and some spec. It’s a lot more manual work at the beginning but this gives a lot of advantages. Because the gateway is the single source of truth regarding the schema you cannot easily break the contract. With federation an upstream service can directly break the contract. Additionally you’re not limited to GraphQL upstreams. While GraphQL upstreams are supported it’s only a matter of implementing another DataSource interface to support more upstream protocols, e.g. SOAP, MQTT, KAFKA, Redis etc… On top of that, because the gateway schema is the single source of truth you’ll get two additional benefits. First, you can swap DataSources for a given schema without changing the contract. E.g. you could replace a REST User-Service with a GraphQL User-Service without changing the contract between client and gateway. This could help to easily transition from legacy to more modern architectures. Second, because the gateway owns the schema you can apply features like rate limiting, authorization etc. at the gateway level.