Chouette
view release on metacpan or search on metacpan
AnyEvent is used as the glue to connect all the asynchronous libraries,
although Chouette depends on Feersum and therefore EV for its event
loop. It uses Feersum in PSGI mode so it can use Plack for request
parsing, and has support for Plack::Middleware wrappers. Feersum is the
least conservative choice in the stack but there aren't very many
alternatives (Twiggy is a possibility but it is somewhat buggy and you
need a hack to use unix sockets).
Chouette generally assumes that its input will be
"application/x-www-form-urlencoded". Plack::Request::WithEncoding is
used so that text is properly decoded (we recommend UTF-8 of course).
For output, the default is "application/json" encoded with JSON::XS.
Both the input and output types can be modified, although this is only
partially documented so far.
Chouette apps can optionally load a config file and its format is
"YAML", loaded with the YAML module. Regexp::Assemble is used for
efficient route-dispatch.
The above aside, Chouette's main purpose is to glue together several of
my own modules into a cohesive whole. These modules have been designed
lib/Chouette.pm view on Meta::CPAN
=head1 NAME
Chouette - REST API Framework
=head1 DESCRIPTION
L<Chouette> is a framework for making asynchronous HTTP services. It makes some opinionated design choices, but is otherwise fairly flexible.
L<AnyEvent> is used as the glue to connect all the asynchronous libraries, although Chouette depends on L<Feersum> and therefore L<EV> for its event loop. It uses L<Feersum> in PSGI mode so it can use L<Plack> for request parsing, and has support for...
Chouette generally assumes that its input will be C<application/x-www-form-urlencoded>. L<Plack::Request::WithEncoding> is used so that text is properly decoded (we recommend UTF-8 of course). For output, the default is C<application/json> encoded wi...
Chouette apps can optionally load a config file and its format is C<YAML>, loaded with the L<YAML> module. L<Regexp::Assemble> is used for efficient route-dispatch.
The above aside, Chouette's main purpose is to glue together several of my own modules into a cohesive whole. These modules have been designed to work together and I have used them to build numerous services, some of which handle a considerable amoun...
Chouette was extracted from some of these services I have built before, and I have put in the extra effort required so that all the modules work together in the ways they were designed:
=over
=item L<AnyEvent::Task>
( run in 0.329 second using v1.01-cache-2.11-cpan-26ccb49234f )