我一直在两个不同的项目中为Pivotal Tracker工具实现客户端绑定。 One project使用wreq library,而the other依赖servant。
我想合并两个项目,但我不确定使用哪种设计方法。所以有助于我解决这个问题的问题是:
将API定义为类型(可读性除外)是否有任何具体优势?
哪种错误处理会为库的用户,服务员的EitherT ServantError IO ()
或wreq的异常风格生成更少的代码?
答案 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;