An easier way to manage the data sources powering your GraphQL server.
GrAMPS (short for GraphQL Apollo Microservice Pattern Server) is a thin layer of helper tools designed for the Apollo GraphQL server that allows independent data sources — a schema, resolvers, and data access model — to be composed into a single GraphQL schema, while keeping the code within each data source isolated, independently testable, and completely decoupled from the rest of your application.
To get a GrAMPS+Apollo gateway up and running, start by installing the required packages:
yarn add @gramps/gramps express apollo-server-express body-parser graphql
Next, create a file called index.js
and put the following inside:
const Express = require('express');
const bodyParser = require('body-parser');
const gramps = require('@gramps/gramps').default;
const { GraphQLSchema } = require('graphql');
const { graphqlExpress, graphiqlExpress } = require('apollo-server-express');
const app = Express();
const GraphQLOptions = gramps();
app.use(bodyParser.json());
app.use('/graphql', graphqlExpress(GraphQLOptions));
app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));
app.listen(8080, () => console.log(`=> running at http://localhost:8080/`));
Start the server with node index.js
, then open http://localhost:8080/graphiql to see the GraphiQL user interface.
For a more in-depth starter, see the 5-minute quickstart in our documentation.
GrAMPS is an attempt to create a standard for organizing GraphQL data source repositories, which allows for multiple data sources to be composed together in a plugin-like architecture.
The ability to combine independently managed data sources into a single GraphQL server is a core requirement for IBM Cloud’s microservice architecture. We have dozens of teams who expose data, so a single codebase with all GraphQL data sources inside was not an option; we needed a way to give each team control of their data while still maintaining the ability to unify and expose our data layer under a single GraphQL microservice.
GrAMPS solves this problem by splitting each data source into independent packages that are composed together into a single GraphQL server.
Thanks goes to these wonderful people (emoji key):
Jason Lengstorf 💻 🎨 📖 📢 |
Eric Wyne 💻 🤔 |
Cory Cook 🤔 |
Michael Fix 💻 |
---|
This project follows the all-contributors specification. Contributions of any kind welcome!