Documentation
¶
Index ¶
- Constants
- Variables
- func RegisterCachingStoreFactory(schema string, factory CachingStoreFactory)
- type Caching
- func (c *Caching) Cleanup() error
- func (c *Caching) HandleRequest(w http.ResponseWriter, r *cachingRequest, h caddyhttp.HandlerFunc) error
- func (c *Caching) Provision(ctx caddy.Context) error
- func (c *Caching) PurgeQueryResultByOperationName(ctx context.Context, name string) error
- func (c *Caching) PurgeQueryResultBySchema(ctx context.Context, schema *graphql.Schema) error
- func (c *Caching) PurgeQueryResultByTypeField(ctx context.Context, typeName, fieldName string) error
- func (c *Caching) PurgeQueryResultByTypeKey(ctx context.Context, typeName, fieldName string, value interface{}) error
- func (c *Caching) PurgeQueryResultByTypeName(ctx context.Context, name string) error
- func (c *Caching) Validate() error
- type CachingRule
- type CachingRules
- type CachingStatus
- type CachingStore
- type CachingStoreFactory
- type CachingVaries
- type CachingVary
- type Complexity
- type Handler
- func (h *Handler) AdminGraphQLHandle(w http.ResponseWriter, r *http.Request)
- func (h Handler) CaddyModule() caddy.ModuleInfo
- func (h *Handler) Cleanup() error
- func (h *Handler) GraphQLHandle(w http.ResponseWriter, r *http.Request)
- func (h *Handler) GraphQLOverWebsocketHandle(w http.ResponseWriter, r *http.Request)
- func (h *Handler) Provision(ctx caddy.Context) (err error)
- func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request, n caddyhttp.Handler) error
- func (h *Handler) UnmarshalCaddyfile(d *caddyfile.Dispenser) (err error)
- func (h *Handler) Validate() error
- type Metrics
Constants ¶
View Source
const ( CachingQueryResultStale cachingQueryResultStatus = "STALE" CachingQueryResultValid cachingQueryResultStatus = "VALID" )
Variables ¶
View Source
var ErrHandleUnknownOperationTypeError = errors.New("unknown operation type")
View Source
var ErrNotAllowIntrospectionQuery = errors.New("introspection query is not allowed")
Functions ¶
func RegisterCachingStoreFactory ¶
func RegisterCachingStoreFactory(schema string, factory CachingStoreFactory)
Types ¶
type Caching ¶
type Caching struct {
// Storage DSN currently support redis and freecache only.
// Redis example:
// redis://username:password@localhost:6379?db=0&max_retries=3
// more dsn options see at https://github.com/go-redis/redis/blob/v8.11.5/options.go#L31
// Freecache example:
// freecache://?cache_size=104857600
// If not set it will be freecache://?cache_size=104857600 (cache size 100MB)
StoreDsn string `json:"store_dsn,omitempty"`
// Caching rules
Rules CachingRules `json:"rules,omitempty"`
// Caching varies
Varies CachingVaries `json:"varies,omitempty"`
// GraphQL type fields will be used to detect change of cached query results when user execute mutation query.
// Example when execute mutation query bellow:
// mutation { updateUser { id } }
// if `updateUser` field have type User and id returning in example above is 1, all cache results of user id 1 will be purged.
// If not set default value of it will be `id` for all types.
TypeKeys graphql.RequestTypes `json:"type_keys,omitempty"`
// Auto invalidate query result cached by mutation result type keys
// Example: if you had cached query result of User type, when you make mutation query and result
// of this query have type User with id's 3, all cached query result related with id 3 of User type will be purged.
AutoInvalidate bool
// Add debug headers like query result cache key,
// plan cache key and query result had types keys or not...
DebugHeaders bool
// contains filtered or unexported fields
}
func (*Caching) HandleRequest ¶
func (c *Caching) HandleRequest(w http.ResponseWriter, r *cachingRequest, h caddyhttp.HandlerFunc) error
HandleRequest caching GraphQL query result by configured rules and varies.
func (*Caching) PurgeQueryResultByOperationName ¶
func (*Caching) PurgeQueryResultBySchema ¶
func (*Caching) PurgeQueryResultByTypeField ¶
func (*Caching) PurgeQueryResultByTypeKey ¶
func (*Caching) PurgeQueryResultByTypeName ¶
type CachingRule ¶
type CachingRule struct {
// GraphQL type to cache
// ex: `User` will cache all query results have type User
// ex: `User { is_admin }` will cache all query results have type User and have field `is_admin`.
// If not set this rule will match all types.
Types graphql.RequestTypes `json:"types,omitempty"`
// how long query results that match the rule types should be store.
MaxAge caddy.Duration `json:"max_age,omitempty"`
// how long stale query results that match the rule types should be served while fresh data is already being fetched in the background.
Swr caddy.Duration `json:"swr,omitempty"`
// Varies name apply to query results that match the rule types.
// If not set query results will cache public.
Varies []string `json:"varies,omitempty"`
}
type CachingRules ¶
type CachingRules map[string]*CachingRule
type CachingStatus ¶
type CachingStatus string
const ( CachingStatusPass CachingStatus = "PASS" CachingStatusHit CachingStatus = "HIT" CachingStatusMiss CachingStatus = "MISS" )
type CachingStore ¶
func FreeCacheStoreFactory ¶
func FreeCacheStoreFactory(u *url.URL) (*CachingStore, error)
func NewCachingStore ¶
func NewCachingStore(u *url.URL) (*CachingStore, error)
func RedisCachingStoreFactory ¶
func RedisCachingStoreFactory(u *url.URL) (*CachingStore, error)
type CachingStoreFactory ¶
type CachingStoreFactory = func(u *url.URL) (*CachingStore, error)
type CachingVaries ¶
type CachingVaries map[string]*CachingVary
type CachingVary ¶
type CachingVary struct {
// Headers names for identifier query result cache key.
Headers []string `json:"headers,omitempty"`
// Cookies names for identifier query result cache key.
Cookies []string `json:"cookies,omitempty"`
}
CachingVary using to compute query result cache key by http request cookies and headers.
type Complexity ¶
type Complexity struct {
// Max query depth accept, disabled by default.
MaxDepth int `json:"max_depth,omitempty"`
// Query node count limit, disabled by default.
NodeCountLimit int `json:"node_count_limit,omitempty"`
// Max query complexity, disabled by default.
MaxComplexity int `json:"complexity,omitempty"`
}
type Handler ¶
type Handler struct {
// Rewrite
RewriteRaw json.RawMessage `json:"rewrite_raw,omitempty" caddy:"namespace=http.handlers inline_key=rewrite"`
// Reverse proxy
ReverseProxyRaw json.RawMessage `json:"reverse_proxy,omitempty" caddy:"namespace=http.handlers inline_key=reverse_proxy"`
// Upstream graphql server url
Upstream string `json:"upstream,omitempty"`
// Fetch schema interval, disabled by default.
FetchSchemaInterval caddy.Duration `json:"fetch_schema_interval,omitempty"`
// Fetch schema request timeout, "30s" by default
FetchSchemaTimeout caddy.Duration `json:"fetch_schema_timeout,omitempty"`
// Fetch schema headers
FetchSchemaHeader http.Header `json:"fetch_schema_headers,omitempty"`
// Whether to disable introspection request of downstream.
DisabledIntrospection bool `json:"disabled_introspection,omitempty"`
// Whether to disable playground paths.
DisabledPlaygrounds bool `json:"disabled_playgrounds,omitempty"`
// Request complexity settings, disabled by default.
Complexity *Complexity `json:"complexity,omitempty"`
// Caching queries result settings, disabled by default.
Caching *Caching `json:"caching,omitempty"`
// Cors origins
CORSOrigins []string `json:"cors_origins,omitempty"`
// Cors allowed headers
CORSAllowedHeaders []string `json:"cors_allowed_headers,omitempty"`
ReverseProxy *reverseproxy.Handler `json:"-"`
Rewrite *rewrite.Rewrite `json:"-"`
// contains filtered or unexported fields
}
Handler implements an HTTP handler as a GraphQL reverse proxy server for caching, securing, and monitoring.
func (*Handler) AdminGraphQLHandle ¶
func (h *Handler) AdminGraphQLHandle(w http.ResponseWriter, r *http.Request)
AdminGraphQLHandle purging query result cached and describe cache key.
func (Handler) CaddyModule ¶
func (h Handler) CaddyModule() caddy.ModuleInfo
func (*Handler) GraphQLHandle ¶
func (h *Handler) GraphQLHandle(w http.ResponseWriter, r *http.Request)
GraphQLHandle ensure GraphQL request is safe before forwarding to upstream and caching query result of it.
func (*Handler) GraphQLOverWebsocketHandle ¶
func (h *Handler) GraphQLOverWebsocketHandle(w http.ResponseWriter, r *http.Request)
GraphQLOverWebsocketHandle handling websocket connection between client & upstream.
func (*Handler) UnmarshalCaddyfile ¶
nolint:funlen,gocyclo
Source Files
¶
- caching.go
- caching_handler.go
- caching_plan.go
- caching_purger.go
- caching_request.go
- caching_responsewriter.go
- caching_result.go
- caching_rule.go
- caching_store.go
- caching_swr.go
- caching_tag.go
- caching_vary.go
- caddyfile.go
- caddyfile_caching.go
- caddyfile_complexity.go
- complexity.go
- gbox.go
- handler.go
- metrics.go
- router.go
- schema_fetcher.go
- utils.go
- ws.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Copied from https://github.com/caddyserver/xcaddy/blob/b7fd102f41e12be4735dc77b0391823989812ce8/environment.go#L251
|
Copied from https://github.com/caddyserver/xcaddy/blob/b7fd102f41e12be4735dc77b0391823989812ce8/environment.go#L251 |
|
internal
|
|
Click to show internal directories.
Click to hide internal directories.

