gpt4 book ai didi

haskell - HTTP API 客户端的 Wreq 或 Servant?

转载 作者:行者123 更新时间:2023-12-02 16:45:31 28 4
gpt4 key购买 nike

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

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

  1. 将 API 定义为类型有什么具体优势(除了可读性之外)吗?

  2. 哪个错误处理将为图书馆的用户生成更少的代码,仆人的 EitherT ServantError IO ()或者wreq的异常风格?

最佳答案

两者都在底层使用http-client

在 Haskell 中,编写 Web API 绑定(bind)最耗时的部分是数据定义和 JSON 序列化规范。 wreq 实现使用 Lensy,wreq 是 Lensy 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 时,你可以“免费”获得它。

关于haskell - HTTP API 客户端的 Wreq 或 Servant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34245490/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com