The goal of this project is to provide full support of the GraphQL draft specification with a set of idiomatic, easy to use Go packages.
While still under heavy development (internal APIs are almost certainly subject to change), this library is safe for production use.
- minimal API
- support for
context.Context - support for the
OpenTracingstandard - schema type-checking against resolvers
- resolvers are matched to the schema based on method sets (can resolve a GraphQL schema with a Go interface or Go struct).
- handles panics in resolvers
- parallel execution of resolvers
We're trying out the GitHub Project feature to manage graphql-go's development roadmap. Feedback is welcome and appreciated.
A resolver must have one method for each field of the GraphQL type it resolves. The method name has to be exported and match the field's name in a non-case-sensitive way.
The method has up to two arguments:
- Optional
context.Contextargument. - Mandatory
*struct { ... }argument if the corresponding GraphQL field has arguments. The names of the struct fields have to be exported and have to match the names of the GraphQL arguments in a non-case-sensitive way.
The method has up to two results:
- The GraphQL field's value as determined by the resolver.
- Optional
errorresult.
Example for a simple resolver method:
func (r *helloWorldResolver) Hello() string { return "Hello world!" }The following signature is also allowed:
func (r *helloWorldResolver) Hello(ctx context.Context) (string, error) { return "Hello world!", nil }tonyghita/graphql-go-example - A more "productionized" version of the Star Wars API example given in this repository.
deltaskelta/graphql-go-pets-example - graphql-go resolving against a sqlite database
OscarYuen/go-graphql-starter - a starter application integrated with dataloader, psql and basic authenication
