What the hell is GraphQL?
It's an alternative way to design APIs... that's all

It all starts with the Schema

Instead of loads of endpoints like this

GET http://api.com/users/1
POST http://api.com/users

We have one endpoint


Where we send queries and mutations

  "name": "Dara",
  "address": "waterford"

Quick Recap

  • Schema - Definition of Data + queries & mutations
  • Resolver - A function that implements a query or mutation
  • Nested Resolvers - very powerful way to resolve (mostly relational) data
  • Subscription - subscribe to events over websockets
    • Fire events (e.g. 'messageAdded') on a pubsub instance
    • Subscription resolver listens for those events and sends them back down to clients
    • Can add filtering on subscriptions

Aerogear Data Sync Server

  • Schema is defined in UI by end user. Saved in the metadata db (postgres)
  • DataSources allow users to specify where data comes from. (Postgres, InMemory, Mongo, etc)
  • Resolver Mappings tell the server how to perform the particular query/mutation (e.g. run an SQL statement)
  • As part of resolver definition, end user can define a 'publish' field for subscriptions

Aerogear Data Sync Server (continued)

  • We are using Apollo Server V1. Be very aware that most docs on Apollo's website are for V2.
  • Pubsub - using Notify/Listen mechanism in Postgres
  • Schema Changes are Hot Reloaded - when a change is made via UI, a message is published on the pubsub. Server picks this up and reloads schema without restarting
  • Subscriptions use the Postgres Pubsub mechanism. This allows subscriptions to work across several server instances