Granate is a tool meant to speed up development of applications that utilises
graphql. Granate takes a graphql schema and outputs code based on the
specified language.
- Go
go get github.com/granateio/granateGranate requires a config yaml file granate.yaml to provide some basic
information about the project.
# Select language to output
language: go
# Output locations (and some options)
output:
# Output target directory (value can be empty,
# but the option is currently required)
target: <target-dir>
# Name of the package
package: change.me/your/package-name/<target-dir>
# Name of the package to generate for the schema
schema: schema
# Name of the package to generate for the models
models: models
# Schemas to use for the code generator
schemas:
- schema.graphqlA schema is also required, you can provide multiple schemas in the schemas
section of the config file. Here is a simple todo.graphql file
# A user in the system
type User {
id: ID
name: String
todos: [Todo]
}
# A todo
type Todo {
id: ID
title: String
description: String
}
# Root query
type Query {
# Get the current loged in user
viewer: User
}
By simply running granate in the same folder as the granate.yaml or placing
//go:generate granate at the top of your main.go file and running go generate, three files will be created.
schema/
- definitions.go
- adapters.go
- provider.go
The definitions.go file is where all the graphql specific code is.
adapters.go provides a set of interfaces to use for implementing the logic.
provider.go contains a set of function to bootstrap the graphql schema as
well as providing a graphiql interface to test your schema with.
For a more in depth overview of how to use Granate, check out the simple example under the example folder.
We support most graphql features. These are examples of things you can't yet generate with granate.
# Define interfaces (the only interface you can use for now is Node, which exists)
interface Entity {
id: ID!
name: String
}
# Define scalars
scalar URL
# Define unions
union Animal = Dog | Snake
# Define schemas
# You shouldn't need to do this
schema {
query: Query
mutation: Mutation
subscription: ...
}See the GraphQL cheat sheet for reference.