🎊
Status
Relay GraphQL Server for Loopback (Apollo Server)
Combine the powers of ApolloStack GraphQL with the backend of Loopback to automatically generate GraphQL endpoints based on Loopback Schema.
💥
Queries - Relay Specification:
node
query to fetch single entity by ID -
viewer
query to fetch all models for a viewer - Filter support for
where
andorder
filters on queries - Support for relations and querying related data
- Relay Connections support for listed data
- Relay Pagination (
first
,last
,before
,after
) - Remote methods integration
🚀
Mutations - Nested and clean schema structure
- Maps all
post
,put
,patch
anddelete
methods to mutations - Remote methods integration
⚡️
Subscriptions -
create
,update
andremove
events of all shared models.
🎉
Other Features Loopback Types
- [x] Any
- [x] Array
- [x] Boolean
- [ ] Buffer
- [x] Date
- [x] GeoPoint
- [x] Null
- [x] Number
- [x] Object
- [x] String
Loopback Relations
- [x] BelongsTo
- [x] HasOne
- [x] HasMany
- [ ] HasManyThrough
- [x] HasAndBelongsToMany
- [ ] Polymorphic
- [x] EmbedsOne
- [x] EmbedsMany
- [x] ReferencesMany
Misc
- Accepts AccessToken for authenticated API calls
- Resolves and respects ACLs
Todo
- [ ] File uploads
💻
Usage npm install loopback-graphql-relay
Add the loopback-graphql-relay component to the server/component-config.json
:
"loopback-graphql-relay": {
"path": "/graphql",
"subscriptionServer": {
"disable": false,
"auth": false
},
"viewer": {
"UserModel": "Account"
}
}
Requests will be posted to path
path. (Default: /graphql
);
GraphQl Playground is available on path
path. (Default: /graphql
);
Apollo's Subscription Server can be customised by passing subscriptionServer
configuration. More information can be found at Subscriptions Docs.
const { RedisPubSub } = require('graphql-redis-subscriptions')
const path = require('path')
const fs = require('fs')
...
subscriptionServer: {
disable: false,
https: {
key: fs.readFileSync(path.join(__dirname, '.certs/example.key')).toString(),
cert: fs.readFileSync(path.join(__dirname, '.certs/example.crt')).toString()
},
pubsub: new RedisPubSub({
connection: {
host: 'cluster-redis-master.default.svc.cluster.local',
retry_strategy: options => {
// reconnect after
return Math.max(options.attempt * 100, 3000)
}
}
})
},
Apollo's persistent queries can be customised by passing persistedQueries
configuration. More information can be found at Performance Docs.
const { RedisCache } = require('apollo-server-cache-redis')
...
persistedQueries: {
cache: new RedisCache({
host: 'cluster-redis-master.default.svc.cluster.local',
retry_strategy: options => {
// reconnect after
return Math.max(options.attempt * 100, 3000)
}
})
}
🙌
Inspiration This repository originally started as a fork of the loopback-graphql project by Tallyb. But due to considerable change in the way query end points are created, this repository is maitained as an independant project.