如何在Servant中获取HTTP头?

4
我有一个简单的服务应用程序,带有 REST API:
type API = "items" :> Get '[JSON] [MyData]

app :: Application
app = serve api server

api :: Proxy API
api = Proxy

server :: Server API
server = getItems

getItems :: ExceptT ServantErr IO [MyData]
getItems = ......

startApp :: IO ()
startApp = run 1234 app

我该如何获取HTTP头并根据条件返回特定的响应,比如HTTP403?

1个回答

5

使用Servant的HeaderServant文档

type API = "items" 
           :> Header "Auth-token" Text 
           :> Get '[JSON] [MyData]

那么

handler :: Maybe Text -> ExceptT ServantErr IO [MyData]
handler (Just "secret-code") = right [mydata]
handler _                    = left $ err403 { errBody = "no access" }

1
如果我没记错的话,你会得到 Maybe String,但这个答案除此之外还是不错的。 - Alp Mestanogullari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接