GraphQL::Execution(3pm) | User Contributed Perl Documentation | GraphQL::Execution(3pm) |
GraphQL::Execution - Execute GraphQL queries
use GraphQL::Execution qw(execute); my $result = execute($schema, $doc, $root_value);
Executes a GraphQL query, returns results.
my $result = execute( $schema, $doc, # can also be AST $root_value, $context_value, $variable_values, $operation_name, $field_resolver, $promise_code, );
For instance:
my $schema = GraphQL::Schema->from_doc(<<'EOF'); type Query { dateTimeNow: String, hi: String } EOF my $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_resolver parameters:
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; }
query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }
The $variable_values will 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.
2022-03-27 | perl v5.34.0 |