| HTTP-Engine documentation | Contained in the HTTP-Engine distribution. |
HTTP::Engine::Role::Interface - The Interface Role Definition
package HTTP::Engine::Interface::CGI; use Any::Moose; with 'HTTP::Engine::Role::Interface';
HTTP::Engine::Role::Interface defines the role of an interface in HTTP::Engine.
Specifically, an Interface in HTTP::Engine needs to do at least two things:
If you are on a CGI environment, you need to receive all the data from %ENV and such. If you are running on a mod_perl process, you need to muck with $r.
In any case, you need to construct a valid HTTP::Engine::Request object so the application handler can do the real work.
The application handler must return an HTTP::Engine::Response object.
In turn, the interface needs to do whatever necessary to present this object to the client. In a CGI environment, you would write to STDOUT. In mod_perl, you need to call the appropriate $r->headers methods and/or $r->print
Kazuhiro Osawa and HTTP::Engine Authors
| HTTP-Engine documentation | Contained in the HTTP-Engine distribution. |
package HTTP::Engine::Role::Interface; use Any::Moose '::Role'; use HTTP::Engine::Types::Core qw(Handler); use HTTP::Engine::ResponseFinalizer; requires 'run'; has request_handler => ( is => 'rw', isa => Handler, coerce => 1, required => 1, ); # for PSGI streaming response # using HTTP::Engine::ResponseFinalizer sub can_has_streaming { 0 } sub handle_request { my ($self, %args) = @_; my $req = HTTP::Engine::Request->new( request_builder => $self->request_builder, %args, ); my $res; eval { $res = $self->request_handler->($req); unless ( Scalar::Util::blessed($res) && $res->isa('HTTP::Engine::Response') ) { die "You should return instance of HTTP::Engine::Response."; } }; if ( my $e = $@ ) { print STDERR $e; $res = HTTP::Engine::Response->new( status => 500, body => 'internal server error', ); } HTTP::Engine::ResponseFinalizer->finalize( $req => $res => $self ); return $self->response_writer->finalize( $req => $res ); } 1; __END__