1
0
Fork 0
arangodb/js/node/node_modules/graphql-sync/README.md

93 lines
2.6 KiB
Markdown

# GraphQL-sync
This is a promise-free wrapper of [GraphQL.js](https://github.com/graphql/graphql-js) for [ArangoDB](https://www.arangodb.com) that replaces all asynchronous code with synchronous equivalents.
## Getting Started
An overview of GraphQL in general is available in the
[README](https://github.com/facebook/graphql/blob/master/README.md) for the
[Specification for GraphQL](https://github.com/facebook/graphql).
### ArangoDB example
You can use GraphQL-sync in [ArangoDB](https://www.arangdb.com) to build your own GraphQL endpoints directly inside the database using the [Foxx](https://www.arangodb.com/foxx) framework.
An example Foxx service using GraphQL-sync is available as [demo-graphql](https://github.com/arangodb-foxx/demo-graphql) in the Foxx service store. You can find out more about using GraphQL with Foxx in the ArangoDB blog article [*Using GraphQL with NoSQL database ArangoDB*](https://www.arangodb.com/2016/02/using-graphql-nosql-database-arangodb/).
### Using GraphQL-sync
Install GraphQL-sync from npm
```sh
npm install --save graphql-sync
```
GraphQL-sync provides two important capabilities: building a type schema, and
serving queries against that type schema.
First, build a GraphQL type schema which maps to your code base.
```js
import {
graphql,
GraphQLSchema,
GraphQLObjectType,
GraphQLString
} from 'graphql-sync';
var schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'RootQueryType',
fields: {
hello: {
type: GraphQLString,
resolve() {
return 'world';
}
}
}
})
});
```
This defines a simple schema with one type and one field, that resolves
to a fixed value. The `resolve` function can return a value, a promise,
or an array of promises.
Then, serve the result of a query against that type schema.
```js
var query = '{ hello }';
var result = graphql(schema, query);
// Prints
// {
// data: { hello: "world" }
// }
console.log(result);
```
This runs a query fetching the one field defined. The `graphql` function will
first ensure the query is syntactically and semantically valid before executing
it, reporting errors otherwise.
```js
var query = '{ boyhowdy }';
var result = graphql(schema, query);
// Prints
// {
// errors: [
// { message: 'Cannot query field boyhowdy on RootQueryType',
// locations: [ { line: 1, column: 3 } ] }
// ]
// }
console.log(result);
```
### License
GraphQL is [BSD-licensed](https://github.com/graphql/graphql-js/blob/master/LICENSE).
Facebook also provides an additional [patent grant](https://github.com/graphql/graphql-js/blob/master/PATENTS).