REST and GraphQL really aren't that different.
Branch: master
Clone or download
Latest commit 61e3757 Feb 4, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
__tests__ Improve class structure and middleware Jan 28, 2019
examples Update README Jan 28, 2019
.gitignore Update gitignore Jan 11, 2019
CONTRIBUTING.md Update CONTRIBUTING Jan 30, 2019
README.md Update README.md Feb 4, 2019
index.js Improve class structure and middleware Jan 28, 2019
ops
package.json Bump npm version Jan 28, 2019
yarn.lock Add Router method and project infrastructure Jan 18, 2019

README.md

GraphQLess

GraphQLess

⚛️ 🚀🤘

REST and GraphQL really aren't that different. I'll prove it!
GraphQLess is a thin wrapper around the official express-graphql 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
  }
}