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

时间:2016-06-07 12:29:15

标签: web-services rest haskell servant

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

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

type CustomAPI = StandardAPI :<|> "customroute" :> Get '[JSON] Blah
换句话说,组成API。在Spock中,我可以用monadic路线构造来做到这一点,但我不确定如何在仆人中这样做。

这样我可以跨API重用共享路由。使用此功能的另一个原因是某些类型不能与客户端生成器一起使用,例如Raw。

1 个答案:

答案 0 :(得分:8)

是的,引用Servant documentation即可使用

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

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

usersServer :: Server UsersAPI
usersServer = -- implementation

productsServer :: Server ProductsAPI
productsServer = -- implementation