36

GitHub - tylerbuchea/graphqless: REST and GraphQL really aren't that dif...

 5 years ago
source link: https://github.com/tylerbuchea/graphqless
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 your GraphQL server almost exactly like you would with Express.js.

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
  }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK