haskell中的Web服务框架

ope*_*eek 12 service haskell

首先,我对Haskell很新 - 但我必须说自从我开始玩它以来我爱上了这门语言.我做了大量的C,Java,python和perl.Haskell肯定在我身上成长.我在perl/python中编写了一个web应用程序/服务,用于我的一个个人项目 - 我想知道我是否可以将它作为一个有趣的项目转移到haskell并做一些haskell hackery来看它是如何演变的.

我知道haskell中有一些优秀的Web应用程序框架.我想做的是有一个用haskell编写的服务,它将以不同的格式(SOAP,REST-xml,REST-json)响应数据.我使用javascript来构建DOM等等.所以我的问题是,我可以使用任何库来动态转换数据的格式吗?或者考虑到场景你将如何在haskell中进行?

自2008年以来,我没有玩过这个项目,我最初的想法是使用java社区的apacheCXF并在java中编写所有代码.但我很乐意在哈斯克尔做这件事.有什么提示吗?

ste*_*cut 8

我用Happstack编写了类似的东西.

我所做的是创建一个类型来表示我的Web应用程序的所有可能的响应.

data AppResponse = Foo String Int | Bar [String] | etc
Run Code Online (Sandbox Code Playgroud)

然后编写我的处理程序以返回此类型的值:

home :: ServerPart AppResponse
user :: UserId -> ServerPart AppResponse
Run Code Online (Sandbox Code Playgroud)

等等,

然后我编写了以不同格式呈现响应的函数:

jsonResponse :: AppResponse -> JSON
xmlResponse  :: AppResponse -> XML
Run Code Online (Sandbox Code Playgroud)

等等

然后有一个简单的过滤器,它查看Accept标题并决定使用哪些转换函数.

这种方法很好,因为:

  1. 大多数代码不需要知道任何有关响应格式的信息(xml,json等)
  2. 要添加新格式,您只需编写新函数,newFormatResponse :: AppResponse -> NewFormat.该AppResponse类型详细说明了每个可能的响应,因此您无需在整个代码中查找甚至可能的响应.


Has*_*ant 7

有一个专门讨论这个主题的haskellwiki页面.其中HappStackYesod是最成熟的.对于初学者,我会推荐HappStack,因为Yesod使用了相当多的QuasiQuotes魔力.

HappStack在其状态模块中只有一些魔力.据我所知,这将在HappStack 7中被改变,在那里它将被改为使用MACID商店,它不那么神奇,并且具有更少的样板.

如果你想要一些简单的东西,你应该看看Snap框架.

  • 请注意,Yesod的大部分魔力是:1)可选2)安全使用而不用担心它是如何工作的3)非常方便.这比品味更重要. (6认同)