http API客户端的Wreq或Servant?

时间:2015-12-12 21:59:56

标签: haskell

我一直在两个不同的项目中为Pivotal Tracker工具实现客户端绑定。 One project使用wreq library,而the other依赖servant

我想合并两个项目,但我不确定使用哪种设计方法。所以有助于我解决这个问题的问题是:

  1. 将API定义为类型(可读性除外)是否有任何具体优势?

  2. 哪种错误处理会为库的用户,服务员的EitherT ServantError IO ()或wreq的异常风格生成更少的代码?

1 个答案:

答案 0 :(得分:5)

两者都使用http-client

在Haskell中,编写web api绑定最耗费的部分是数据定义和JSON序列化规范。 wreq实现使用镜头,wreq是镜头HTTP库。

之后,您希望提供一些功能(使用IO)从右端点获取数据:

getStory :: Options -> Int -> Int -> IO Story
getStory options projectId storyId =
    getOne options $ "/projects/" ++ show projectId ++ "/stories/" ++ show storyId

type API = "services" :> "v5" :> "stories"
             :> Header "X-TrackerToken" Text
             :> Capture ":storyId" StoryId
             :> Get '[JSON] Story

story :: Text -> StoryId -> EitherT ServantErr IO Story
story :<|> ... =  client api ...

他们并没有那么不同。使用wreq(或直接http-client)您可能会实现一些辅助函数(如getOne)来执行提取操作;当你使用servant时,你可以免费获得#34;