Provided by: liblemonldap-ng-common-perl_2.0.5+ds-2_all bug


       Lemonldap::NG::Common::PSGI::Router - Base library for REST APIs of Lemonldap::NG.


         package My::PSGI;

         use base Lemonldap::NG::Common::PSGI::Router;

         sub init {
           my ($self,$args) = @_;
           # Will be called 1 time during startup

           # Declare REST routes (could be HTML templates or methods)
           $self->addRoute ( 'index.html', undef, ['GET'] )
                ->addRoute ( books => { ':book' => 'booksMethod' }, ['GET', 'POST'] )
                ->addRoute ( properties => { '*' => 'propertiesMethod' }, ['GET', 'POST', 'PUT', 'DELETE']);

           # Default route (ie: PATH_INFO == '/')

           # See Lemonldap::NG::Common::PSGI for other options

           # Return a boolean. If false, then error message has to be stored in
           # $self->error
           return 1;

         sub booksMethod {
           my ( $self, $req, @otherPathInfo ) = @_;
           my $book = $req->params('book');
           my $method = $req->method;

         sub propertiesMethod {
           my ( $self, $property, @otherPathInfo ) = @_;
           my $method = $req->method;

       This package could then be called as a CGI, using FastCGI,...

         #!/usr/bin/env perl

         use My::PSGI;
         use Plack::Handler::FCGI; # or Plack::Handler::CGI

         Plack::Handler::FCGI->new->run( My::PSGI->run() );


       This package provides base class for Lemonldap::NG REST API but could be used regardless.


       See Lemonldap::NG::Common::PSGI for logging methods, content sending,...

   Initialization methods
       addRoute ( $word, $dest, $methods )

       Declare a REST route. Arguments:

           the first word of /path/info.

           string, sub ref or hash ref (see "Route types" below)

           array ref containing the methods concerned by this route.

       Route types

       As seen in "SYNOPSIS", you can declare routes with variable component. $dest can be:

       a word:
           the name of the method to call

           $word is used as $dest

       a ref to code:
           an anonymous subroutin to call

       a hash ref:
           it's a recursive call to `{ $word => $dest }`

       an array ref:
           in this case each element of the array will be considered as `{ $element => $element
           }`. So each element must be a word that makes a correspondence between a path_info
           word and a subroutine

       Some special $word:

           the word in path_info will be stored in GET parameters

           the subroutine will be called with the word of path_info as second argument (after

           if $word finishes with '.html', then sendHtml() will be called with 'something.tpl' as
           template name. In this case, $dest is not used.


       to manage http://.../books/127 with book() where 127 is the book number, use:
             $self->addRoute( books => { ':bookId' => 'book' }, ['GET'] );

           bookId parameter will be stored in $req->params('bookId');

       to manage http://.../books/127/pages/5 with page(), use:
             $self->addRoute( books => { ':bookId' => { pages => { ':pageId' => 'page' } } }, ['GET'] );

       to manage simultaneously the 2 previous examples
             $self->addRoute( books => { ':bookId' => { pages => { ':pageId' => 'page' } } }, ['GET'] )
                  ->addRoute( books => { ':bookId' => { '*' => 'book' } }, ['GET'] );

           Note that book() will be called for any path_info containing /books/<$bookid>/<$other>
           except if $other == 'pages'.

       to manage /properties/p1, /properties/p2 with p1() and p2(), use:
             $self->addRoute( properties => [ 'p1', 'p2' ] );


       This method defined which path_info to use if path_info is '/' or empty.

       See Lemonldap::NG::Common::PSGI for inherited accessors (error, languages, logLevel,
       staticPrefix, templateDir, links, syslog).


       <>, Lemonldap::NG::Portal, Lemonldap::NG::Handler, Plack, PSGI,
       Lemonldap::NG::Common::PSGI, Lemonldap::NG::Common::PSGI::Request, HTML::Template,


       LemonLDAP::NG team <>


       Use OW2 system to report bug or ask for features:


       Lemonldap::NG is available at


       See COPYING file for details.

       This library is free software; you can redistribute it and/or modify it under the terms of
       the GNU General Public License as published by the Free Software Foundation; either
       version 2, or (at your option) any later version.

       This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
       without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       See the GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with this program.
       If not, see <>.