首先,我对Haskell很新 - 但我必须说自从我开始玩它以来我爱上了这门语言。我做了大量的C,Java,python和perl。 Haskell肯定在我身上成长。我在perl / python中为我的一个个人项目编写了一个web应用程序/服务 - 我想知道我是否可以将它作为一个有趣的项目转移到haskell并做一些haskell hackery来看它是如何演变的。
我知道haskell中有一些优秀的Web应用程序框架。我想做的是有一个用haskell编写的服务,它将以不同的格式(SOAP,REST-xml,REST-json)响应数据。我使用javascript来构建DOM等。所以我的问题是,我可以使用任何库来转换动态数据的格式吗?或者考虑到场景,你会如何在哈斯克尔进行呢?
自2008年以来,我没有玩过这个项目,我最初的想法是使用java社区中的apacheCXF并在java中编写所有代码。但我很想在哈斯克尔做这件事。有什么提示吗?
我用Happstack编写了类似的东西。
我所做的是创建一个类型来表示我的Web应用程序的所有可能的响应。
data AppResponse = Foo String Int | Bar [String] | etc
然后编写我的处理程序以返回此类型的值:
home :: ServerPart AppResponse
user :: UserId -> ServerPart AppResponse
等等,
然后我编写了以不同格式呈现响应的函数:
jsonResponse :: AppResponse -> JSON
xmlResponse :: AppResponse -> XML
等等
然后有一个简单的过滤器,看着 Accept
标头并决定使用哪些转换函数。
这种方法很好,因为:
- 大多数代码不需要知道任何有关响应格式的内容(xml,json等)
- 要添加新格式,您只需编写新功能,
newFormatResponse :: AppResponse -> NewFormat
。该 AppResponse
键入每个可能的响应的详细信息,因此您不必搜索所有代码,找出甚至可能的响应。
有一个 haskellwiki页面 致力于这个主题。在这些当中 HappStack 和 耶索德 是最成熟的。对于初学者,我建议 HappStack 因为Yesod使用了很多 QuasiQuotes
魔法。
HappStack 在它的状态模块中只有一些魔力。据我所知,这将在HappStack 7中被改变,在那里它将被改为使用MACID商店,它不那么神奇,并且具有较少的样板。
如果你想要一些简单的东西,你应该看看 Snap框架。