Skip to content

REST and GraphQL really aren't that different. I'll prove it!

Notifications You must be signed in to change notification settings

tylerthebuildor/graphqless

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GraphQLess

GraphQLess

⚛️ 🚀🤘

REST and GraphQL really aren't that different. I'll prove it!
GraphQLess is a thin wrapper around the official apollo-server-express project.
GraphQLess lets you write a GraphQL server in an Express.js style.

Setup

yarn add graphqless

And here is how you write a server... Look familiar?

const { GraphQLess } = require('graphqless');
const app = new GraphQLess();

const db = { users: [{ name: 'Tyler' }] };

app.get('/users', (req, res) => {
  const { users } = db;
  res.send(users);
});

app.get('/user', (req, res) => {
  const user = db.users.find(user => user.name === req.body.name);
  res.send(user);
});

app.post('/createUser', (req, res) => {
  const userCount = db.users.push({ name: req.body.name });
  res.send(userCount);
});

app.listen(3000, () => {
  console.log('Visit: http://localhost:3000/playground');
});

I know it looks like Express.js but the code above is a GraphQL server! There is one caveat though...

GraphQL requires us to write a schema that describes the .get and .post functions' inputs and outputs.

Just know that .get === Query && .post === Mutation. Now let's modify the last few lines of the snippet above to include the required schema:

app
  .useSchema(
    `
    type Query {
      users: [User]
      user(name: String): User
    }
    type Mutation {
      createUser(name: String): Int
    }
    type User {
      name: String
    }
  `
  )
  .listen(3000, () => {
    console.log('Visit: http://localhost:3000/playground');
  });

That's the only catch! You now have a fully functioning and extendable GraphQL server.

You can find more examples in the examples folder.

Examples

Queries for examples/example

npx nodemon examples/example.js
mutation createUser {
  createUser(name: "Buchea")
}

query getUsers {
  users {
    name
  }
  user(name: "Tyler") {
    name
  }
}

Queries for examples/exampleWithAuth

npx nodemon examples/exampleWithAuth.js
# Add this to "HTTP HEADERS" in GraphQL Playground:
# { "Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.YWJj.4noRC-c0ay0hOeZ5Cgc80MVS0P4p4FrR2lJFzMNSnE4" }

query getMe {
  getToken
  me {
    id
    name
  }
}

Queries for examples/exampleWithRouter

npx nodemon examples/exampleWithRouter/index.js
mutation createUser {
  createUser(name: "Buchea")
}

query getUsers {
  users {
    name
  }
  user(name: "Tyler") {
    name
  }
}

Queries for examples/exampleWithReactClient

npx nodemon examples/exampleWithReactClient/index.js
mutation createUser {
  createUser(name: "Buchea") {
    name
  }
}

query getUsers {
  users {
    name
  }
}

Queries for examples/exampleWithSubscription

npx nodemon examples/exampleWithSubscription.js
subscription subscribeToCount {
  count
}

query getDummyData {
  dummy
}

Queries for examples/exampleWithRelations

npx nodemon examples/exampleWithRelations.js
query getDeepRelations {
  users {
    name
    favorites {
      name
      user {
        name
      }
    }
  }
}

About

REST and GraphQL really aren't that different. I'll prove it!

Resources

Stars

Watchers

Forks

Packages

No packages published