Skip to content

nikolasburk/graphqlday-workshop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Building a GraphQL Server with Node.JS

This is the repository for the afternoon workshop at GraphQL Day 🇳🇱

Overview

This git repository contains several branches that correspond to the "steps" to be performed throughout the workshops. The master branch contains the final version of the code.

  • Step 0: Minimal GraphQL server
  • Step 1: Extend API with query arguments
  • Step 2: Complete API operations
  • Step 3: Add database layer with Prisma and Prisma bindings
  • Step 4: Complete API operations against the database

Usage

Clone the repository

git clone git@github.com:nikolasburk/graphqlday-workshop.git
cd graphqlday-workshop

Deploy the Prisma service

npm install -g prisma
prisma deploy

Note: If you don't have Docker installed on your machine, you need to remove the cluster property from prisma.yml and select a development cluster when prompted by the CLI where to deploy your Prisma API. The endpoint that's then printed by the CLI needs to be pasted into index.js where Prisma is instantied.

Start the server

node src/index.js

Open a GraphQL Playground

npm install -g graphql-cli
graphql playground

The Playground now allows to work with both GraphQL APIs side-by-side. It receives its information about the corresponding endpoints and schemas from the configuration in .graphqlconfig.yml:

  • app: The application layer built with graphql-yoga
  • database The database layer configured with Prisma

Sample queries/mutations

In the following queries/mutation, __POST_ID__ is a placeholder that needs to be replaced with the id of an actual Post item in your database.

Application layer (graphql-yoga)

post(id: "__POST_ID__") {
  id
  title
  content
  published
}
mutation {
  createDraft(
    title: "How to GraphQL"
    content: "Learn best practices all around developing GraphQL APIs"
  ) {
    id
    published
  }
}
mutation {
  publish(id: "__POST_ID__") {
    id
    published
  }
}
mutation {
  deletePost(id: "__POST_ID__") {
    id
    title
    content
    published
  }
}

Database layer (Prisma)

query {
  posts(where: {
    title_contains: "QL"
  }) {
    id
    title
    content
    published
  }
}
query {
  post(where: {
    id: "__POST_ID__"
  }) {
    id
    title
    content
    published
  }
}
mutation {
  updatePost(
    where: {
      id: "__POST_ID__"
    }
    data: {
      published: true
    }
  ) {
    id
    title
    content
    published
  }
}
mutation {
  deletePost(where: {
    id: "__POST_ID__"
  }) {
    id
    title
    content
    published
  }
}

Technology stack

The GraphQL server in this repository is build upon the following technologies:

  • graphql-yoga: A GraphQL server library based on Express.js. It features out-of-the-box support for GraphQL Playgrounds as well as realtime GraphQL subscriptions.
  • Prisma: A GraphQL database proxy that makes it easy to connect your GraphQL server to a database and massively simplifies your resolver implementations.
  • Docker (optional): In case you have Docker installed, you can deploy your Prisma APIs locally. Otherwise you can use a free sandbox environment provided by Prisma Cloud.

Note: When using Docker to deploy Prisma locally, the Prisma API is backed by a local MySQL database. If you're using Prisma Cloud, your Prisma API is running against an instance of AWS Aurora.

Recommended resources

🇪🇺 GraphQL Europe

Get your tickets for GraphQL Europe here.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published