https://github.com/zordius/graphql-endpoint
A lightweight framework for GraphQL endpoints
https://github.com/zordius/graphql-endpoint
Last synced: 5 months ago
JSON representation
A lightweight framework for GraphQL endpoints
- Host: GitHub
- URL: https://github.com/zordius/graphql-endpoint
- Owner: zordius
- Created: 2018-08-01T07:07:43.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-03T15:16:44.000Z (over 3 years ago)
- Last Synced: 2025-09-15T12:31:01.349Z (10 months ago)
- Language: JavaScript
- Size: 583 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# graphql-endpoint
[](https://travis-ci.org/zordius/graphql-endpoint) A lightweight framework for GraphQL endpoints.
**Before (client)**:
```javascript
fetch('somewhere/graphql', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({ bigGraphQLQueryString, variables })
).then(response => response.json()) // receive GraphQLResult
```
**After (client)**:
```javascript
// put GraphQL variables into http GET queris
fetch('somewhere/wrapped/endpoint?variable1=abc&variable2=def')
.then(response => response.json()) // receive GraphQLResult
// or make GraphQL like POST without query
fetch('somehwere/wrapped/endpoint', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({ variables }) // no need query, it's on server side
).then(response => response.json()) // receive GraphQLResult
```
## Why?
* Reduce your client side request size by moving your GraphQL query from client side to server side.
* Keep your GraphQL queries at server side safely.
* Update your GraphQL queries at server side without publishing new client applications.
## Usage
Add `graphql-endpoint` to your GraphQL server.
```javascript
const { ApolloServer } = require('apollo-server-express')
const express = require('express')
const { GraphQLEndpoint } = require('graphql-endpoint')
const bodyParser = require('body-parser')
const app = express()
// graphql-endpoint requires json body to be parsed
app.use(bodyParser.json())
// Adopt graphql-endpoint
GraphQLEndpoint(app)
const server = new ApolloServer(configs)
server.applyMiddleware({
app,
bodyParser: false // optional disable bodyParser, we already have it
})
```
Then put your GraphQL query files into `src/endpoints/`. For example, the `src/endpoints/my_api` with content `{ example(id: 123) { title, description } }` will serve GraphQL result on `/my_api` .
The wrapped API endpoint will support two types of http requests:
* simple http GET: the http GET queries will be collected into GraphQL variables then be sent to GraphQL server with server side predefined GraphQL query.
* http POST: the http POST body be merged with server side predefined query, then be sent to GraphQL server.