@analogculture/graphd

1.0.1 • Public • Published

Graphd

A conventional schema loader for Apollo GraphQL. Connect your GraphQL servers and schemas together, remotely, locally or a mix of both.

Why

Apollo schema stitching is a powerful way to connect domain driven and remote services together into a single query endpoint. This module provides convention for one possible implementation, designed to reduce boilerplate for loading schemas and resolvers.

Usage

Simple

The most basic configuration for graphd loads schemas and resources from a directory resources in your project's root and merges them into a single schema.

const graphd = require('graphd')
graphd.get()

With Joins

Setting join to true will load a join schema and resolvers from the root (by default) of your project. This join schema defines the relations between all other loaded resources up to this point. Multiple remote servers can define joins on the same types but only for resources that have already been loaded. You can use graphd's createDelegate method to define the joins between resources.

const graphd = require('graphd')
graphd.get({ join: true })

Stitch a Remote API

remoteAPI accepts a single string or array of strings with urls for remote GraphQL APIs. e.g.

{ remoteAPI: 'http://localhost:3001' }

{ remoteAPI: ['http://localhost:3001', 'http://localhost:3002'] }

RemoteAPI will continually retry each connection url until a connection can be established. Negating the need to boot services in any particular order.

const graphd = require('graphd')
graphd.get({ join: true, remoteAPI: 'http://localhost:3000' })

Full configuration

graphd.get({
  join: true,
  remoteAPI: ['http://localhost:3000', 'http://localhost:3001'],
  retryTimeout: 5000,
  paths: {
    resources: './resources',
    joinSchema: './schema.gql',
    joinResolvers: './resolvers'
  }
})

Simple Express

All of the above configurations can be used in a server setting.

const express = require('express')
const { ApolloServer } = require('apollo-server-express')
const graphd = require('@analogculture/graphd')

var app = express()

const server = new ApolloServer({
  schema: graphd.get({ join: false, remoteAPI: null })
})

server.applyMiddleware({ app })

app.listen({ port: 3000 }, () => {
  console.log(`Graphql server started on http://0.0.0.0:3000`)
})

Readme

Keywords

none

Package Sidebar

Install

npm i @analogculture/graphd

Weekly Downloads

0

Version

1.0.1

License

MIT

Unpacked Size

7.99 kB

Total Files

11

Last publish

Collaborators

  • louisr