GraphQL-Client
view release on metacpan or search on metacpan
lib/GraphQL/Client.pm view on Meta::CPAN
=head1 VERSION
version 0.605
=head1 SYNOPSIS
my $graphql = GraphQL::Client->new(url => 'http://localhost:4000/graphql');
# Example: Hello world!
my $response = $graphql->execute('{hello}');
# Example: Kitchen sink
my $query = q[
query GetHuman {
human(id: $human_id) {
name
height
}
}
];
my $variables = {
human_id => 1000,
};
my $operation_name = 'GetHuman';
my $transport_options = {
headers => {
authorization => 'Bearer s3cr3t',
},
};
my $response = $graphql->execute($query, $variables, $operation_name, $transport_options);
# Example: Asynchronous with Mojo::UserAgent (promisify requires Future::Mojo)
my $ua = Mojo::UserAgent->new;
my $graphql = GraphQL::Client->new(ua => $ua, url => 'http://localhost:4000/graphql');
my $future = $graphql->execute('{hello}');
$future->promisify->then(sub {
my $response = shift;
...
});
=head1 DESCRIPTION
C<GraphQL::Client> provides a simple way to execute L<GraphQL|https://graphql.org/> queries and
mutations on a server.
This module is the programmatic interface. There is also a L<"CLI program"|graphql>.
GraphQL servers are usually served over HTTP. The provided transport, L<GraphQL::Client::http>, lets
you plug in your own user agent, so this client works naturally with L<HTTP::Tiny>,
L<Mojo::UserAgent>, and more. You can also use L<HTTP::AnyUA> middleware.
=head1 ATTRIBUTES
=head2 url
The URL of a GraphQL endpoint, e.g. C<"http://myapiserver/graphql">.
=head2 unpack
Whether or not to "unpack" the response, which enables a different style for error-handling.
Default is 0.
See L</ERROR HANDLING>.
=head2 transport_class
The package name of a transport.
This is optional if the correct transport can be correctly determined from the L</url>.
=head2 transport
The transport object.
By default this is automatically constructed based on L</transport_class> or L</url>.
=head1 METHODS
=head2 new
$graphql = GraphQL::Client->new(%attributes);
Construct a new client.
=head2 execute
$response = $graphql->execute($query);
$response = $graphql->execute($query, \%variables);
$response = $graphql->execute($query, \%variables, $operation_name);
$response = $graphql->execute($query, \%variables, $operation_name, \%transport_options);
$response = $graphql->execute($query, \%variables, \%transport_options);
Execute a request on a GraphQL server, and get a response.
By default, the response will either be a hashref with the following structure or a L<Future> that
resolves to such a hashref, depending on the transport and how it is configured.
{
data => {
field1 => {...}, # or [...]
...
},
errors => [
{ message => 'some error message blah blah blah' },
...
],
}
Note: Setting the L</unpack> attribute affects the response shape.
=head1 ERROR HANDLING
There are two different styles for handling errors.
If L</unpack> is 0 (off, the default), every response -- whether success or failure -- is enveloped
( run in 0.778 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )