Каркасы веб-сервисов в haskell - PullRequest
11 голосов
/ 12 июля 2011

Прежде всего, я новичок в Хаскеле, но должен сказать, что влюбился в язык с тех пор, как начал с ним играть.Я сделал обширный C, Java, Python и Perl.Хаскелл определенно растет на мне.Некоторое время назад я написал веб-приложение / службы на perl / python для одного из моих личных проектов - мне было интересно, смогу ли я переместить его на haskell в качестве забавного проекта и сделать некоторую хакерскую работу на haskell, чтобы увидеть, как он развивается.

Я знаю, что в haskell есть несколько выдающихся фреймворков для веб-приложений.Что я хотел бы сделать, так это написать на haskell сервис, который будет отвечать данными в разных форматах (SOAP, REST-xml, REST-json).Я бы использовал javascript для создания DOM и т. Д. Итак, мой вопрос: есть ли библиотеки, которые я мог бы использовать для преобразования формата данных на лету?Или, учитывая сценарий, как бы вы сделали это в Haskell?

Я не играл с этим проектом с 2008 года, и моей первоначальной мыслью было использовать apacheCXF из сообщества java и кодировать все это в java.Но я бы хотел сделать это на Haskell.Любые намеки, пожалуйста?

Ответы [ 2 ]

8 голосов
/ 14 июля 2011

Я написал нечто подобное, используя Happstack.

Я создал тип, представляющий все возможные ответы моего веб-приложения.

data AppResponse = Foo String Int | Bar [String] | etc

затем написал мои обработчики для возвратазначения этого типа:

home :: ServerPart AppResponse
user :: UserId -> ServerPart AppResponse

и т. д.,

Затем я написал функции, которые будут обрабатывать ответ в различных форматах:

jsonResponse :: AppResponse -> JSON
xmlResponse  :: AppResponse -> XML

и т. д.

Тогда есть простой фильтр, который просматривает заголовок Accept и решает, какую из этих функций преобразования использовать.

Этот подход хорош, потому что:

  1. большая частьКод не должен ничего знать о формате ответа (xml, json и т. д.)
  2. , чтобы добавить новый формат, просто напишите новую функцию, например, newFormatResponse :: AppResponse -> NewFormat.Тип AppResponse детализирует каждый возможный ответ, поэтому вам не нужно искать весь код, чтобы выяснить, какие ответы возможны.
6 голосов
/ 12 июля 2011

На этой теме есть страница haskellwiki . Среди них HappStack и Yesod являются наиболее зрелыми. Для новичка я бы порекомендовал HappStack , так как Йесод использует немало QuasiQuotes магии.

HappStack содержит только магию в своем модуле состояния. Из того, что я слышал, это будет изменено в HappStack 7, где он будет изменен на использование хранилища MACID, которое намного менее волшебно и имеет меньший шаблон.

Если вы хотите что-то простое, вы должны взглянуть на Snap Framework .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...