Skip to content
DgraphQL: Build a GraphQL service from a schema
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
example
flow-typed/npm
src
.flowconfig
.gitignore
.npmignore
.travis.yml
LICENSE
README.md
docker-compose.yml
package.json
yarn.lock

README.md

DgraphQL: Build a GraphQL service from a schema

npm Documentation Travis Codecov

Introduction

Dgraph is a distributed, highly available graph database that uses a language similar to GraphQL to query and mutate data. Unlike GraphQL, Dgraph only defines schema for predicates (properties) within the graph; there is no concept of complex types or groups of properties. Because of this it is straight forward to store any GraphQL schema in Dgraph provided a few restrictions are met.

Given a GraphQL schema, DgraphQL can do four things:

  1. Generate a GraphQL-JS schema that maps GraphQL queries to Dgraph queries
  2. Transform Dgraph responses into GraphQL responses (including support for the relay connection specification)
  3. Generate defaults for create/update/delete/query operations (with filtering, ordering and nested create/update mutations)
  4. Configure Dgraph's schema with types and indexes each property.

Check out the complete documentation for more.

Getting Started

The example describes basic usage. First, install dependencies:

yarn install

The example and test suite expect a Dgraph instance that you don't mind filling with junk running at http://localhost:8080. You can either install Dgraph or, better yet, run it in Docker:

yarn run dgraph:start

Run the example:

yarn start

Or run the test suite:

yarn test

To stop the containers:

yarn run dgraph:stop

Using DgraphQL

Install DgraphQL from npm

With yarn:

yarn add dgraphql

The entry point to the library is Client

import { graphql } from 'graphql'
import { Client } from 'dgraphql'

const schema = `
type Person {
  id: ID!
  name: String @filter(types: [EQUALITY])
  children: [Person!]! @reverse(name: "parents")
  parents: [Person!]! @reverse(name: "children")
}`

const mutation = `
mutation {
  createPerson(input: { name: "David" }) {
    person {
      id
      name
    }
  }
}`

const client = new Client({ debug: false })

client.updateSchema(schema).then(() => {
  graphql({
    schema: client.schema,
    source: mutation,
    contextValue: client.getContext()
  }).then(result => {
    console.log(JSON.stringify(result, null, '  '))
  })
})
You can’t perform that action at this time.