/gramps

The core data source combination engine of GrAMPS.

Primary LanguageJavaScriptMIT LicenseMIT

GrAMPS · An easier way to manage the data sources powering your GraphQL server

GrAMPS — Composable, Shareable Data Sources for GraphQL

license npm version Build Status Maintainability Test Coverage Greenkeeper badge All Contributors

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.

Developer Quickstart

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.

Why Does GrAMPS Exist?

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.

Contributors

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!