Skip to content

loa/graphqlclientgen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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,
          },
        })
      }

Releases

No releases published

Languages