SlideShare a Scribd company logo
1 of 20
Download to read offline
Black Perl 2011

          Построение
       PSGI-совместимых
       Web-framework’ов
        Сергей Засенко (und3f)


           1 октября 2011 г.
Преимущества

   • Свобода выбора архитектуры
     приложения.
   • Возможность простроения
     асинхронного приложения на базе
     любой событийной машины.
   • Выбор зависимостей системы.
Составляющие веб-фреймворка
Составляющие веб-фреймворка

 Routes разбор адреса запроса.
 Controller контроль входящих данных
 и реализация реакции с помощью модели
 и представления.
 View отображение информации.
 Model данные и методы работы с
 ними.
Что необходимо выполнить?



   Соединить готовые
      компоненты
Модули разбора маршрутов

   • HTTP::Router
   • Path::Dispatcher
   • Path::Router
   • Route::Simple
   • Routes::Tiny
   • другие.
Шаблонизаторы

  • HTML::CTPP2
  • HTML::Template
  • Template::Toolkit
  • Text::Caml
  • Text::Xslate
  • другие.
Этапы выполнения

   1   Разбор адреса запроса и определение
       обрабатывающего контроллера.
   2   Передача управления в
       соответствующий контроллер.
   3   Обработка шаблона с параметрами
       контроллера.
Реализация



      Hello, Plack!
Инструменты реализации


   • Plack
   • Text::Caml
   • Routes::Tiny
Инициализация rout’ов

 my $routes = Routes::Tiny−>new;

 $routes−>add_route(’/’,
     defaults => {action => &root});

 $routes−>add_route(’/welcome/:name’ ,
     defaults => {action => &welcome});
Разбор URL
 sub dispatch {
     my $env = shift;

     my $path = $env−>{PATH_INFO};

     if (my $route = $routes−>match($path)) {
         my $action = $route−>{params}{action};

         $action−>($env, $route−>{params});
     }
 }
View

 sub render {
     my ($template, $data) = @_;

     my $view = Text::Caml−>new;

     my $html = $view−>render_file($template, $data);

     [200, [ ’Content−Type’, ’text/html’ ], [$html ]];
 }
Контроллеры
 sub root {
     my ($env, $params) = @_;

     render( ’ root .mt’);
 }

 sub welcome {
     my ($env, $params) = @_;

     render( ’welcome.mt’, $params);
 }
Шаблоны

                   root.mt
 <html>
  <body>Hello, Plack!</body>
 </html>

                welcome.mt
 <html>
  <body>Hello, {{name}}.</body>
 </html>
Тесты
 use FindBin ’$Bin’ ;
 my $app = require "$Bin/../app.psgi";

 test_psgi $app, sub {
     my $cb = shift;

     my $res = $cb−>(GET ’/’);
     like $res−>content, qr/Hello, Plack!/;

     $res = $cb−>(GET ’/welcome/Sergey’);
     like $res−>content, qr/Hello, Sergey ./;
 }
Итог

   • Есть набор готовых компонент для
     построения собственного
     web-framework’а.
   • Соединять компоненты легко.
   • Возможно разработать приложение
     любой конфигурации.
   • Разрабатывайте!
Исходный код



 https://github.com/und3f/black-perl-2011
Другие примеры

 JLogger::Web
 https://github.com/und3f/jlogger-web

 Lamework
 https://github.com/vti/lamework

 Web::Simple
 https://metacpan.org/module/Web::Simple
Вопросы?

More Related Content

What's hot

"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Go Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaGo Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaMail.ru Group
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»FDConf
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Open-IT
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"FDConf
 
Мульти-доменность в Django проекте
Мульти-доменность в Django проектеМульти-доменность в Django проекте
Мульти-доменность в Django проектеAlexey Kinyov
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБДRoman Brovko
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubyAlexey Nayden
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 

What's hot (20)

Mysql replication
Mysql replicationMysql replication
Mysql replication
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Go Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, LazadaGo Template Toolkit, Сергей Свистунов, Lazada
Go Template Toolkit, Сергей Свистунов, Lazada
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Perl in practice
Perl in practicePerl in practice
Perl in practice
 
JQuery
JQueryJQuery
JQuery
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
Мульти-доменность в Django проекте
Мульти-доменность в Django проектеМульти-доменность в Django проекте
Мульти-доменность в Django проекте
 
Batch processing on RoR
Batch processing on RoRBatch processing on RoR
Batch processing on RoR
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 

Viewers also liked

מדריך לבניה אקולוגית
מדריך לבניה אקולוגיתמדריך לבניה אקולוגית
מדריך לבניה אקולוגיתdrorpiltz
 
Dynamic time warping and PIC 16F676 for control of devices
Dynamic time warping and PIC 16F676 for control of devicesDynamic time warping and PIC 16F676 for control of devices
Dynamic time warping and PIC 16F676 for control of devicesRoger Gomes
 
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...Stjepan Špoljar
 
