NAME
GraphQL::Execution - Execute GraphQL queries
SYNOPSIS
use GraphQL::Execution qw(execute);my $result = execute($schema, $doc, $root_value);
DESCRIPTION
Executes a GraphQL query, returns results.
METHODS
execute
my $result = execute($schema,$doc, # can also be AST$root_value,$context_value,$variable_values,$operation_name,$field_resolver,$promise_code,);
- $schema
-
A GraphQL::Schema.
- $doc
-
Either a GraphQL query document to be fed in to "parse" in GraphQL::Language::Parser, or a return value from that.
- $root_value
-
A root value that can be used by field-resolvers. The default one needs a code-ref, a hash-ref or an object.
For instance:
my $schema = GraphQL::Schema->from_doc(<<'EOF');type Query { dateTimeNow: String, hi: String }EOFmy $root_value = {dateTimeNow => sub { DateTime->now->ymd },hi => "Bob",};my $data = execute($schema, "{ dateTimeNow hi }", $root_value);will return:
{data => {dateTimeNow => { ymd => '20190501' },hi => 'Bob',}}Be aware that with the default field-resolver, when it calls a method, that method will get called with "$args" in GraphQL::Type::Library "$context" in GraphQL::Type::Library, "$info" in GraphQL::Type::Library. To override that to pass no parameters, this is suitable as a
$field_resolverparameters:sub {my ($root_value, $args, $context, $info) = @_;my $field_name = $info->{field_name};my $property = ref($root_value) eq 'HASH'? $root_value->{$field_name}: $root_value;return $property->($args, $context, $info) if ref $property eq 'CODE';return $root_value->$field_name if ref $property; # no args$property;}
- $context_value
-
A per-request scalar, that will be passed to field-resolvers.
- $variable_values
-
A hash-ref, typically the decoded JSON object supplied by a client. E.g. for this query:
query q($input: TestInputObject) {fieldWithObjectInput(input: $input)}The
$variable_valueswill need to be a JSON object with a key"input", whose value will need to conform to the input type"TestInputObject".The purpose of this is to avoid needing to hard-code input values in your query. This aids in, among other things, being able to whitelist individual queries as acceptable, non-abusive queries to your system; and being able to generate client-side code for client-side validation rather than including the full GraphQL system in client code.
- $operation_name
-
A string (or
"undef") that if given will be the name of one of the operations in the query.
- $field_resolver
-
A code-ref to be used instead of the default field-resolver.
- $promise_code
-
If you need to return a promise, supply a hash-ref matching "PromiseCode" in GraphQL::Type::Library.