Chouette
view release on metacpan or search on metacpan
8910111213141516171819202122232425262728AnyEvent is used as the glue to
connect
all the asynchronous libraries,
although Chouette depends on Feersum and therefore EV
for
its event
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
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
455456457458459460461462463464465466467468469470471472473474475=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.561 second using v1.01-cache-2.11-cpan-00829025b61 )