O documento descreve a evolução dos frameworks web em Perl e a introdução do Plack e PSGI. Resume-se o documento da seguinte forma:
- PSGI foi introduzido como uma interface comum para aplicações web em Perl, inspirada pelo WSGI do Python e Rack do Ruby. Isto permitiu a criação de middleware e servidores compartilhados.
- O Plack implementa o PSGI e fornece middleware, handlers de servidores e ferramentas como o plackup. Muitos frameworks web em Perl como Catalyst, Dancer e Mojolicious adotaram o
31. Posto de outra forma
Vamos importar ideias
estruturantes que provaram ser
populares noutros contextos
dinâmicos, criando sinergias que
nos permitem agilizar a nossa
entrada no mercado global com
uma proposta de valor vencedora
45. Atenção!
o próximo programa inclui
cenas de Perl explicito, só
recomendadas a programadores
de Frameworks Perl, ou pessoas
à procura de novas experiências
59. my $app = sub {
my $env = shift;
return sub {
my $respond = shift;
# Aqui podem delegar num event-loop estilo
# POE ou AnyEvent para implementar cenas
# tipo Comet
$respond->([ $status, $header, $body ]);
};
};
60. my $app = sub {
my $env = shift;
return sub {
my $respond = shift;
my $w = $respond->([ $status, $header ]);
$w->write($body);
$w->write($body);
...
$w->close;
};
};
61. Interface de Streaming
Inicialmente desenhado para servidores “non-blocking”
Já disponível para a maioria dos servidores incluindo
CGI e Apache
69. # Dancer
use Dancer;
get ‘/’ => sub {
“Hello World”;
};
use Dancer::Config ‘setting’;
setting apphandler => ‘PSGI’;
my $app = sub {
my $r = Dancer::Request->new(shift);
Dancer->dance($r);
};
# $app é uma aplicação PSGI!
81. my $app = sub {
my $env = shift;
return [ $status, $header, $body ];
};
my $mw = sub {
my $env = shift;
# do something with $env
my $res = $app->($env);
# do something with $res;
return $res;
};
87. use CatApp;
use CGIApp;
my $c1 = sub { CatApp->run };
my $c2 = sub { CGIApp->run_psgi };
use Plack::Builder;
builder {
mount “/cat” => $c1;
mount “/cgi-app” => builder {
enable “StackTrace”;
$c2;
};
}
92. use Plack::Test;
use HTTP::Request::Common;
my $app = sub {
my $env = shift;
return [ $status, $header, $body ];
};
test_psgi app => $app, client => sub {
my $cb = shift;
my $req = GET “http://localhost/foo”;
my $res = $cb->($req);
# test $res;
};
93. use Plack::Test;
use HTTP::Request::Common;
$Plack::Test::Impl = “Server”;
my $app = sub {
my $env = shift;
return [ $status, $header, $body ];
};
test_psgi app => $app, client => sub {
my $cb = shift;
my $req = GET “http://localhost/foo”;
my $res = $cb->($req);
# test $res;
};
113. Resumo
• PSGI é o interface, Plack é uma
implementação
• Temos vários servidores PSGI, muito bons
e bem rápidos
• Temos adaptadores e ferramentas para a
maioria das frameworks Web
• Pronto a usar!
114. Processo
• Partilhar é importante
• Utilizar as ideias das outras comunidades é
um bom inicio
• Integrar algo com utilidade comprovada é
excelente