NAME Web::Machine - A Perl port of Webmachine VERSION version 0.16 SYNOPSIS use strict; use warnings; use Web::Machine; { package HelloWorld::Resource; use strict; use warnings; use parent 'Web::Machine::Resource'; sub content_types_provided { [{ 'text/html' => 'to_html' }] } sub to_html { q{ Hello World Resource

Hello World

} } } Web::Machine->new( resource => 'HelloWorld::Resource' )->to_app; DESCRIPTION Web::Machine provides a RESTful web framework modeled as a state machine. You define one or more resource classes. Each resource represents a single RESTful URI end point, such as a user, an email, etc. The resource class can also be the target for POST requests to create a new user, email, etc. Each resource is a state machine, and each request for a resource is handled by running the request through that state machine. Web::Machine is built on top of Plack, but it handles the full request and response cycle. See Web::Machine::Manual for more details on using Web::Machine in general, and how Web::Machine and Plack interact. This is a port of Webmachine , actually it is much closer to the Ruby version , with a little bit of the JavaScript version and even some of the Python version thrown in for good measure. You can learn a bit about Web::Machine's history from the slides for my 2012 YAPC::NA talk . To learn more about Webmachine, take a look at the links in the SEE ALSO section. METHODS NOTE: This module is a Plack::Component subclass and so follows the interface set forward by that module. new( resource => $resource_classname, ?resource_args => $arg_list, ?tracing => 1|0, ?streaming => 1|0, ?request_class => $request_class ) The constructor expects to get a $resource_classname, which it will use to load and create an instance of the resource class. If that class requires any additional arguments, they can be specified with the resource_args parameter. The contents of the resource_args parameter will be made available to the init() method of Web::Machine::Resource. The new method can also take an optional tracing parameter which it will pass on to Web::Machine::FSM and an optional streaming parameter, which if true will run the request in a PSGI streaming response. This can be useful if you need to run your content generation asynchronously. The optional request_class parameter accepts the name of a module that will be used as the request object. The module must be a class that inherits from Plack::Request. Use this if you have a subclass of Plack::Request that you would like to use in your Web::Machine::Resource. inflate_request( $env ) This takes a raw PSGI $env and inflates it into a Plack::Request instance. By default this also uses HTTP::Headers::ActionPack to inflate the headers of the request to be complex objects. create_fsm This will create the Web::Machine::FSM object to run. It will get passed the value of the tracing constructor parameter. create_resource( $request ) This will create the Web::Machine::Resource instance using the class specified in the resource constructor parameter. It will pass in the $request object and call new_response on the $request object to get a Plack::Response instance. finalize_response( $response ) Given a $response which is a Plack::Response object, this will finalize it and return a raw PSGI response. call( $env ) This is the call method overridden from the Plack::Component superclass. DEBUGGING If you set the WM_DEBUG environment variable to 1 we will print out information about the path taken through the state machine to STDERR. If you set WM_DEBUG to diag then debugging information will be printed using Test::More's diag() sub instead. SEE ALSO The diagram - Original Erlang - Ruby port - Node JS port - Python port - 2012 YAPC::NA slides - an elaborate machine is indispensable: a blog post by Justin Sheehy - Resources, For Real This Time (with Webmachine): a video by Sean Cribbs - AUTHORS * Stevan Little * Dave Rolsky CONTRIBUTORS * Andreas Marienborg * Andrew Nelson * Arthur Axel 'fREW' Schmidt * Carlos Fernando Avila Gratz * Fayland Lam * George Hartzell * Gregory Oschwald * Jesse Luehrs * John SJ Anderson * Mike Raynham * Mike Raynham * Nathan Cutler * Olaf Alders * Thomas Sibley COPYRIGHT AND LICENSE This software is copyright (c) 2015 by Infinity Interactive, Inc.. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.