NAME
WWW::MLite - Lite Web Application Framework
VERSION
Version 2.01
SYNOPSIS
package
MyApp;
use
Data::Dumper;
__PACKAGE__->register_method(
# GET /myapp
name
=>
"getIndex"
,
description
=>
"Index page"
,
method
=>
"GET"
,
path
=>
"/myapp"
,
deep
=> 0,
attrs
=> {
foo
=>
'blah-blah-blah'
,
bar
=>
'on'
,
deserialize
=> 0,
serialize
=> 1,
},
requires
=>
undef
,
returns
=>
undef
,
code
=>
sub
{
my
$self
=
shift
;
my
@params
=
@_
;
$self
->data(Dumper({
params
=> [
@params
],
name
=>
$self
->name,
description
=>
$self
->info(
"description"
),
attrs
=>
$self
->info(
"attrs"
),
path
=>
$self
->info(
"path"
),
method
=>
$self
->info(
"method"
),
requires
=>
$self
->info(
"requires"
),
returns
=>
$self
->info(
"returns"
),
}));
return
HTTP_OK;
# HTTP RC
});
1;
package
main;
use
CGI;
use
File::Spec;
my
$q
= new CGI;
my
$server
= MyApp->new(
project
=>
"MyApp"
,
ident
=>
"myapp"
,
root
=> File::Spec->catdir(
$Bin
,
"conf"
),
#confopts => {... Config::General options ...},
configfile
=> File::Spec->catfile(
$Bin
,
"conf"
,
"myapp.conf"
),
log
=>
"on"
,
logfd
=>
fileno
(STDERR),
#logfile => '/path/to/log/file.log',
nph
=> 0,
# NPH (no-parsed-header)
);
$server
->call(
$q
->request_method,
$q
->request_uri,
$q
) or
die
(
$server
->error);
DESCRIPTION
Lite Web Application Framework
This module allows you to quickly and easily write a REST servers
new
my
$server
= MyApp->new(
project
=>
"MyApp"
,
ident
=>
"myapp"
,
root
=> File::Spec->catdir(
$Bin
,
"conf"
),
#confopts => {... Config::General options ...},
configfile
=> File::Spec->catfile(
$Bin
,
"conf"
,
"myapp.conf"
),
log
=>
"on"
,
logfd
=>
fileno
(STDERR),
#logfile => '/path/to/log/file.log',
nph
=> 0,
# NPH (no-parsed-header)
);
Returns CTK object as WWW::MLite server
- confopts
-
Optional value. Config::General options
- configfile
-
File of configuration
Default: /etc/myapp/myapp.conf
- log
-
General switch for logging enable/disable
Default: off
Also see configuration for logging manage
- logfd
-
File descriptor or fileno
Default: none (use syslog)
See IO::Handle
- logfile
-
Log file path. Not recommended!
- nph
-
Enable or disable NPH mode (no-parsed-header)
Default: 0
See "USING-NPH-SCRIPTS" in CGI
This option for the response subroutine only!
- root
-
Root directory for project. This is NOT document root directory!
Default: /etc/myapp
METHODS
List of available methods
call
See "call_method"
call_method
$server
->call_method(
$ENV
{REQUEST_URI},
$ENV
{REQUEST_METHOD}, ... );
Runs the callback function from current method with additional parameters
Note: any number of parameters can be specified, all of them will be receive in the callback function and in your overridden the response subroutine
Returns: response content
check_http_method
$server
->check_http_method(
"GET"
);
# returns 1
$server
->check_http_method(
"OPTIONS"
);
# returns 0
Checks the availability of the HTTP method by its name and returns the status
code
my
$code
=
$server
->code;
my
$code
=
$server
->code( 500 );
Gets/Sets response HTTP code
Default: 200 (HTTP_OK)
See HTTP::Status
cleanup
$server
->cleanup;
Cleans the all working data and resets it to default values
data
my
$data
=
$server
->data;
$server
->data({
param1
=>
"new value"
,
});
Gets/Sets working data structure or HTTP content
Default: undef
See HTTP::Response
head
my
$head
=
$server
->head;
$server
->head({
"Content-Type"
=>
"text/plain"
,
});
Gets/Sets HTTP headers
Default: "text/plain"
See HTTP::Headers
info
my
$info
=
$server
->info;
my
$description
=>
$server
->info(
"description"
);
my
$attrs
=
$server
->info(
"attrs"
);
my
$path
=
$server
->info(
"path"
);
my
$method
=
$server
>info(
"method"
);
my
$requires
=
$server
->info(
"requires"
);
my
$returns
=
$server
->info(
"returns"
);
Returns the info structure or info-data of current method
lookup_method
my
$method
=
$server
->lookup_method(
$ENV
{REQUEST_URI},
$ENV
{REQUEST_METHOD});
Returns $method structure from hash of registered methods; or undef if method is not registered
message
my
$message
=
$server
->message;
my
$message
=
$server
->message(
"Internal Server Error"
);
Gets/Sets response HTTP message
Default: "OK"
See HTTP::Status
name
my
$name
=
$server
->name;
Returns name of current method. Default: default
register_method
use
Data::Dumper;
__PACKAGE__->register_method(
# GET /myapp
name
=>
"getIndex"
,
description
=>
"Index page"
,
method
=>
"GET"
,
path
=>
"/myapp"
,
deep
=> 0,
attrs
=> {
foo
=>
'blah-blah-blah'
,
bar
=>
'on'
,
deserialize
=> 0,
serialize
=> 1,
},
requires
=> [
qw/ user1 user2 userX /
],
returns
=> {
type
=>
'any'
,
},
code
=>
sub
{
my
$self
=
shift
;
my
@params
=
@_
;
# ... your method's code here ...
return
HTTP_OK;
# HTTP RC
});
Registers new method and returns operation status
NOTE! This is non class method!
- attrs
-
Sets attributes of the method as hashref
Default: {}
In the method's code or response method, you can get the attribute values using the $self->info("attrs") method
- code
-
Sets callback function
Default: sub { return HTTP::Status::HTTP_OK }
This callback function MUST return HTTP status code
See HTTP::Status
- deep, depth
-
Enables deeply scanning of path for method lookup. If this param is set to true then the mechanism of the deeply lookuping will be enabled. For example:
For registered path /foo with enabled deep lookuping will be matched any another incoming path that begins from /foo prefix: /foo, /foo/bar, /foo/bar/baz and etc.
Default: 0
- description
-
Sets the description of method
Default: none
- name
-
Sets the name of method
Default: default
- method
-
Sets the HTTP method for trapping. Supported: GET, POST, PUT, DELETE.
Default: GET
- path
-
Sets the URL's path for trapping
Default: /
- requires
-
Array-ref structure that contains list of groups/users or any data for authorization
Default: []
- returns
-
Hash-ref structure that contains schema
Default: {}
middleware
The middleware method. Runs before every Your registered methods.
You can override this method in Your class.
This method MUST returns HTTP status code. If code is a Successful status code (2xx) then Your registered method will called
For examle:
sub
response {
my
$self
=
shift
;
my
@params
=
@_
;
# . . .
return
HTTP::Status::HTTP_OK
}
response
The method for response prepare.
You can override this method in Your class.
But note! This method MUST returns serialized or plain content for output
For examle:
sub
response {
my
$self
=
shift
;
my
@params
=
@_
;
my
$rc
=
$self
->code;
# RC HTTP code (from yuor methods)
my
$head
=
$self
->head;
# HTTP Headers (hashref)
my
$data
=
$self
->data;
# The working data
my
$msg
=
$self
->message || HTTP::Status::status_message(
$rc
) ||
"Unknown code"
;
# . . .
my
@res
= (
sprintf
(
"Status: %s %s"
,
$rc
,
$msg
));
push
@res
,
sprintf
(
"Content-Type: %s"
,
"text/plain; charset=utf-8"
);
push
@res
,
""
,
$data
//
""
;
return
join
(
"\015\012"
,
@res
);
}
again
Internal use only!
EXAMPLES
See all examples on METACPAN website https://metacpan.org/release/WWW-MLite
HISTORY
See Changes
file
TO DO
See TODO
file
BUGS
* none noted
Please report any bugs to https://rt.cpan.org/.
SEE ALSO
AUTHOR
Serż Minus (Sergey Lepenkov) http://www.serzik.com <abalama@cpan.org>
COPYRIGHT
Copyright (C) 1998-2019 D&D Corporation. All Rights Reserved
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See LICENSE
file and https://dev.perl.org/licenses/