|
@@ -3,65 +3,95 @@ GraphQL Lua
|
|
|
|
|
|
Lua implementation of GraphQL.
|
|
|
|
|
|
-API
|
|
|
+Example
|
|
|
---
|
|
|
|
|
|
-Parsing queries:
|
|
|
-
|
|
|
```lua
|
|
|
local parse = require 'graphql.parse'
|
|
|
+local schema = require 'graphql.schema'
|
|
|
+local types = require 'graphql.types'
|
|
|
+local validate = require 'graphql.validate'
|
|
|
+local execute = require 'graphql.execute'
|
|
|
+
|
|
|
+-- Parse a query
|
|
|
local ast = parse [[
|
|
|
-query getUser {
|
|
|
- firstName
|
|
|
- lastName
|
|
|
+query getUser($id: ID) {
|
|
|
+ person(id: $id) {
|
|
|
+ firstName
|
|
|
+ lastName
|
|
|
+ }
|
|
|
}
|
|
|
]]
|
|
|
-```
|
|
|
|
|
|
-Creating schemas:
|
|
|
-
|
|
|
-```lua
|
|
|
-local schema = require 'graphql.schema'
|
|
|
-local types = require 'graphql.types'
|
|
|
-
|
|
|
-local person = types.object {
|
|
|
+-- Create a type
|
|
|
+local Person = types.object {
|
|
|
name = 'Person',
|
|
|
fields = {
|
|
|
- firstName = types.string.nonNull
|
|
|
- lastName = types.string.nonNull
|
|
|
+ id = types.id.nonNull,
|
|
|
+ firstName = types.string.nonNull,
|
|
|
+ middleName = types.string,
|
|
|
+ lastName = types.string.nonNull,
|
|
|
+ age = types.int.nonNull
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+-- Create a schema
|
|
|
local schema = schema.create {
|
|
|
query = types.object {
|
|
|
name = 'Query',
|
|
|
fields = {
|
|
|
- person = person
|
|
|
+ person = {
|
|
|
+ kind = Person,
|
|
|
+ arguments = {
|
|
|
+ id = types.id
|
|
|
+ },
|
|
|
+ resolve = function(rootValue, arguments)
|
|
|
+ if arguments.id ~= 1 then return nil end
|
|
|
+
|
|
|
+ return {
|
|
|
+ id = 1,
|
|
|
+ firstName = 'Bob',
|
|
|
+ lastName = 'Ross',
|
|
|
+ age = 52
|
|
|
+ }
|
|
|
+ end
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-```
|
|
|
-
|
|
|
-Validating schemas:
|
|
|
|
|
|
-```lua
|
|
|
-local validate = require 'graphql.validate'
|
|
|
+-- Validate a parsed query against a schema
|
|
|
validate(schema, ast)
|
|
|
-```
|
|
|
-
|
|
|
-Executing queries:
|
|
|
|
|
|
-```lua
|
|
|
-local execute = require 'graphql.execute'
|
|
|
+-- Execution
|
|
|
local rootValue = {}
|
|
|
-local variables = {
|
|
|
- foo = 'bar'
|
|
|
-}
|
|
|
-local operationName = 'myOperation'
|
|
|
+local variables = { id = 1 }
|
|
|
+local operationName = 'getUser'
|
|
|
|
|
|
execute(schema, ast, rootValue, variables, operationName)
|
|
|
+
|
|
|
+--[[
|
|
|
+{
|
|
|
+ person = {
|
|
|
+ firstName = 'Bob',
|
|
|
+ lastName = 'Ross'
|
|
|
+ }
|
|
|
+}
|
|
|
+]]
|
|
|
```
|
|
|
|
|
|
+Status
|
|
|
+---
|
|
|
+
|
|
|
+- [x] Parsing
|
|
|
+ - [ ] Improve error messages
|
|
|
+- [x] Type system
|
|
|
+- [ ] Introspection
|
|
|
+- [x] Validation
|
|
|
+- [x] Execution
|
|
|
+ - [ ] Asynchronous execution (coroutines)
|
|
|
+- [ ] Example server
|
|
|
+
|
|
|
Running tests
|
|
|
---
|
|
|
|