batching

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2024 License: GPL-3.0 Imports: 13 Imported by: 1

README

gqlgen-batching

GraphQL batch support for gqlgen

What is gqlgen-batching?

gqlgen-batching is an extension of gqlgen to support GraphQL Batching.

Quick start

  1. Add package import
    import "github.com/davewhit3/gqlgen-batching"
    
  2. Add batching transport
    srv.AddTransport(batching.POST{})
    
  3. Prepare your server
    
     schema := generated.NewExecutableSchema(graph.NewResolver())
     srv := handler.New(schema)
    
     srv.AddTransport(transport.Websocket{
     	KeepAlivePingInterval: 10 * time.Second,
     })
     srv.AddTransport(transport.Options{})
     srv.AddTransport(transport.GET{})
     srv.AddTransport(batching.POST{})
     srv.AddTransport(transport.MultipartForm{})
    
     srv.SetQueryCache(lru.New(1000))
    
     srv.Use(extension.Introspection{})
     srv.Use(extension.AutomaticPersistedQuery{
     	Cache: lru.New(100),
     })
    
     http.Handle("/", playground.Handler("Starwars", "/query"))
     http.Handle("/query", srv)
    
     log.Fatal(http.ListenAndServe(":8080", nil))
    
    

How to use?

Add header to request X-Batch: true

curl -X POST http://localhost:8080/query \
-H "X-Batch: true" -H "Content-Type: application/json" \
-d '[{"query":"{hero(episode: JEDI) { name }}"},{"query":"{hero(episode: EMPIRE) { name }}"}]'

Result:

[
   {
      "data": {
         "hero": {
            "name": "R2-D2"
         }
      }
   },
   {
      "data": {
         "hero": {
            "name": "Luke Skywalker"
         }
      }
   }
]

Documentation

Index

Constants

View Source
const HeaderBatch = "X-Batch"

Variables

This section is empty.

Functions

func IsBatchingRawQuery

func IsBatchingRawQuery(query string) bool

func SplitQuery

func SplitQuery(query string) []*graphql.RawParams

Types

type GraphqlRawParamsCollection

type GraphqlRawParamsCollection []*graphql.RawParams

func (GraphqlRawParamsCollection) Len

func (*GraphqlRawParamsCollection) UnmarshalJSON

func (c *GraphqlRawParamsCollection) UnmarshalJSON(b []byte) error

UnmarshalJSON could unmarshal slice or single query

type POST

type POST struct {
	transport.POST
	// Map of all headers that are added to graphql response. If not
	// set, only one header: Content-Type: application/json will be set.
	ResponseHeaders map[string][]string
}

POST implements the POST side of the default HTTP transport defined in https://github.com/APIs-guru/graphql-over-http#post

func (POST) Do

type Response

type Response interface {
	*graphql.Response | []*graphql.Response
}

Directories

Path Synopsis
example module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL