Provided by: libweb-machine-perl_0.17-3_all bug

NAME

       Web::Machine::Manual - Learn how to use Web::Machine

VERSION

       version 0.17

Web::Machine IN A NUTSHELL

       The basic idea behind "Web::Machine" is that the handling of a web request is implemented
       as a state machine. If you're not familiar with state machines, think of a flowchart. We
       look at the request and the resource we provide and ask questions about them. Is our
       service available? Is this a GET, POST, PUT, etc.? Does the request ask for a content type
       our resource provides?

       The result of each question leads us to the next state (or flowchart box). Eventually we
       reach a point where we have a response for the client. Since this is all built on top of
       Plack and PSGI <http://plackperl.org/>, the response consists of a status code, some
       headers, and an optional body.

       The best way to understand the full request/response cycle is to look at the original
       Erlang webmachine state diagram <https://github.com/basho/webmachine/wiki/Diagram>. Each
       diamond in that diagram corresponds to a method that your Web::Machine::Resource subclass
       can implement. The return value from your method determines what method to call next.

       However, unlike on that diagram, we often support return values beyond simple true/false
       values for methods. The Web::Machine::Resource documentation describes what each method
       can return.

Web::Machine and Plack

       "Web::Machine" is built on top of Plack and follows the PSGI <http://plackperl.org/> spec.
       You can mix "Web::Machine" applications with other Plack applications using standard Plack
       tools like Plack::Builder.

   Web::Machine and Plack Middleware
       Since "Web::Machine" implements the complete request and response cycle, some Plack
       middleware is not really needed with "Web::Machine". For example, it wouldn't make sense
       to use something like "Plack::Middleware::XSLT" with "Web::Machine". "Web::Machine"
       implements the full content negotiation process, so if you want to handle requests for
       "text/html" it probably makes more sense to do this in your resources. The benefit of
       doing so is that with "Web::Machine" you can easily ensure that you return a proper "406
       Not Acceptable" status for content types you can't handle.

       There are still many pieces of Plack middleware that are useful with "Web::Machine", such
       as logging middleware, debugging/linting middleware, etc.

       That all said, "Web::Machine" won't break if you use an inappropriate middleware; you'll
       just lose some of the benefits you get from implementing things the "Web::Machine" way.

   Bodies Must be Bytes
       The PSGI spec requires that the body you return contain bytes, not Perl characters. In
       other words, strings you return must be passed through "Encode::encode" so that Perl
       interprets their contents as bytes.

       If your data is not binary or ASCII, your resource should make sure to provide
       "charset_provided()" and "default_charset()" methods. This will make sure that
       "Web::Machine" knows how to turn your response bodies into bytes.

       CAVEAT: Note that currently "Web::Machine" does not provide full charset or encoding
       support when the body is returned as a CODE ref. This is a bug to be remedied in the
       future, but currently you are responsible for making sure this code ref returns bytes.

SUPPORT

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

AUTHORS

       •   Stevan Little <stevan@cpan.org>

       •   Dave Rolsky <autarch@urth.org>

COPYRIGHT AND LICENCE

       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.