我是Haskell初学者,目前正在使用wreq围绕api制作一个简单的包装器.if-modified-since
如果提供时间,我想发送标题.我是按照以下方式这样做的.
getResponse :: (FormatTime t, Exception e) => File -> Maybe t -> IO (Either e (Response L.ByteString))
getResponse file (Just t) =
let formattedTime = (B.pack . formatTime defaultTimeLocale rfc822DateFormat) t
opts = defaults & header "if-modified-since" .~ [formattedTime]
in try $ getWith opts $ buildUrl file
getResponse file Nothing = try $ (get $ buildUrl file)
Run Code Online (Sandbox Code Playgroud)
我注意到304 (not modified)
响应是作为异常回来的,所以这是我使用该Either
类型的理由.我想为可能使用此api包装器的人提供错误可见性.
假设请求成功,我想将响应主体解析为我库中定义的相应类型.如果服务器上的某些内容发生了变化,我可能无法正常反序列化,因此我选择使用该Maybe
类型来解决此问题.
getPayload :: FromJSON b => (Either e (Response …
Run Code Online (Sandbox Code Playgroud)