GithubHelp home page GithubHelp logo

cliveholloway / dancer2-plugin-graphql Goto Github PK

View Code? Open in Web Editor NEW

This project forked from graphql-perl/dancer2-plugin-graphql

0.0 0.0 0.0 34 KB

Dancer2 plugin for GraphQL

Home Page: https://metacpan.org/release/Dancer2-Plugin-GraphQL

Perl 100.00%

dancer2-plugin-graphql's Introduction

NAME

Dancer2::Plugin::GraphQL - a plugin for adding GraphQL route handlers

SYNOPSIS

package MyWebApp;

use Dancer2;
use Dancer2::Plugin::GraphQL;
use GraphQL::Schema;

my $schema = GraphQL::Schema->from_doc(<<'EOF');
schema {
  query: QueryRoot
}
type QueryRoot {
  helloWorld: String
}
EOF
graphql '/graphql' => $schema, { helloWorld => 'Hello, world!' };

dance;

# OR, equivalently:
graphql '/graphql' => $schema => sub {
  my ($app, $body, $execute) = @_;
  # returns JSON-able Perl data
  $execute->(
    $schema,
    $body->{query},
    undef, # $root_value
    $app->request->headers,
    $body->{variables},
    $body->{operationName},
    undef, # $field_resolver
  );
};

# OR, with bespoke user-lookup and caching:
graphql '/graphql' => sub {
  my ($app, $body, $execute) = @_;
  my $user = MyStuff::User->lookup($app->request->headers->header('X-Token'));
  die "Invalid user\n" if !$user; # turned into GraphQL { errors => [ ... ] }
  my $cached_result = MyStuff::RequestCache->lookup($user, $body->{query});
  return $cached_result if $cached_result;
  MyStuff::RequestCache->cache_and_return($execute->(
    $schema,
    $body->{query},
    undef, # $root_value
    $user, # per-request info
    $body->{variables},
    $body->{operationName},
    undef, # $field_resolver
  ));
};

DESCRIPTION

The graphql keyword which is exported by this plugin allow you to define a route handler implementing a GraphQL endpoint.

Parameters, after the route pattern. The first three can be replaced with a single array-ref. If so, the first element is a classname-part, which will be prepended with "GraphQL::Plugin::Convert::". The other values will be passed to that class's "to_graphql" in GraphQL::Plugin::Convert method. The returned hash-ref will be used to set options.

E.g.

graphql '/graphql' => [ 'Test' ]; # uses GraphQL::Plugin::Convert::Test
  • $schema

    A GraphQL::Schema object.

  • $root_value

    An optional root value, passed to top-level resolvers.

  • $field_resolver

    An optional field resolver, replacing the GraphQL default.

  • $route_handler

    An optional route-handler, replacing the plugin's default - see example above for possibilities.

    It must return JSON-able Perl data in the GraphQL format, which is a hash with at least one of a data key and/or an errors key.

    If it throws an exception, that will be turned into a GraphQL-formatted error.

If you supply two code-refs, they will be the $resolver and $handler. If you only supply one, it will be $handler. To be certain, pass all four post-pattern arguments.

The route handler code will be compiled to behave like the following:

  • Passes to the GraphQL execute, possibly via your supplied handler, the given schema, $root_value and $field_resolver.
  • The action built matches POST / GET requests.
  • Returns GraphQL results in JSON form.

CONFIGURATION

By default the plugin will not return GraphiQL, but this can be overridden with plugin setting 'graphiql', to true.

Here is example to use GraphiQL:

plugins:
  GraphQL:
    graphiql: true

AUTHOR

Ed J

Based heavily on Dancer2::Plugin::Ajax by "Dancer Core Developers".

COPYRIGHT AND LICENSE

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

dancer2-plugin-graphql's People

Contributors

mohawk2 avatar manwar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.