Documentation ¶
Overview ¶
Package handler helps build GraphQL services.
Index ¶
- func New(schema graphql.Schema, opts ...Option) (http.Handler, error)
- type DefaultErrorPresenter
- type DefaultRequestBuilder
- type DefaultRequestBuilderConfig
- type DefaultResultPresenter
- type ErrEmptyQuery
- type ErrParseQuery
- type ErrPrepare
- type ErrorPresenter
- type HTTPHandler
- type HTTPRequest
- type HTTPRequestParseError
- type LLConfig
- type LLHandler
- type LRUOperationCache
- type NopOperationCache
- type OperationCache
- type Option
- func DefaultFieldResolver(resolver graphql.FieldResolver) Option
- func MaxBodySize(size uint) Option
- func OverrideErrorPresenter(errorPresenter ErrorPresenter) Option
- func OverrideOperationCache(cache OperationCache) Option
- func OverrideRequestBuilder(requestBuilder RequestBuilder) Option
- func OverrideResultPresenter(resultPresenter ResultPresenter) Option
- func QueryParserOptions(options ...parser.ParseOption) Option
- type ParseHTTPRequestOptions
- type Request
- type RequestBuilder
- type RequestMiddleware
- type RequestMiddlewareNext
- type ResultPresenter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type DefaultErrorPresenter ¶
type DefaultErrorPresenter struct { // ResultPresenter is used to present ErrPrepare.Errs in an ExecutionResult. ResultPresenter ResultPresenter }
DefaultErrorPresenter implements an ErrorPresenter which is default used by HTTP handler when no error presenter is provided.
func (DefaultErrorPresenter) Write ¶
func (presenter DefaultErrorPresenter) Write(w http.ResponseWriter, err error)
Write implements ErrorPresenter.
type DefaultRequestBuilder ¶
type DefaultRequestBuilder struct {
Config *DefaultRequestBuilderConfig
}
DefaultRequestBuilder implements the default request builder used by HTTP handler to obtain a Request object from a http.Request.
func (DefaultRequestBuilder) Build ¶
func (builder DefaultRequestBuilder) Build(r *http.Request, h HTTPHandler) (*Request, error)
Build implements RequestBuilder.
type DefaultRequestBuilderConfig ¶
type DefaultRequestBuilderConfig struct { HTTPRequestParserOptions ParseHTTPRequestOptions QueryParserOptions []parser.ParseOption DefaultFieldResolver graphql.FieldResolver }
DefaultRequestBuilderConfig specifies settings to configure DefaultRequestBuilder.
type DefaultResultPresenter ¶
type DefaultResultPresenter struct{}
DefaultResultPresenter implements a ResultPresenter used by HTTP handler to present an ExecutionResult.
func (DefaultResultPresenter) Write ¶
func (DefaultResultPresenter) Write( w http.ResponseWriter, httpRequest *http.Request, graphqlRequest *Request, result *executor.ExecutionResult)
type ErrEmptyQuery ¶
ErrEmptyQuery describes an error when an empty query is not allowed.
func (ErrEmptyQuery) Error ¶
func (err ErrEmptyQuery) Error() string
Error implements Go's error interface.
type ErrParseQuery ¶
type ErrParseQuery struct { Request *http.Request ParsedRequest *HTTPRequest Err error }
ErrParseQuery describes an invalid GraphQL query document that failed parsing.
func (*ErrParseQuery) Error ¶
func (err *ErrParseQuery) Error() string
Error implements Go's error interface.
type ErrPrepare ¶
type ErrPrepare struct { Request *http.Request ParsedRequest *HTTPRequest Document ast.Document Errs graphql.Errors }
ErrPrepare indicates a failure in prepare a PreparedOperation for execution for a query.
func (*ErrPrepare) Error ¶
func (err *ErrPrepare) Error() string
Error implements Go's error interface.
type ErrorPresenter ¶
type ErrorPresenter interface { // Write sends the given error to w. Write(w http.ResponseWriter, err error) }
ErrorPresenter presents an error to a http.ResponseWriter.
type HTTPHandler ¶
type HTTPHandler interface { // Schema served by this handler Schema() graphql.Schema // OperationCache for the parsed queries OperationCache() OperationCache }
HTTPHandler provides interfaces to access settings in httpHandler from RequestBuilder.
type HTTPRequest ¶
type HTTPRequest struct { Query string `json:"query"` OperationName string `json:"operationName"` Variables map[string]interface{} `json:"variables"` }
HTTPRequest contains result values of ParseHTTPRequest.
func ParseHTTPRequest ¶
func ParseHTTPRequest(r *http.Request, options *ParseHTTPRequestOptions) (*HTTPRequest, error)
ParseHTTPRequest parses a GraphQL request from a http.Request object.
type HTTPRequestParseError ¶
type HTTPRequestParseError struct { Request *http.Request Options *ParseHTTPRequestOptions Err error }
HTTPRequestParseError is returned by ParseHTTPRequest when parsing failed.
func (*HTTPRequestParseError) Error ¶
func (err *HTTPRequestParseError) Error() string
Error implements Go's error interface.
type LLConfig ¶
type LLConfig struct { // Schema to be working on Schema graphql.Schema // OperationCache caches graphql.PreparedOperation created from a query to save parsing efforts. OperationCache OperationCache // Middlewares to be applied before executing a Request Middlewares []RequestMiddleware }
LLConfig contains configuration to set up a LLHandler.
type LLHandler ¶
type LLHandler struct {
// contains filtered or unexported fields
}
LLHandler creates a handler that is suit for serving GraphQL queries against a schema in a long-running process. It is useful as a low-level building block for building GraphQL services such as GraphQL web services.
func NewLLHandler ¶
NewLLHandler creates a LLHandler from given configuration.
func (*LLHandler) OperationCache ¶
func (handler *LLHandler) OperationCache() OperationCache
OperationCache returns handler.cache.
type LRUOperationCache ¶
type LRUOperationCache struct {
// contains filtered or unexported fields
}
LRUOperationCache is a thread-safe LRU cache that implements OperationCache. It serves as default operation cache for LLHandler. Most part of implementation directly derived from groupcache/lru [0] with sync.RWLock added to make it safe for concurrent access.
func NewLRUOperationCache ¶
func NewLRUOperationCache(maxEntries uint) (*LRUOperationCache, error)
NewLRUOperationCache creates a new LRUOperationCache with given size.
func (*LRUOperationCache) Add ¶
func (c *LRUOperationCache) Add(query string, operation *executor.PreparedOperation)
Add implements OperationCache.
func (*LRUOperationCache) Get ¶
func (c *LRUOperationCache) Get(query string) (operation *executor.PreparedOperation, ok bool)
Get implements OperationCache.
type NopOperationCache ¶
type NopOperationCache struct{}
NopOperationCache does nothing.
func (NopOperationCache) Add ¶
func (NopOperationCache) Add(query string, operation *executor.PreparedOperation)
Add implements OperationCache.
func (NopOperationCache) Get ¶
func (NopOperationCache) Get(query string) (operation *executor.PreparedOperation, ok bool)
Get implements OperationCache.
type OperationCache ¶
type OperationCache interface { // Get looks up operation for the given query. Get(query string) (operation *executor.PreparedOperation, ok bool) // Add adds an operation that associated with the query to the cache. Add(query string, operation *executor.PreparedOperation) }
OperationCache caches executor.PreparedOperation created from a query to save parsing efforts.
type Option ¶
type Option func(h *httpHandlerConfig)
Option configures httpHandler
func DefaultFieldResolver ¶
func DefaultFieldResolver(resolver graphql.FieldResolver) Option
DefaultFieldResolver sets the resolver to be used when a field doesn't provide one.
func MaxBodySize ¶
MaxBodySize sets the maximum number of bytes to be read from request body for ParseHTTPRequest called by DefaultRequestBuilder.
func OverrideErrorPresenter ¶
func OverrideErrorPresenter(errorPresenter ErrorPresenter) Option
OverrideErrorPresenter overrides default RequestBuilder.
func OverrideOperationCache ¶
func OverrideOperationCache(cache OperationCache) Option
OverrideOperationCache that overrides default OperationCache.
func OverrideRequestBuilder ¶
func OverrideRequestBuilder(requestBuilder RequestBuilder) Option
OverrideRequestBuilder overrides default RequestBuilder.
func OverrideResultPresenter ¶
func OverrideResultPresenter(resultPresenter ResultPresenter) Option
OverrideResultPresenter overrides default ResultPresenter.
func QueryParserOptions ¶
func QueryParserOptions(options ...parser.ParseOption) Option
QueryParserOptions provides settings to the parser for GraphQL query.
type ParseHTTPRequestOptions ¶
type ParseHTTPRequestOptions struct { // Maximum size in bytes to be read when parsing a GraphQL query from HTTP request body. If it is // not set, the size is capped at 10MB. MaxBodySize uint }
ParseHTTPRequestOptions provides settings to ParseHTTPRequest.
type Request ¶
type Request struct { Ctx context.Context Operation *executor.PreparedOperation ExecuteOpts []executor.ExecuteOption }
Request contains parameter required by Serve.
type RequestBuilder ¶
type RequestBuilder interface { // Build turns a http.Request r into a Request for h. w is used for sending errors. Build(r *http.Request, h HTTPHandler) (*Request, error) }
RequestBuilder generates a Request to be served by LLHandler from an HTTP request.
type RequestMiddleware ¶
type RequestMiddleware interface { // Apply modifies request. next specifies the next action to do after applying the middleware. Apply(request *Request, next *RequestMiddlewareNext) }
RequestMiddleware applies changes on Request before its operation gets executed. It can be used to modify ExecuteParams in Request such as setting root values and/or supplied app-specific context.
type RequestMiddlewareNext ¶
type RequestMiddlewareNext struct {
// contains filtered or unexported fields
}
RequestMiddlewareNext is provided to a RequestMiddleware to specify the next action to do.
func (*RequestMiddlewareNext) Next ¶
func (next *RequestMiddlewareNext) Next(request *Request)
Next continues applying the next middleware in the chain.
func (*RequestMiddlewareNext) NextError ¶
func (next *RequestMiddlewareNext) NextError(err *graphql.Error)
NextError stops applying rest middlewares in the chain and sends an ExecutionResult that includes given error.
func (*RequestMiddlewareNext) NextResult ¶
func (next *RequestMiddlewareNext) NextResult(result *executor.ExecutionResult)
NextResult stops applying rest middlewares in the chain and sends the result.
type ResultPresenter ¶
type ResultPresenter interface { // Write writes an ExecutionResult to w. Write( w http.ResponseWriter, httpRequest *http.Request, graphqlRequest *Request, result *executor.ExecutionResult) }
ResultPresenter presents an execution result to a http.ResponseWriter.