a reviravolta do desenvolvimento web

83
a reviravolta do desenvolvimento web Wallace Reis YAPC::BR - São Paulo/2012

Upload: wallace-reis

Post on 08-May-2015

387 views

Category:

Technology


0 download

DESCRIPTION

YAPC::BR::2012 em São Paulo

TRANSCRIPT

Page 1: A reviravolta do desenvolvimento web

a reviravolta do desenvolvimento web

Wallace Reis

YAPC::BR - São Paulo/2012

Page 2: A reviravolta do desenvolvimento web

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

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

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
Page 6: A reviravolta do desenvolvimento web
Page 7: A reviravolta do desenvolvimento web
Page 8: A reviravolta do desenvolvimento web
Page 9: A reviravolta do desenvolvimento web
Page 10: A reviravolta do desenvolvimento web

caótico!

Page 11: A reviravolta do desenvolvimento web

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

...de executar...

CGI

FastCGI

mod_perl

standalone HTTP

Page 13: A reviravolta do desenvolvimento web

CGI.pmJifty, CGI::Application, Spoon...

Page 14: A reviravolta do desenvolvimento web

mod_perlMason, Sledge, PageKit...

Page 15: A reviravolta do desenvolvimento web

com adaptadoresMaypole, Catalyst, Squatting...

Page 16: A reviravolta do desenvolvimento web
Page 17: A reviravolta do desenvolvimento web
Page 18: A reviravolta do desenvolvimento web

HTTP::Engine

Page 19: A reviravolta do desenvolvimento web
Page 20: A reviravolta do desenvolvimento web

PSGI

Internet

Page 21: A reviravolta do desenvolvimento web

PSGI

Perl Web Server Gateway Interface

Tatsuhiko Miyagawa

WSGI (Python) e Rack (Ruby)

Page 22: A reviravolta do desenvolvimento web

PSGI

Perl Web Server Gateway Interface

Tatsuhiko Miyagawa

WSGI (Python) e Rack (Ruby)

Page 23: A reviravolta do desenvolvimento web

PSGI

Perl Web Server Gateway Interface

Tatsuhiko Miyagawa

WSGI (Python) e Rack (Ruby)

Page 24: A reviravolta do desenvolvimento web
Page 25: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 26: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 27: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 28: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 29: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 30: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 31: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ 200, [‘Content-Type’ => ‘text/plain’], [‘Hello World’] ];};

Page 32: A reviravolta do desenvolvimento web

Streaming e/ounon-blocking?

Page 33: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return sub { my $respond = shift; # ... delegar $respond->( [$status, $headers, $body] ); };};

Page 34: A reviravolta do desenvolvimento web

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
Page 36: A reviravolta do desenvolvimento web

PSGI

...

Page 37: A reviravolta do desenvolvimento web

PSGI

SPDY?

Page 38: A reviravolta do desenvolvimento web

Plack?

Page 39: A reviravolta do desenvolvimento web

Plack?

PSGI toolkit

Page 40: A reviravolta do desenvolvimento web

HTTP::Server::PSGI

Page 41: A reviravolta do desenvolvimento web

Plack::Component

Page 42: A reviravolta do desenvolvimento web

Plack::(Request|Response)

Page 43: A reviravolta do desenvolvimento web

Plack::Middleware

Page 44: A reviravolta do desenvolvimento web
Page 45: A reviravolta do desenvolvimento web
Page 46: A reviravolta do desenvolvimento web

220+ Middleware

Page 47: A reviravolta do desenvolvimento web

my $app = sub { my $env = shift; return [ $status, $headers, $body ];};

my $mw = sub { ... };

Page 48: A reviravolta do desenvolvimento web

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

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

Plack::Util::response_cb

Page 51: A reviravolta do desenvolvimento web

$ plackup app.psgiHTTP::Server::PSGI: Accepting connections

at http://0:5000/

Page 52: A reviravolta do desenvolvimento web

$ plackup -s $SERVER app.psgi

Page 53: A reviravolta do desenvolvimento web

$ plackup -s FCGI app.psgi

Page 54: A reviravolta do desenvolvimento web

$ plackup -s Starman app.psgi

Page 55: A reviravolta do desenvolvimento web

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

Plack::App

Page 57: A reviravolta do desenvolvimento web

Plack::App::File

Page 58: A reviravolta do desenvolvimento web

Plack::App::Directory

Page 59: A reviravolta do desenvolvimento web

Plack::App::Proxy

Page 60: A reviravolta do desenvolvimento web

Plack::App::FCGIDispatcher

Page 61: A reviravolta do desenvolvimento web

Plack::App::URLMap

Page 62: A reviravolta do desenvolvimento web

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

Plack::App::CGIBinPlack::App::WrapCGI

Page 64: A reviravolta do desenvolvimento web

Plack::App::FakeApache

Page 65: A reviravolta do desenvolvimento web

Plack::TestTest::WWW::Mechanize::PSGI

Page 66: A reviravolta do desenvolvimento web
Page 67: A reviravolta do desenvolvimento web

25+ Frameworks e Toolkits

35+ Webservers e Handlers

Page 68: A reviravolta do desenvolvimento web

25+ Frameworks e Toolkits

35+ Webservers e Handlers

Page 69: A reviravolta do desenvolvimento web
Page 70: A reviravolta do desenvolvimento web
Page 71: A reviravolta do desenvolvimento web

CGI

Plack::Handler::CGI

Page 72: A reviravolta do desenvolvimento web

mod_perl

Plack::Handler::Apache(1|2)

Page 73: A reviravolta do desenvolvimento web

FastCGI

Plack::Handler::FCGI

::FCGI::EV

::FCGI::Async

::AnyEvent::FCGI

fastpass

Page 74: A reviravolta do desenvolvimento web

FastCGI

Plack::Handler::FCGI

::FCGI::EV

::FCGI::Async

::AnyEvent::FCGI

fastpass

Page 75: A reviravolta do desenvolvimento web

FastCGI

Plack::Handler::FCGI

::FCGI::EV

::FCGI::Async

::AnyEvent::FCGI

fastpass

Page 76: A reviravolta do desenvolvimento web

Servidores HTTP autônomos

HTTP::Server::PSGI

HTTP::Server::Simple::PSGI

Starman

Starlet

Page 77: A reviravolta do desenvolvimento web

Servidores HTTP autônomos

HTTP::Server::PSGI

HTTP::Server::Simple::PSGI

Starman

Starlet

Page 78: A reviravolta do desenvolvimento web

Servidores HTTP autônomos

HTTP::Server::PSGI

HTTP::Server::Simple::PSGI

Starman

Starlet

Page 79: A reviravolta do desenvolvimento web

Servidores HTTP autônomos

HTTP::Server::PSGI

HTTP::Server::Simple::PSGI

Starman

Starlet

Page 80: A reviravolta do desenvolvimento web

Servidores HTTP autônomos (async)

Feersum

Twiggy

Page 81: A reviravolta do desenvolvimento web

Perlbal::Plugin::PSGI

mod_psgi

nginx_mod_psgi

Mongrel2

Page 82: A reviravolta do desenvolvimento web
Page 83: A reviravolta do desenvolvimento web

Obrigado! Perguntas?Wallace Reis @wreis

[email protected]

YAPC::BR::2012

https://metacpan.org/module/PSGIhttp://plackperl.org/

http://blog.plackperl.org/IRC#plack