description |
---|
GraphQL Mesh allows you to create a unified GraphQL schema from multiple sources, using handlers and transforms. Configure sources, handlers, and transforms in a .mesh.yaml file to build your first gateway. |
Working with Mesh means dealing with 4 main concepts: Sources, Handlers, Transforms and Unified Schema:
- In Mesh, a sub-service (GraphQL API, REST API) is called a Source.
- Sources are translated to GraphQL Schemas with the appropriate Handler.
- All Sources' GraphQL Schema are merged into a final Unified Schema.
- Finally, if applicable, configured transformations, called Transforms, are applied to the Unified Schema.
graph LR;
subgraph A [GraphQL Mesh server]
A0[Unified Schema]
subgraph A1 [Configured sources]
subgraph A11 [City Source]
A111[City Source GraphQL Schema]
end
subgraph A12 [Population Source]
A121[Population GraphQL Schema]
end
subgraph A31 [Weather Source]
A311[Weather GraphQL Schema]
end
end
end
A111 & A121 & A311-- merged in --> A0
subgraph B [Services]
subgraph B1 [City REST API]
B11[Swagger definition file]
end
subgraph B2 [Population GraphQL API]
B21[GraphQL Schema]
end
subgraph B3 [Weather REST API]
B31[RAML definition file]
end
end
B11--translated to GraphQL Schemas by handler-->A111
B21--translated to GraphQL Schemas by handler-->A121
B31--translated to GraphQL Schemas by handler-->A311
The above GraphQL Mesh Gateway has 3 configured Sources:
- The "City" Source configured with the
@graphql-mesh/openapi
Handler. - The "Population" Source configured with the
@graphql-mesh/graphql
Handler. - The "Weather" Source configured with the
@graphql-mesh/raml
Handler.
Sources, Handlers, Transforms are configured in a .mesh.yaml
(or .json
, .js
, .ts
)
configuration file that defines:
- How to fetch the definition of the sub-services (GraphQL API, REST API, and more)
- What transformations should be applied to the unified schema (optional)
- The path to the declaration of custom resolvers (optional)
- Which cache strategy should be used? (optional)
- Which envelop plugins should be loaded and configured at the server level? (optional)
Let's have a closer look to a .mesh.yaml
configuration file by
installing Mesh and
building our first Gateway!