如何使用Servant实现条件终结点?

问题描述 投票:-3回答:1

我有一个使用Servant库编写的服务器。现在,我希望使端点成为有条件的,以便基于某些配置或逻辑,我想服务(或不服务)特定的端点。最好的方法是什么?

我已经尝试使用EmptyAPI中的Servant.API,但没有用。对于上下文,我目前大部分路线都使用toServant中的Servant.API.Generic

haskell servant
1个回答
0
投票

如果在端点“关闭”时可以返回404,可以通过抛出相应的Servant错误来做到这一点:

server = toServant MyEndpointsRecord
    { ...

    , cleverEndpoint = do
        shouldServe <- isCleverEndpointEnabled
        if shouldServe 
            then serveCleverEndpoint
            else throwError err404

    ...
    }

如果需要经常这样做,也可以将其包装起来以供重复使用:

guarded checkConfig f = do
    shouldServe <- checkConfig
    if shouldServe 
        then f
        else throwError err404


server = toServant MyEndpointsRecord
    { ...

    , cleverEndpoint = guarded isCleverEndpointEnabled serveCleverEndpoint

    ...
    }
© www.soinside.com 2019 - 2024. All rights reserved.