An open API service indexing awesome lists of open source software.

https://github.com/tylerthebuildor/graphqless

REST and GraphQL really aren't that different. I'll prove it!
https://github.com/tylerthebuildor/graphqless

Last synced: 9 months ago
JSON representation

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

Awesome Lists containing this project

README

          


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

```bash
yarn add graphqless
```

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

```jsx
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:

```jsx
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](/examples) folder.

## Examples

### Queries for examples/example

```bash
npx nodemon examples/example.js
```

```graphql
mutation createUser {
createUser(name: "Buchea")
}

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

### Queries for examples/exampleWithAuth

```bash
npx nodemon examples/exampleWithAuth.js
```

```graphql
# Add this to "HTTP HEADERS" in GraphQL Playground:
# { "Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.YWJj.4noRC-c0ay0hOeZ5Cgc80MVS0P4p4FrR2lJFzMNSnE4" }

query getMe {
getToken
me {
id
name
}
}
```

### Queries for examples/exampleWithRouter

```bash
npx nodemon examples/exampleWithRouter/index.js
```

```graphql
mutation createUser {
createUser(name: "Buchea")
}

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

### Queries for examples/exampleWithReactClient

```bash
npx nodemon examples/exampleWithReactClient/index.js
```

```graphql
mutation createUser {
createUser(name: "Buchea") {
name
}
}

query getUsers {
users {
name
}
}
```

### Queries for examples/exampleWithSubscription

```bash
npx nodemon examples/exampleWithSubscription.js
```

```graphql
subscription subscribeToCount {
count
}

query getDummyData {
dummy
}
```

### Queries for examples/exampleWithRelations

```bash
npx nodemon examples/exampleWithRelations.js
```

```graphql
query getDeepRelations {
users {
name
favorites {
name
user {
name
}
}
}
}
```