Speaker and Speech Recognition for Secured Smart Home Applications
Speaker and Speech Recognition for Secured Smart Home ApplicationsSpeaker and Speech Recognition for Secured Smart Home Applications
Speaker and Speech Recognition for Secured Smart Home ApplicationsRoger Gomes
 

Viewers also liked (6)

מדריך לבניה אקולוגית
מדריך לבניה אקולוגיתמדריך לבניה אקולוגית
מדריך לבניה אקולוגית
 
Dynamic time warping and PIC 16F676 for control of devices
Dynamic time warping and PIC 16F676 for control of devicesDynamic time warping and PIC 16F676 for control of devices
Dynamic time warping and PIC 16F676 for control of devices
 
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...
Garažni objekt u ul.sv. mateja 119 slikovni prikaz stanja, ...
 
Speaker and Speech Recognition for Secured Smart Home Applications
Speaker and Speech Recognition for Secured Smart Home ApplicationsSpeaker and Speech Recognition for Secured Smart Home Applications
Speaker and Speech Recognition for Secured Smart Home Applications
 
Thailand Investment Review, November 2014
Thailand Investment Review, November 2014Thailand Investment Review, November 2014
Thailand Investment Review, November 2014
 
Thailand: A Prime Destination for Doing Business in Southeast Asia
Thailand: A Prime Destination for Doing Business in Southeast AsiaThailand: A Prime Destination for Doing Business in Southeast Asia
Thailand: A Prime Destination for Doing Business in Southeast Asia
 

Similar to Psgi app

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview ReleaseDenis Shestakov
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаIlya Chesnokov
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование версткиTalks&Works
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf Conference
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodePositive Hack Days
 

Similar to Psgi app (20)

Mojolicious
MojoliciousMojolicious
Mojolicious
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервиса
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Yserver
YserverYserver
Yserver
 
бегун
бегунбегун
бегун
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование верстки
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
бегун
бегунбегун
бегун
 
Ci
CiCi
Ci
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source Code
 

Psgi app

  • 1. Black Perl 2011 Построение PSGI-совместимых Web-framework’ов Сергей Засенко (und3f) 1 октября 2011 г.
  • 2. Преимущества • Свобода выбора архитектуры приложения. • Возможность простроения асинхронного приложения на базе любой событийной машины. • Выбор зависимостей системы.
  • 4. Составляющие веб-фреймворка Routes разбор адреса запроса. Controller контроль входящих данных и реализация реакции с помощью модели и представления. View отображение информации. Model данные и методы работы с ними.
  • 5. Что необходимо выполнить? Соединить готовые компоненты
  • 6. Модули разбора маршрутов • HTTP::Router • Path::Dispatcher • Path::Router • Route::Simple • Routes::Tiny • другие.
  • 7. Шаблонизаторы • HTML::CTPP2 • HTML::Template • Template::Toolkit • Text::Caml • Text::Xslate • другие.
  • 8. Этапы выполнения 1 Разбор адреса запроса и определение обрабатывающего контроллера. 2 Передача управления в соответствующий контроллер. 3 Обработка шаблона с параметрами контроллера.
  • 9. Реализация Hello, Plack!
  • 10. Инструменты реализации • Plack • Text::Caml • Routes::Tiny
  • 11. Инициализация rout’ов my $routes = Routes::Tiny−>new; $routes−>add_route(’/’, defaults => {action => &root}); $routes−>add_route(’/welcome/:name’ , defaults => {action => &welcome});
  • 12. Разбор URL sub dispatch { my $env = shift; my $path = $env−>{PATH_INFO}; if (my $route = $routes−>match($path)) { my $action = $route−>{params}{action}; $action−>($env, $route−>{params}); } }
  • 13. View sub render { my ($template, $data) = @_; my $view = Text::Caml−>new; my $html = $view−>render_file($template, $data); [200, [ ’Content−Type’, ’text/html’ ], [$html ]]; }
  • 14. Контроллеры sub root { my ($env, $params) = @_; render( ’ root .mt’); } sub welcome { my ($env, $params) = @_; render( ’welcome.mt’, $params); }
  • 15. Шаблоны root.mt <html> <body>Hello, Plack!</body> </html> welcome.mt <html> <body>Hello, {{name}}.</body> </html>
  • 16. Тесты use FindBin ’$Bin’ ; my $app = require "$Bin/../app.psgi"; test_psgi $app, sub { my $cb = shift; my $res = $cb−>(GET ’/’); like $res−>content, qr/Hello, Plack!/; $res = $cb−>(GET ’/welcome/Sergey’); like $res−>content, qr/Hello, Sergey ./; }
  • 17. Итог • Есть набор готовых компонент для построения собственного web-framework’а. • Соединять компоненты легко. • Возможно разработать приложение любой конфигурации. • Разрабатывайте!
  • 19. Другие примеры JLogger::Web https://github.com/und3f/jlogger-web Lamework https://github.com/vti/lamework Web::Simple https://metacpan.org/module/Web::Simple