NAME

App::MREST::Dispatch - Resource handlers

DESCRIPTION

Your application should not call any of the routines in this module directly. They are called by Web::MREST::Resource during the course of request processing. What your application can do is provide its own resource handlers.

The resource handlers are called as ordinary functions with a sole argument: the MREST context.

INITIALIZATION/RESOURCE DEFINITIONS

In this section we provide definitions of all resources handled by this module. These are picked up by Web::MREST::InitRouter.

This resource is the parent of all resources that do not specify a parent in their resource definition. EOH },

# bugreport
'bugreport' => 
{
    parent => '/',
    handler => {
        GET => 'handler_bugreport',
    },
    cli => 'bugreport',
    description => 'Display instructions for reporting bugs in Web::MREST',
    documentation => <<'EOH',
=pod

Returns a JSON structure containing instructions for reporting bugs. EOH },

# configinfo
'configinfo' =>
{
    parent => '/',
    handler => {
        GET => 'handler_configinfo',
    },
    cli => 'configinfo',
    description => 'Display information about Web::MREST configuration',
    documentation => <<'EOH',
=pod

Returns a list of directories that were scanned for configuration files. EOH },

# docu
'docu' => 
{ 
    parent => '/',
    handler => 'handler_noop',
    cli => 'docu',
    description => 'Access on-line documentation (via POST to appropriate subresource)',
    documentation => <<'EOH',
=pod

This resource provides access to on-line documentation through its subresources: 'docu/pod', 'docu/html', and 'docu/text'.

To get documentation on a resource, send a POST reqeuest for one of these subresources, including the resource name in the request entity as a bare JSON string (i.e. in double quotes). EOH },

# docu/pod
'docu/pod' => 
{
    parent => 'docu',
    handler => {
        POST => 'handler_docu', 
    },
    cli => 'docu pod $RESOURCE',
    description => 'Display POD documentation of a resource',
    documentation => <<'EOH',
=pod

This resource provides access to on-line help documentation in POD format. It expects to find a resource name (e.g. "employee/eid/:eid" including the double-quotes, and without leading or trailing slash) in the request body. It returns a string containing the POD source code of the resource documentation. EOH },

# docu/html
'docu/html' => 
{ 
    parent => 'docu',
    handler => {
        POST => 'handler_docu', 
    },
    cli => 'docu html $RESOURCE',
    description => 'Display HTML documentation of a resource',
    documentation => <<'EOH',
=pod

This resource provides access to on-line help documentation. It expects to find a resource name (e.g. "employee/eid/:eid" including the double-quotes, and without leading or trailing slash) in the request body. It generates HTML from the resource documentation's POD source code. EOH },

# docu/text
'docu/text' =>
{ 
    parent => 'docu',
    handler => {
        POST => 'handler_docu', 
    },
    cli => 'docu text $RESOURCE',
    description => 'Display resource documentation in plain text',
    documentation => <<'EOH',
=pod

This resource provides access to on-line help documentation. It expects to find a resource name (e.g. "employee/eid/:eid" including the double-quotes, and without leading or trailing slash) in the request body. It returns a plain text rendering of the POD source of the resource documentation. EOH },

# echo
'echo' => 
{
    parent => '/',
    handler => {
        POST => 'handler_echo', 
    },
    cli => 'echo [$JSON]',
    description => 'Echo the request body',
    documentation => <<'EOH',
=pod

This resource simply takes whatever content body was sent and echoes it back in the response body. EOH },

# noop
'noop' =>
{ 
    parent => '/',
    handler => 'handler_noop', 
    cli => 'noop',
    description => 'A resource that does nothing',
    documentation => <<'EOH',
=pod

Regardless of anything, this resource does nothing at all. EOH },

# param/:type/:param
'param/:type/:param' => 
{
    parent => '/',
    handler => {
        'GET' => 'handler_param',
        'PUT' => 'handler_param',
        'DELETE' => 'handler_param',
    },
    cli => {
        'GET' => 'param $TYPE $PARAM',
        'PUT' => 'param $TYPE $PARAM $VALUE',
        'DELETE' => 'param $TYPE $PARAM', 
    },
    description => {
        'GET' => 'Display value of a meta/core/site parameter',
        'PUT' => 'Set value of a parameter (meta only)',
        'DELETE' => 'Delete a parameter (meta only)',
    },
    documentation => <<'EOH',
=pod

This resource can be used to look up (GET) meta, core, and site parameters, as well as to set (PUT) and delete (DELETE) meta parameters. EOH validations => { 'type' => qr/^(meta)|(core)|(site)$/, 'param' => qr/^[[:alnum:]_][[:alnum:]_-]+$/, }, },

    # test/?:specs
    'test/?:specs' =>
    {
        parent => '/',
        handler => 'handler_test',
        cli => 'test [$SPECS]',
        description => "Resources for testing resource handling semantics",
    },

    # version
    'version' =>
    { 
        parent => '/',
        handler => {
            GET => 'handler_version', 
        },
        cli => 'version',
        description => 'Display application name and version',
        documentation => <<'EOH',
=pod

Shows the software version running on the present instance. The version displayed is taken from the $VERSION package variable of the package specified in the MREST_APPLICATION_MODULE site parameter. EOH },

};

FUNCTIONS

init_router

Initialize (populate) the router. Called from Resource.pm when the first request comes waltzing in.

_first_pass_always_exists

Boilerplate code for use in handlers of resources that always exist

handler_bugreport

Handler for the bugreport resource.

handler_configinfo

Handler for the configinfo resource.

handler_docu

The definition of resource $docu_resource lacks a 'documentation' property EOH # if they want POD, give them POD; if they want HTML, give them HTML, etc. if ( $resource_name eq 'docu/pod' ) { $pl->{'format'} = 'POD'; $pl->{'documentation'} = $docs; } elsif ( $resource_name eq 'docu/html' ) { $pl->{'format'} = 'HTML'; $pl->{'documentation'} = pod_to_html( $docs ); } else { # fall back to plain text $pl->{'format'} = 'text'; $pl->{'documentation'} = pod_to_text( $docs ); } return $CELL->status_ok( 'MREST_DISPATCH_ONLINE_DOCUMENTATION', payload => $pl ); }

handler_echo

Echo request body back in the response

handler_param

Handler for 'param/:type/:param' resource.

handler_noop

Generalized handler for resources that don't do anything.

handler_test

The only purpose of this resource is testing/demonstration of request handling.

handler_version

Handler for the version resource.