graphql.proto

Package : envoy.config.filter.http.graphql.v2

Top

graphql.proto

Table of Contents

AbstractTypeResolver

GraphQLConfig

GraphQLRouteConfig

Field Type Label Description
schema envoy.config.core.v3.DataSource Schema to use in string format.
enableIntrospection bool Do we enable introspection for the schema? general recommendation is to disable this for production and hence it defaults to false.
resolutions []envoy.config.filter.http.graphql.v2.Resolution repeated The resolver map to use to resolve the schema.
In the future, we will support persistent queries, this will be a map of query id to query. map<string, Query> presistent_queries = 3; when we support persistent queries, we may want to use them exclusivly, for predictable operations. (i.e. no surprise mega query from a client). bool only_persistent_queries = 4;

JsonKeyValue

Field Type Label Description
key string PARTIALLY IMPLEMENTED if empty, the value will be parsed as json and replace the entire previously-parsed json value –> this part is only needed for gRPC and thus not implemented yet
value envoy.config.filter.http.graphql.v2.JsonKeyValue.JsonValue

JsonKeyValue.JsonValue

Field Type Label Description
node envoy.config.filter.http.graphql.v2.JsonNode
valueProvider envoy.config.filter.http.graphql.v2.ValueProvider
list envoy.config.filter.http.graphql.v2.JsonKeyValue.JsonValueList

JsonKeyValue.JsonValueList

Field Type Label Description
values []envoy.config.filter.http.graphql.v2.JsonKeyValue.JsonValue repeated

JsonNode

Field Type Label Description
keyValues []envoy.config.filter.http.graphql.v2.JsonKeyValue repeated if keys repeat, the latest one replaces any earlier values associated with that key.
repeated list, rather than a map, to have ordering to allow for merge semantics within the data plane, for example: - gRPC input uses special empty string for input key to set entire body - gRPC wants to replace a certain field in parsed body from GraphQL arg

PathSegment

Field Type Label Description
key string
index uint32

Query

Field Type Label Description
query envoy.config.core.v3.DataSource

QueryMatcher

Field Type Label Description
fieldMatcher envoy.config.filter.http.graphql.v2.QueryMatcher.FieldMatcher

QueryMatcher.FieldMatcher

Field Type Label Description
type string Object type. For example, Query.
field string Field with in the object.

RESTResolver

Field Type Label Description
serverUri envoy.config.core.v3.HttpUri
requestTransform envoy.config.filter.http.graphql.v2.RequestTemplate configuration used to compose the outgoing request to a REST API
spanName string pre-execution engine transformations
Request flow: GraphQL request -> request_transform (instantiate REST request) -> REST API resp -> pre_execution_transform -> execution engine -> complete GraphQL field response
ResponseTemplate pre_execution_transform = 3;

RequestTemplate

Field Type Label Description
headers []envoy.config.filter.http.graphql.v2.RequestTemplate.HeadersEntry repeated Use this attribute to set request headers to your REST service. It consists of a map of strings to value providers. The string key determines the name of the resulting header, the value provided will be the value.
at least need “:method” and “:path”
queryParams []envoy.config.filter.http.graphql.v2.RequestTemplate.QueryParamsEntry repeated Use this attribute to set query parameters to your REST service. It consists of a map of strings to value providers. The string key determines the name of the query param, the provided value will be the value. This value is appended to any value set to the :path header in headers.
Interpolation is done in envoy rather than the control plane to prevent escaped character issues. Additionally, we may be providing values not known until the request is being executed (e.g., graphql parent info).
json envoy.config.filter.http.graphql.v2.JsonNode json representation of outgoing body. empty string key can be used to signal parsing the value as json and using it as the whole json body.

RequestTemplate.HeadersEntry

Field Type Label Description
key string
value envoy.config.filter.http.graphql.v2.ValueProvider

RequestTemplate.QueryParamsEntry

Field Type Label Description
key string
value envoy.config.filter.http.graphql.v2.ValueProvider

Resolution

Field Type Label Description
matcher envoy.config.filter.http.graphql.v2.QueryMatcher Match an object type and field
resolver envoy.config.core.v3.TypedExtensionConfig The resolver to use.

ResponseTemplate

ValueProvider

Field Type Label Description
graphqlArg envoy.config.filter.http.graphql.v2.ValueProvider.GraphQLArgExtraction type inferred from schema, no need to provide it.
typedProvider envoy.config.filter.http.graphql.v2.ValueProvider.TypedValueProvider
graphqlParent envoy.config.filter.http.graphql.v2.ValueProvider.GraphQLParentExtraction Fetch value from the graphql_parent of the current field.
providerTemplate string If non-empty, the template to interpolate the extracted value into. For example, if the string is /api/pets/{}/name and the extracted value 123 is the pet ID will then the extracted value is /api/pets/123/name Use {} as the interpolation character (even repeated) regardless of the type of the provided value.

ValueProvider.GraphQLArgExtraction

Field Type Label Description
argName string The argument name to fetch. The argument value fetched will have a type from the schema that we validate in envoy. If the name is invalid, returns the zero-value primitive or null.
path []envoy.config.filter.http.graphql.v2.PathSegment repeated Optional: fetches the value in the argument selected at this key. If the key is invalid, returns the zero-value primitive or null.

ValueProvider.GraphQLParentExtraction

Field Type Label Description
path []envoy.config.filter.http.graphql.v2.PathSegment repeated Fetches the value in the graphql parent at this key. The value will always be accepted since the parent object is not strongly-typed. If the key is invalid, returns null.

ValueProvider.TypedValueProvider

Field Type Label Description
type envoy.config.filter.http.graphql.v2.ValueProvider.TypedValueProvider.Type Type that the value will be coerced into. For example if the extracted value is “9”, and type is INT, this value will be cast to an int type.
header string Fetches the request/response header's value. If not found, uses empty string
value string inline value, use as provided rather than extracting from another source

ValueProvider.TypedValueProvider.Type

Name Number Description
STRING 0
INT 1
FLOAT 2
BOOLEAN 3