haskell - Haskell 中的 Web 服务框架

标签 haskell service

首先,我对 Haskell 很陌生——但我必须说,自从我开始使用它以来,我就爱上了它。我已经完成了大量的 C、Java、python 和 perl。 Haskell 肯定在我身上成长。不久前,我在 perl/python 中为我的一个个人项目编写了一个 Web 应用程序/服务——我想知道我是否可以将它作为一个有趣的项目移至 haskell 并做一些 haskell 黑客操作来看看它是如何演变的。

我知道 haskell 中有一些出色的 Web 应用程序框架。我想做的是有一个用haskell编写的服务,它将以不同格式(SOAP、REST-xml、REST-json)响应数据。我会使用 javascript 来构建 DOM 等。所以我的问题是有没有可以用来即时转换数据格式的库?或者给定场景,你将如何在 haskell 中进行操作?

自 2008 年以来我没有玩过这个项目,我最初的想法是使用 java 社区的 apacheCXF 并用 java 编写代码。但我很想在haskell中做到这一点。请问有什么提示吗?

最佳答案

我用 Happstack 写过类似的东西。

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

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

然后编写我的处理程序来返回这种类型的值:
home :: ServerPart AppResponse
user :: UserId -> ServerPart AppResponse

ETC,

然后我编写了可以以不同格式呈现响应的函数:
jsonResponse :: AppResponse -> JSON
xmlResponse  :: AppResponse -> XML

等等

然后是一个简单的过滤器,查看 Accept header 并决定使用哪些转换函数。

这种方法很好,因为:
  • 大部分代码不需要了解响应格式(xml、json 等)
  • 要添加新格式,您只需编写新函数,如 newFormatResponse :: AppResponse -> NewFormat . AppResponse键入详细信息每个可能的响应,因此您不必搜索所有代码来找出甚至可能的响应。
  • 关于haskell - Haskell 中的 Web 服务框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663888/

    相关文章:

    haskell - ghc-mod 安装失败

    haskell - 如何防止 GHC7 编译程序占用所有内存?

    haskell - 获取 Data.ByteString.Builder 的长度

    haskell - 使用 let 在线解析错误(可能是不正确的缩进或不匹配的括号)

    java - 如何为媒体音量变化注册 ContentObserver?

    haskell - 融合可以看穿新型包装器吗?

    angular - Angular 4 中的循环依赖

    android - 线程运行时在 Service 中调用 stopSelf()

    java - 关于服务、Daos 及其之间 - 初学者的困境

    delphi - Delphi 2009 可以构建返回数据集的 Web 服务吗?