package
module
Version:
v0.2.0
Opens a new window with list of versions in this module.
Published: Oct 30, 2024
License: MIT
Opens a new window with license information.
Imports: 4
Opens a new window with list of imports.
Imported by: 1
Opens a new window with list of known importers.
README
¶
graphqlclientgen
Here Be Dragons 🐉
This is an experiment of generating GraphQL clients in Golang. It's heavily inspired by gqlgen.
-
Goals
- Structure config and generated clients in a future proof way to enable redesign of codegen
- Single client generated for entire schema
- ProtoClient interface to support multiple protocols and custom clients
- Use static types in client interface to check api compability during build time
- Use GraphQL comments in Golang type and function definitions
- Enable field selection in client to partially fetch objects
- Reuse gqlgen custom scalars
-
Limitations
- Mostly designed to use GraphQL as standard RPC
- Weak support for deep graph fetching (can't have multiple fields with same object type)
- Only supports scalars and objects
- Only supports hard-coded basic scalars (bool, float, id, string, int)
Examples
func Example() {
// create client, supports custom protocols through ProtoClient interface
c := client.New(graphqlclientgen.NewHttpClient("http://localhost:8080/query"))
todo, err := c.CreateTodo(context.TODO(),
// static typed inputs
client.NewTodo{
Text: "bar",
UserId: "5",
},
// explicit requested fields, easy to use with auto-complete
client.TodoFields{
client.TodoFieldID,
client.TodoFieldText,
// supports requesting specific fields of related objects
client.UserFields{
client.UserFieldID,
client.UserFieldName,
},
})
}
Documentation
¶
type Body struct {
Query string `json:"query"`
Variables map[string]any `json:"variables"`
}
type Error struct {
Message string `json:"message"`
Extensions map[string]string `json:"extensions"`
}
type HttpClient struct {
}
NewHttpClient creates a new HttpClient for graphqlclientgen clients
Do performs http post request towards a GraphQL api
WithHttpClient sets a custom http.Client for HttpClient
Source Files
¶
Directories
¶
Click to show internal directories.
Click to hide internal directories.