spray-routing note

本文详细探讨了Spray框架中的路由机制,包括不同代码执行时序、路由连接、测试技巧及路由指令的匹配流程。通过具体示例,阐述了如何理解和运用Spray的路由结构,以实现高效请求处理。

注意穿插在spray-routing中的代码有着不同的执行时序

//MARK只会在建构get directive时打印一次而已
val route: Route = get {
  println("MARK")
  complete("yeah")
}

//每次get请求时都会打印MAY
val route: Route = get {
  complete {
    println("MAY")
    "yeah"
  }
}

在spray中使用 ~ 来连接不同的route,当第一个route被拒绝后,会转给下面的路由.

理解spray的routing structure非常重要,而且要细心一点
a,b,c 和 e 代表的是directive
任何一个directive匹配失败都无法进入其 inner route, 花括号包起来的就是inner route,例如 a { //这里是内部路由 }

val route = a {
    b {
      c {
        ... // route 1
      } ~
      d {
        ... // route 2
      } ~
      ... // route 3
    } ~
    e {
      ... // route 4
    }
  }

首先路由a如果不能匹配,就无法进入inner route也就是 b,e
b如果匹配失败会 reject,然后e再进行匹配,e如果匹配失败也就进入所谓的empty rejections,说明你的路由无法处理这个request
如果想进入到d的内部路由,得要a,b匹配成功,然后c不匹配,转由d匹配成功

使用spray-testkit撰写测试的时候,如果REQUEST被拒绝的话,就无法得到Http response对象,这就必须借助 sealRoute 这方法把Rejections转换成Http response.

 

以下斜体字是directive
path用于对uri做完整匹配,意思就是path底下的路由无需进行任何匹配了,完整匹配的意思也就是没有未匹配的uri.

通常会使用pathPrefix来处理较长的uri, 在pathPrefix的内部可以再使用path来做更细的匹配.

转载于:https://www.cnblogs.com/jHenry/p/4301057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值