mirror of https://gitee.com/bigwinds/arangodb
93 lines
2.6 KiB
Markdown
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). |