Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bhoriuchi/graphql-go-tools
Like apollo-tools for graphql-go
https://github.com/bhoriuchi/graphql-go-tools
directives go golang graphql graphql-tools makeexecutableschema schema
Last synced: about 2 months ago
JSON representation
Like apollo-tools for graphql-go
- Host: GitHub
- URL: https://github.com/bhoriuchi/graphql-go-tools
- Owner: bhoriuchi
- License: mit
- Created: 2019-06-13T02:45:16.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-04-19T22:25:06.000Z (over 1 year ago)
- Last Synced: 2024-06-18T18:40:30.427Z (7 months ago)
- Topics: directives, go, golang, graphql, graphql-tools, makeexecutableschema, schema
- Language: Go
- Size: 118 KB
- Stars: 33
- Watchers: 3
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# graphql-go-tools
Like apollo-tools for graphql-go## Current Tools
### `MakeExecutableSchema`
**Currently supports:**
* Merge multiple graphql documents
* Object type extending
* Custom Directives
* Import types and directives**Planned:**
* Schema-stitching
**Limitations:**
* Only types and directives defined in the `TypeDefs` with schema language can be extended and have custom directives applied.
## Example
```go
func main() {
schema, err := tools.MakeExecutableSchema(tools.ExecutableSchema{
TypeDefs: `
directive @description(value: String!) on FIELD_DEFINITIONtype Foo {
id: ID!
name: String!
description: String
}
type Query {
foo(id: ID!): Foo @description(value: "bazqux")
}`,
Resolvers: tools.ResolverMap{
"Query": &tools.ObjectResolver{
Fields: tools.FieldResolveMap{
"foo": &tools.FieldResolver{
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
// lookup data
return foo, nil
}
},
},
},
},
SchemaDirectives: tools.SchemaDirectiveVisitorMap{
"description": &tools.SchemaDirectiveVisitor{
VisitFieldDefinition: func(field *graphql.Field, args map[string]interface{}) {
resolveFunc := field.Resolve
field.Resolve = func(p graphql.ResolveParams) (interface{}, error) {
result, err := resolveFunc(p)
if err != nil {
return result, err
}
data := result.(map[string]interface{})
data["description"] = args["value"]
return data, nil
}
},
},
},
})if err != nil {
log.Fatalf("Failed to build schema, error: %v", err)
}params := graphql.Params{
Schema: schema,
RequestString: `
query GetFoo {
foo(id: "5cffbf1ccecefcfff659cea8") {
description
}
}`,
}r := graphql.Do(params)
if r.HasErrors() {
log.Fatalf("failed to execute graphql operation, errors: %+v", r.Errors)
}
rJSON, _ := json.Marshal(r)
fmt.Printf("%s \n", rJSON)
}```
### Handler
Modified `graphql-go/handler` with updated GraphiQL and Playground
See [handler package](handler)