NAME
Web::API::Mapper - Web::API::Mapper is an API (Application Programming Interface) convergence class for mapping/dispatching API to web frameworks.
SYNOPSIS
package YourService;
use Any::Moose;
sub route { {
post => [
'/bar/(\d+)' => sub { my $args = shift; return $1; }
]
get => [
....
]
} }
package main;
my $service = YourService->new;
my $serviceA = OtherService->new;
$service->connect( ... );
my $m = Web::API::Mapper->new
->mount( '/foo' => $service->route )
->mount( '/a' => $serviceA->route );
my $ret = $m->post->dispatch( '/foo/bar' , { ... args ... } );
my $ret = $m->get->dispatch( '/foo/bar' );
my $ret = $m->dispatch( '/foo/bar' , { args ... } );
$m->post->mount( '/foo' , [ '/subpath/to' => sub { .... } ]);
$m->mount( '/fb' => { post => [ ... ] , get => [ ... ] } )->mount( ... );
DESCRIPTION
Web::API::Mapper is an API (Application Programming Interface) convergence class for mapping/dispatching API to web frameworks.
This module is for reducing class coupling of web services on web frameworks.
Web frameworks are always changing, and one day you will need to migrate your code to the latest web framework. If your code heavily depends on your framework, it's pretty hard to migrate and it takes time.
by using Web::API::Mapper you can simply seperate service application and framework. you can simply mount these api service like Twitter ... etc, and dispatch paths to these services.
Web::API::Mapper is using Path::Dispatcher for dispatching.
TODO
ROUTE SPEC
API Provider can provide a route hash reference for dispatching rules.
- post => [ '/path/to/(\d+)' => sub { } , ... ]
- get => [ '/path/to/(\d+)' => sub { } , ... ]
- fallback => sub { }
ACCESSORS
route
post
is a Web::API::Mapper::RuleSet object.
get
is a Web::API::Mapper::RuleSet object.
fallback
is a CodeRef, fallback handler.
FUNCTIONS
mount
dispatch
EXAMPLE
package Twitter::API;
sub route { {
post => [
'/timeline/add/' => sub { my $args = shift; .... },
'/timeline/remove/' => sub { ... },
],
get => [
'/timeline/get/(\w+)' => sub { my $args = shift; .... return $1 },
],
} }
package main;
# This will add rule path to /twitter/timeline/add/ ... etc
my $m = Web::API::Mapper->new( '/twitter' => Twitter::API->route );
$m->mount( '/basepath' , { post => [ ... ] } );
$m->post->mount( '/basepath' , [ ... ] );
$m->dispatch( '/path/to' , { args ... } );
1;
For example, if you are in Dancer:
#!/usr/bin/perl
use Dancer;
use JSON;
our $m = Web::API::Mapper->new
->mount( '/twitter' => Twitter::API->route )
->mount( '/basepath' , { post => [ ... ] } );
any '/api/*' => sub {
return encode_json( $m->dispatch( $1 , params ) );
};
# request for '/api/twitter/timeline/add' to run!
dance;
AUTHOR
Cornelius E< cornelius.howl at gmail.com >
LICENSE
Perl
3 POD Errors
The following errors were encountered while parsing the POD:
- Around line 125:
'=item' outside of any '=over'
- Around line 137:
'=item' outside of any '=over'
- Around line 214:
Unknown E content in E< cornelius.howl at gmail.com >