Приветствую всех! Сегодня я бы хотел представить веб-фреймворк на перл 5 собственного сочинения, Ниф (Not Even A Framework). Написан он больше для самообразования, т.к. и так их как собак нерезаных, но мне кажется, в нём есть некие здравые идеи. Суть такова:
1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные к пути в URI (см. тж. https://metacpan.org/pod/Dancer ) 2. Хэндлер получает на вход объект запроса, из которого потом достаются параметры, куки, заголовки и т.д. (см. тж. https://metacpan.org/pod/Kelp ) 3. Параметры и куки нельзя достать без валидации, например, при помощи регулярного выражения: $req->param( foo => qr/\d+/ ); См. тж. perl -T В качестве альтернативы есть самовалидирующиеся формы на базе Validator::LIVR или самописного каличного движка (но ЛИВР лучше). См. тж. https://metacpan.org/pod/Validator::LIVR и https://metacpan.org/pod/Data::CGIForm 4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами, которая затем передаётся в шаблонизатор для рендеринга. На данный момент поддерживается Template::Toolkit и JSON/JSONP Также есть ограниченный набор ключей с минусом, которые используются для управления самим фреймворком - -template, -status и т.п 5. Хэндлер может выбросить исключение: die 404 - легальный способ вернуть настраиваемую страницу not found. Все нормальные исключения (не трёхцифренные и не специальные объекты самого Neaf) трактуются как error 500. 6. Один и тот же код может в неизменном виде запускаться как cgi, psgi и под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг из командной строки: perl myapp.pl --help perl myapp.pl --list 7. Кроме этого есть поддержка статических страниц (не надо держать отдельно нормальный веб-сервер, чтобы проверить CSS или логотип), сессий в несколько недоделанном виде (планируется улучшение), отложенные действия, выполняемые после запроса, ну и по мелочи ещё. Пример кода: use strict; use warnings; use MVC::Neaf; MVC::Neaf->route( "/" => sub { my $req = shift; return { -template => \'Hello, [% name %]!', -type => 'text/plain', name => $req->param( name => qr/\w+/, "Stranger" ), }, }); На каждую фичу есть небольшой пример, они же используются как дополнительные смоук-тесты к 80% покрытию юнит-тестами. см. https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example Собственно фреймворк: https://metacpan.org/pod/MVC::Neaf Буду рад обратной связи, критике, багрепортам и запросам новых фич (см. тж. https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO ) С уважением, -- Konstantin S. Uvarin jabber: see <from> skype: kuvarin http://github.com/dallaylaen
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
