Route Concatenation 的身份元素或中性元素是什么?
What is the identity element or neutral element for Route Concatenation?
波浪号 ~
用于连接 Akka HTTP 中的 Route
。可能还有其他应用程序,但我的动机是想使用 ~
运算符将一组路由转换为单个路由。
为此,使用 "zero" 元素代替下面 foldLeft
示例中的 ???
会很有用:
val routes: Seq[Route] = ...
val route = routes.foldLeft[Route](???)(_ ~ _)
所需的零将是 ~
的标识元素,这将是一条什么都不做的路由,只是将请求传递给串联中的下一条路由。但是,这如何用代码表示?
我找到了 pass
和 Directive.Empty
指令,但它们都包装了一个内部路由,并且它们本身不能成为路由。它们是可以包装路由的指令,而我需要一个 Route
本身。
只要路由拒绝请求,级联链中的路由就会继续处理。如果第一条路线拒绝请求,则尝试下一条。这一直持续到没有更多路由或路由接受请求(结束串联链)。
鉴于此,您识别的身份路由需要拒绝每个请求。 The built-in RouteDirective reject
正是这样做的。您的代码变为:
val routes: Seq[Route] = ...
routes.foldLeft[Route](reject)(_ ~ _)
注意:Akka HTTP 已提供您的特定用例。您无需自己编写 fold
,只需使用 built-in RouteConcatenation.concat
,如下所示:
val routes: Seq[Route] = ...
val route = concat(routes: _*)
波浪号 ~
用于连接 Akka HTTP 中的 Route
。可能还有其他应用程序,但我的动机是想使用 ~
运算符将一组路由转换为单个路由。
为此,使用 "zero" 元素代替下面 foldLeft
示例中的 ???
会很有用:
val routes: Seq[Route] = ...
val route = routes.foldLeft[Route](???)(_ ~ _)
所需的零将是 ~
的标识元素,这将是一条什么都不做的路由,只是将请求传递给串联中的下一条路由。但是,这如何用代码表示?
我找到了 pass
和 Directive.Empty
指令,但它们都包装了一个内部路由,并且它们本身不能成为路由。它们是可以包装路由的指令,而我需要一个 Route
本身。
只要路由拒绝请求,级联链中的路由就会继续处理。如果第一条路线拒绝请求,则尝试下一条。这一直持续到没有更多路由或路由接受请求(结束串联链)。
鉴于此,您识别的身份路由需要拒绝每个请求。 The built-in RouteDirective reject
正是这样做的。您的代码变为:
val routes: Seq[Route] = ...
routes.foldLeft[Route](reject)(_ ~ _)
注意:Akka HTTP 已提供您的特定用例。您无需自己编写 fold
,只需使用 built-in RouteConcatenation.concat
,如下所示:
val routes: Seq[Route] = ...
val route = concat(routes: _*)