Беликин Илья (ihrd) wrote,

Web.pm first week

Я, Carl и Stephen приступили к работе над грантом. Наша цель -- создать легковесный web framework на Perl6 под Rakudo. Рабочее название -- Web.pm, но многие считают его слишком общим и расплывчатым. Поэтому в ходе работы мы постараемся найти более подходящее. Я думаю мы сможем подобрать название, когда уже будет что называть.

Несмотря на наличие примерного плана разработки, как он описан в нашей заявке [1], первые же дни работы ввергли меня в замешательство. Слишком много вариантов реализации, идей и мнений. Наша IRC канал и рассылка стали необычно активными [2], Daniel Ruoso предложил свой вариант диспатчера [3].

Чтобы справится с хаосом в голове, я постарался выделить главное для себя, и пришел к первому тезису:

-- Максимально использовать стандартные инструменты Perl6.

Perl6 "большой" и богатый язык. Создавая фреймворк мы должны минимизировать число надстроек. Код должен быть организован с использованием стандартных классов, модулей, ролей. Не нужно много специфичной магии. Эта базовая мысль помогла мне выбрать позицию по активно обсуждаемому диспатчеру:

-- Использовать Perl6 MMD (Milti Methods Dispatcher[4]) для диспетчеризации запросов.

Moritz Lenz поддержал эту мысль и предложил свой, простой вариант реализации. Совмещение этой мысли с архитектурой REST [5] и влиянием Waves [6] навела меня на организацию код в виде ресурсов. Где ресурс это класс, а его методы, это собственно методы HTTP:

class Topic {
    multi method GET () { ... } # index
    multi method GET (Int $id) { ... } #show Topic by id
    multi method PUT (Int $id, %data) { ... } # update Topic by id
    multi method POST (%data) { ... } # create new Topic
...
}


Роль диспатчера при таком подходе -- выбрать верный ресурс для вызова метода, остальное делает MMD. Развивая эту мысль я делаю набросок, который назвал Forest, посмотрим, что из этого получится.

Одна из первых мыслей высказанных Ruoso -- взять идею :Chained из Catalyst [7], и построить всю диспетчеризацию как расширенную систему цепочек. Мне нравится эта идея и в Forest я хочу реализовать возможность связывания ресурсов в цепочку.

Еще один принцип, который я бы хотел заложить в основу -- возможность встраивать приложения. Так, чтобы, например, разработанный на базе нашего фреймворка блог, мог быть встроен в другое приложение на базе фреймворка.

Моя первая неделя работы над грантом была омрачена простудой. Эффективно поработать удалось совсем не много и мне пришлось сделать перерыв. Надеюсь продолжить работу с середины следующей недели.

(С удивлением обнаружил, что доступ к perl6.ru для меня закрыт. Поэтому посты по теме пока пишу сюда.)

1: http://github.com/masak/web/blob/b5b6bf6980f027fdfab217ab2daf3a1b08c80e26/doc/GRANT-PROPOSAL.pod
2: используем IRC канал #november-wiki на irc.freenode.org и рассылку november-wiki@googlegroups.com
3: смотрите логи IRC начиная с http://irclog.perlgeek.de/november-wiki/2009-03-09 и переписку в рассылке
4: http://feather.perl6.nl/syn/S12.html
5: http://en.wikipedia.org/wiki/Representational_State_Transfer
6: http://rubywaves.com/
7: http://www.catalystframework.org/
Tags: perl6, web.pm
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 35 comments