Web::Dispatch::HTTPMethods - Helpers to make RESTFul Dispatchers Easier
package MyApp:WithHTTPMethods; use Web::Simple; use Web::Dispatch::HTTPMethods; sub as_text { [200, ['Content-Type' => 'text/plain'], [$_[0]->{REQUEST_METHOD}, $_[0]->{REQUEST_URI}] ] } sub dispatch_request { sub (/get) { GET { as_text(pop) } }, sub (/get-head) { GET { as_text(pop) } HEAD { [204,[],[]] }, }, sub (/get-post-put) { GET { as_text(pop) } ## NOTE: no commas separating http methods POST { as_text(pop) } PUT { as_text(pop) } }, }
Exports the most commonly used HTTP methods as subroutine helps into your Web::Simple based application. Additionally adds an automatic HTTP code 405 Method Not Allow if none of the HTTP methods match for a given dispatch and also adds a dispatch rule for HEAD if no HEAD exists but a GET does (in which case the HEAD returns the GET dispatch with an empty body.)
Method Not Allow
HEAD
GET
We also add at the end of the chain support for the OPTIONS method (if you do not add one yourself. This defaults to http 200 ok + Allows http headers.
Also we try to set correct HTTP headers such as Allows as makes sense based on your dispatch chain.
Allows
The following dispatch chains are basically the same:
sub dispatch_request { sub (/get-http-methods) { GET { [200, ['Content-Type' => 'text/plain'], ['Hello World']] } }, sub(/get-classic) { sub (GET) { [200, ['Content-Type' => 'text/plain'], ['Hello World']] }, sub (HEAD) { [200, ['Content-Type' => 'text/plain'], []] }, sub (OPTIONS) { [200, ['Content-Type' => 'text/plain', Allows=>'GET,HEAD,OPTIONS'], []]; }, sub () { [405, ['Content-Type' => 'text/plain', Allows=>'GET,HEAD,OPTIONS'], ['Method Not Allowed']] }, } }
The idea here is less boilerplate to distract the reader from the main point of the code and also to encapsulate some best practices.
NOTE You currently cannot mix http method style and prototype sub style in the same scope, as in the following example:
sub dispatch_request { sub (/get-head) { GET { ... } sub (HEAD) { ... } }, }
If you try this our code will notice and issue a die. If you have a good use case please bring it to the authors.
die
This automatically exports the following subroutines:
GET PUT POST HEAD DELETE OPTIONS
See Web::Simple for AUTHOR
See Web::Simple for CONTRIBUTORS
See Web::Simple for COPYRIGHT
See Web::Simple for LICENSE
To install Web::Simple, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Web::Simple
CPAN shell
perl -MCPAN -e shell install Web::Simple
For more information on module installation, please visit the detailed CPAN module installation guide.