Uploaded on

Построение PSGI-совместимых Web-framework'ов

Построение PSGI-совместимых Web-framework'ов

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,752
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
2
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Black Perl 2011 Построение PSGI-совместимых Web-framework’ов Сергей Засенко (und3f) 1 октября 2011 г.
  • 2. Преимущества • Свобода выбора архитектуры приложения. • Возможность простроения асинхронного приложения на базе любой событийной машины. • Выбор зависимостей системы.
  • 3. Составляющие веб-фреймворка
  • 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’а. • Соединять компоненты легко. • Возможно разработать приложение любой конфигурации. • Разрабатывайте!
  • 18. Исходный код https://github.com/und3f/black-perl-2011
  • 19. Другие примеры JLogger::Web https://github.com/und3f/jlogger-web Lamework https://github.com/vti/lamework Web::Simple https://metacpan.org/module/Web::Simple
  • 20. Вопросы?