A reviravolta do desenvolvimento web
-
Upload
wallace-reis -
Category
Technology
-
view
385 -
download
0
description
Transcript of A reviravolta do desenvolvimento web
![Page 1: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/1.jpg)
a reviravolta do desenvolvimento web
Wallace Reis
YAPC::BR - São Paulo/2012
![Page 2: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/2.jpg)
eu
@wreis - [email protected]
vitória.pm
yelster digital
123people.com - frontend lead-dev
123pages.fr
reporama.com
![Page 3: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/3.jpg)
eu
@wreis - [email protected]
vitória.pm
yelster digital
123people.com - frontend lead-dev
123pages.fr
reporama.com
![Page 4: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/4.jpg)
eu
@wreis - [email protected]
vitória.pm
yelster digital
123people.com - frontend lead-dev
123pages.fr
reporama.com
![Page 5: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/5.jpg)
![Page 6: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/6.jpg)
![Page 7: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/7.jpg)
![Page 8: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/8.jpg)
![Page 9: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/9.jpg)
![Page 10: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/10.jpg)
caótico!
![Page 11: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/11.jpg)
Catalyst
Maypole
Mason
Mojo
Sledge
Spoon
PageKit
AxKit
Egg
Gantry
Continuity
Solstice
Mojolicious
Tripletail
Konstrukt
Reaction
Jifty
Cyclone3
WebGUI
OpenInteract
Squatting
Dancer
CGI::Application
Nanoa
Ark
Angelos
Noe
Schenker
Tatsumaki
Amon
Apache2::WebApp
Web::Simple
Apache2::REST
SweetPea
Hydrant
Titanium
CGI.pm
...de escrever...
![Page 12: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/12.jpg)
...de executar...
CGI
FastCGI
mod_perl
standalone HTTP
![Page 13: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/13.jpg)
CGI.pmJifty, CGI::Application, Spoon...
![Page 14: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/14.jpg)
mod_perlMason, Sledge, PageKit...
![Page 15: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/15.jpg)
com adaptadoresMaypole, Catalyst, Squatting...
![Page 16: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/16.jpg)
![Page 17: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/17.jpg)
![Page 18: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/18.jpg)
HTTP::Engine
![Page 19: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/19.jpg)
![Page 20: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/20.jpg)
PSGI
Internet
![Page 21: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/21.jpg)
PSGI
Perl Web Server Gateway Interface
Tatsuhiko Miyagawa
WSGI (Python) e Rack (Ruby)
![Page 22: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/22.jpg)
PSGI
Perl Web Server Gateway Interface
Tatsuhiko Miyagawa
WSGI (Python) e Rack (Ruby)
![Page 23: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/23.jpg)
PSGI
Perl Web Server Gateway Interface
Tatsuhiko Miyagawa
WSGI (Python) e Rack (Ruby)
![Page 24: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/24.jpg)
![Page 25: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/25.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 26: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/26.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 27: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/27.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 28: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/28.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 29: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/29.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 30: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/30.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 31: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/31.jpg)
my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};
![Page 32: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/32.jpg)
Streaming e/ounon-blocking?
![Page 33: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/33.jpg)
my $app = sub { my $env = shift; return sub { my $respond = shift; # ... delegar $respond->( [$status, $headers, $body] ); };};
![Page 34: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/34.jpg)
my $app = sub { my $env = shift; return sub { my $respond = shift; my $w = $respond->([$status, $headers]); $w->write($body); ... $w->close; };};
![Page 35: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/35.jpg)
![Page 36: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/36.jpg)
PSGI
...
![Page 37: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/37.jpg)
PSGI
SPDY?
![Page 38: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/38.jpg)
Plack?
![Page 39: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/39.jpg)
Plack?
PSGI toolkit
![Page 40: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/40.jpg)
HTTP::Server::PSGI
![Page 41: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/41.jpg)
Plack::Component
![Page 42: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/42.jpg)
Plack::(Request|Response)
![Page 43: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/43.jpg)
Plack::Middleware
![Page 44: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/44.jpg)
![Page 45: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/45.jpg)
![Page 46: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/46.jpg)
220+ Middleware
![Page 47: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/47.jpg)
my $app = sub { my $env = shift; return [ $status, $headers, $body ];};
my $mw = sub { ... };
![Page 48: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/48.jpg)
my $mw = sub { my $env = shift; # ...faz algo com (ou no) $env my $res = $app->($env); # faz algo com a (ou na) $res return $res;};
![Page 49: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/49.jpg)
package My::Middleware;
use strict;use warnings;use Plack::Request;use parent ‘Plack::Middleware’;
sub call { my ( $self, $env ) = @_; # ...faz algo com (ou no) $env # my $req = Plack::Request->new($env); my $res = $app->($env); # faz algo com a (ou na, ou nova) $res # my $res = $req->new_response; return $res;}
1;
![Page 50: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/50.jpg)
Plack::Util::response_cb
![Page 51: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/51.jpg)
$ plackup app.psgiHTTP::Server::PSGI: Accepting connections
at http://0:5000/
![Page 52: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/52.jpg)
$ plackup -s $SERVER app.psgi
![Page 53: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/53.jpg)
$ plackup -s FCGI app.psgi
![Page 54: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/54.jpg)
$ plackup -s Starman app.psgi
![Page 55: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/55.jpg)
use Plack::Builder;
my $app = MyApp->psgi_app; # ->to_psgi; ->to_app; ->as_psgi; etc
builder { enable ‘Static’, ...;
enable_if { $_[0]->{'PATH_INFO'} =~ m{^/admin} } 'Auth::Htpasswd', ...;
$app;};
![Page 56: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/56.jpg)
Plack::App
![Page 57: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/57.jpg)
Plack::App::File
![Page 58: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/58.jpg)
Plack::App::Directory
![Page 59: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/59.jpg)
Plack::App::Proxy
![Page 60: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/60.jpg)
Plack::App::FCGIDispatcher
![Page 61: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/61.jpg)
Plack::App::URLMap
![Page 62: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/62.jpg)
use Plack::Builder;
my $app = MyApp->psgi_app; # ->to_psgi; ->to_app; ->as_psgi; etc
builder { enable ‘Static’, ...;
enable_if { $_[0]->{'PATH_INFO'} =~ m{^/admin} } 'Auth::Htpasswd', ...;
mount ‘/foo’ => $foo_app;
mount ‘http://www.example.com/’ => builder { enable ‘AccessLog’, ...; $bar_app; };
mount ‘/’ => $app;};
![Page 63: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/63.jpg)
Plack::App::CGIBinPlack::App::WrapCGI
![Page 64: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/64.jpg)
Plack::App::FakeApache
![Page 65: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/65.jpg)
Plack::TestTest::WWW::Mechanize::PSGI
![Page 66: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/66.jpg)
![Page 67: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/67.jpg)
25+ Frameworks e Toolkits
35+ Webservers e Handlers
![Page 68: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/68.jpg)
25+ Frameworks e Toolkits
35+ Webservers e Handlers
![Page 69: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/69.jpg)
![Page 70: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/70.jpg)
![Page 71: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/71.jpg)
CGI
Plack::Handler::CGI
![Page 72: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/72.jpg)
mod_perl
Plack::Handler::Apache(1|2)
![Page 73: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/73.jpg)
FastCGI
Plack::Handler::FCGI
::FCGI::EV
::FCGI::Async
::AnyEvent::FCGI
fastpass
![Page 74: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/74.jpg)
FastCGI
Plack::Handler::FCGI
::FCGI::EV
::FCGI::Async
::AnyEvent::FCGI
fastpass
![Page 75: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/75.jpg)
FastCGI
Plack::Handler::FCGI
::FCGI::EV
::FCGI::Async
::AnyEvent::FCGI
fastpass
![Page 76: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/76.jpg)
Servidores HTTP autônomos
HTTP::Server::PSGI
HTTP::Server::Simple::PSGI
Starman
Starlet
![Page 77: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/77.jpg)
Servidores HTTP autônomos
HTTP::Server::PSGI
HTTP::Server::Simple::PSGI
Starman
Starlet
![Page 78: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/78.jpg)
Servidores HTTP autônomos
HTTP::Server::PSGI
HTTP::Server::Simple::PSGI
Starman
Starlet
![Page 79: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/79.jpg)
Servidores HTTP autônomos
HTTP::Server::PSGI
HTTP::Server::Simple::PSGI
Starman
Starlet
![Page 80: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/80.jpg)
Servidores HTTP autônomos (async)
Feersum
Twiggy
![Page 81: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/81.jpg)
Perlbal::Plugin::PSGI
mod_psgi
nginx_mod_psgi
Mongrel2
![Page 82: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/82.jpg)
![Page 83: A reviravolta do desenvolvimento web](https://reader035.fdocument.pub/reader035/viewer/2022062312/554cb457b4c905335b8b4e07/html5/thumbnails/83.jpg)
Obrigado! Perguntas?Wallace Reis @wreis
YAPC::BR::2012
https://metacpan.org/module/PSGIhttp://plackperl.org/
http://blog.plackperl.org/IRC#plack