使用免费monad实现akka http dsl

时间:2017-06-28 20:47:11

标签: scala akka-http scala-cats

我一直在阅读关于免费monad的一周。我想用free monads实现Akka Http路由DSL。

我只有路径和http方法指令(post和get)。在Akka Http中,路由是 RequestContext - >未来[RouteResult]

这是我目前用户的外部dsl。

route {
  path ("service-a") {
    get
  },
  path ("service-b) {
    get
  },
  path ("service-c) {
    get,
    post
  }
}

您可以认为这是一个http代理服务。对于service-a,只有get方法可用,对于service-c,只有get和post。

在用户定义之后,我将在我的内部代码中使用此定义。

在我的内部沟通中,我为Request to Response提供服务。基本上,响应逻辑是“

for {
  services <- route
  service <- services(httprequest.path)
  availableMethods <- service
  response <- httpresponse if availableMethods(httprequest.method)
} yield response 

我如何通过免费monad实现这一目标?据我所知,我需要有两个interpreter,一个用于用户(外部dsl),另一个用于内部dsl?

此解决方案的性能如何?在Akka Http中,路由只是来自ReqeustContext to result的函数。如何使用免费monad实现?

0 个答案:

没有答案