NAME

WWW::REST::Apid - Generic REST API Module

SYNOPSIS

use WWW::REST::Apid;
use Authen::Simple::LDAP;

my $server = WWW::REST::Apid->new(
 host => 'localhost',
 port => 8080,
 apiname => 'my api',
 apiversion => '1.0',
 authbasic => 1,
 sublogin => sub { 
                    my($user, $pass) = @_;
                    my $ldap = Authen::Simple::LDAP->new( 
                    host    => 'ldap.company.com',
                    basedn  => 'ou=People,dc=company,dc=net'
                  );
                  if ( $ldap->authenticate( $user, $pass ) ) {
                    return 1; # ok
                  }
                  return 0; # fail
                },
 log => sub { my $msg = shift; syslog('info', $msg); },
 foreground => 0,
);

$server->mapuri(path => '/', doauth => 1, handler => sub { return { msg => 'ok' } });

$server->run();

DESCRIPTION

The WWW::REST::Apid module can be used to implement a REST API for almost anything.

If you want fast and easy results, please try the apid daemon, which is shipped with the WWW::REST::Apid distribution, first.

METHODS

new

The new method returns a new WWW::REST::Apid object. All parameters are optional and will be preset with reasonable defaults.

Supported parameters:

host

The hostname or ip address where the daemon will listen to. Default: 'localhost'.

port

The TCP port to use. Default: 8080.

apiname

The name of your API.

apiversion

The version of your API.

authbasic

Use HTTP Basic Authentication. The parameter defines the realm.

authuri

Use HTTP POST Authentication with login uri redirect for unauthenticated users.

sublogin

Expects a closure as parameter. The closure gets two parameters supplied during the login process: the username and the password supplied by the client in clear text.

If authentication shall succeed, return 1, otherwise 0.

Default: returns always false.

log

Logging function to use, expects a closure as parameter. One parameter will be given to the closure: the log message. Put it where ever you want.

Default: ignore.

foreground

If set to true, the daemon doesn't fork a child process for new incoming connections, which it does otherwise. If you work with a preforking system as Any::Daemon::HTTP, then set it to true. If you use something like Generic::Daemon, set it to false.

Default: false.

sslcrt AND sslkey

If both are given, files are expected. sslcrt must be a X509 PEM encoded SSL certificate, sslkey must be a PEM encoded SSL unencrypted private key for the certificate.

IO::Socket::SSL-new() parameters>

Any parameter starting with 'SSL' will be fed unaltered to IO::Socket::SSL->new().

lateconfig

Supply any of the above mentioned parameters at some later point, which allows to re-configure certain aspects of the daemon. Some variables cannot be changed once the daemon runs, especially the host and port variables.

Expects the parameters as a hash. Example:

$server->lateconfig(authuri => '/login');

mapuri

The mapuru method is the heart of the module. It expects hash parameters.

Example:

$server->mapuri(path => '/', doauth => 1, handler => sub { return { msg => 'ok' } });

The following parameters are supported:

path

Required: the uri path which shall be mapped to some action.

handler

Required: closure is expected as parameter. The closure gets as its only argument a hash reference supplied which contains data posted by a client (either via POST, PUT or GET query params).

It is expected to return a hash reference with results again.

JSON conversion will be done automatically.

You can access the current HTTP::Request object within the handler by using the variable $req and the HTTP::Response object with $res.

doauth

Optional: turn on authentication for this particular path.

The sublogin closure must be imlemented.

valid

Optional: a hash reference describing the input validation using the notation of Data::Validate::Struct. If defined, data posted by clients will be validated and if found to be invalid, an error will be returned.

run

Finally, start the server.

This method never returns.

AUTHOR

T.v.Dein <tlinden@cpan.org>

BUGS

Report bugs to http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW-REST-Apid

SEE ALSO

apid HTTP::Daemon HTTP::Daemon::SSL Daemon::Generic Config::General Data::Validate::Struct

COPYRIGHT

Copyright (c) 2014-2017 by T.v.Dein <tlinden@cpan.org>. All rights reserved.

LICENSE

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

VERSION

apid Version 0.07.