Haskell Servant - 有没有办法组合API类型?

daj*_*daj 3 rest haskell web-services servant

我知道这不是有效的语法,但有没有办法在servant中完成这样的事情?

type StandardAPI = "foo" :> Get '[JSON] Whatever

type CustomAPI = StandardAPI :<|> "customroute" :> Get '[JSON] Blah
Run Code Online (Sandbox Code Playgroud)

换句话说,组成API.在Spock中,我可以用monadic路由构造来做到这一点,但我不知道如何在servant中这样做.

这样我可以跨API重用共享路由.使用它的另一个原因是某些类型不适用于客户端生成器,例如Raw.

kla*_*sor 8

是的,引用您可以使用的Servant文档

type CombinedAPI = "users" :> UsersAPI
          :<|> "products" :> ProductsAPI

server :: Server CombinedAPI
server = usersServer :<|> productsServer

usersServer :: Server UsersAPI
usersServer = -- implementation

productsServer :: Server ProductsAPI
productsServer = -- implementation
Run Code Online (Sandbox Code Playgroud)