GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Web::Machine(3) User Contributed Perl Documentation Web::Machine(3)

Web::Machine - A Perl port of Webmachine

version 0.17

  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{<html>
              <head>
                  <title>Hello World Resource</title>
              </head>
              <body>
                  <h1>Hello World</h1>
              </body>
           </html>}
      }
  }

  Web::Machine->new( resource => 'HelloWorld::Resource' )->to_app;

"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 <https://github.com/basho/webmachine>, actually it is much closer to the Ruby version <https://github.com/seancribbs/webmachine-ruby>, with a little bit of the JavaScript version <https://github.com/tautologistics/nodemachine> and even some of the Python version <https://github.com/benoitc/pywebmachine> thrown in for good measure.

You can learn a bit about Web::Machine's history from the slides for my 2012 YAPC::NA talk <https://speakerdeck.com/stevan_little/rest-from-the-trenches>.

To learn more about Webmachine, take a look at the links in the SEE ALSO section.

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 <http://plackperl.org/> 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.

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.

The diagram - <https://github.com/Webmachine/webmachine/wiki/Diagram>
Original Erlang - <https://github.com/basho/webmachine>
Ruby port - <https://github.com/seancribbs/webmachine-ruby>
Node JS port - <https://github.com/tautologistics/nodemachine>
Python port - <https://github.com/benoitc/pywebmachine>
2012 YAPC::NA slides - <https://speakerdeck.com/stevan_little/rest-from-the-trenches>
an elaborate machine is indispensable: a blog post by Justin Sheehy - <http://blog.therestfulway.com/2008/09/webmachine-is-resource-server-for-web.html>
Resources, For Real This Time (with Webmachine): a video by Sean Cribbs - <http://www.youtube.com/watch?v=odRrLK87s_Y>

bugs may be submitted through <https://github.com/houseabsolute/webmachine-perl/issues>.

  • Stevan Little <stevan@cpan.org>
  • Dave Rolsky <autarch@urth.org>

  • Andreas Marienborg <andreas.marienborg@gmail.com>
  • Andrew Nelson <anelson@cpan.org>
  • Arthur Axel 'fREW' Schmidt <frioux@gmail.com>
  • Carlos Fernando Avila Gratz <cafe@q1software.com>
  • Fayland Lam <fayland@gmail.com>
  • George Hartzell <hartzell@alerce.com>
  • Gregory Oschwald <goschwald@maxmind.com>
  • Jesse Luehrs <doy@tozt.net>
  • John SJ Anderson <genehack@genehack.org>
  • Mike Raynham <enquiries@mikeraynham.co.uk>
  • Nathan Cutler <ncutler@suse.cz>
  • Olaf Alders <olaf@wundersolutions.com>
  • Stevan Little <stevan.little@gmail.com>
  • Thomas Sibley <tsibley@cpan.org>

This software is copyright (c) 2016 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.

2016-06-23 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.