TomoLink
CompaniesGoogleSystem DesignGraphQL Adoption Patterns
System Design
Mediumapi-web-development

GraphQL Adoption Patterns

30 minsGraphQLAPI
30 mins
1 sections
GraphQL, API

Overview

Typically, teams begin their GraphQL journey with a basic architecture where a client application queries a single GraphQL server.

However, multiple patterns are available:

  • Client-based GraphQL

The client wraps existing APIs behind a single GraphQL endpoint. This approach improves the developer experience but the client still bears the performance costs of aggregating data.

  • GraphQL with BFFs

BFF or Backend-for-Frontends adds a new layer where each client has a dedicated BFF service. GraphQL is a natural fit to build a client-focused intermediary layer.

Performance and developer experience for the clients is improved but there’s a tradeoff in building and maintaining BFFs.

  • The Monolithic GraphQL

Multiple teams share one codebase for a GraphQL server used by several clients. Also, a single team owns a GraphQL API that is accessed by multiple client teams.

  • GraphQL Federation

This involves consolidating multiple graphs into a supergraph.

GraphQL Federated Gateway takes care of routing the requests to the downstream subgraph services that take care of a specific part of the GraphQL schema. This approach maintains ownership of data with the domain team while avoiding duplication of effort.

Over to you: Which GraphQL adoption approach have you seen or used?

GraphQL Adoption Patterns [Medium] | Google System_design | TomoLink