zoukankan      html  css  js  c++  java
  • spray-routing note

    注意穿插在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来做更细的匹配.

  • 相关阅读:
    redis info详解
    redis数据类型-有序集合
    redis数据类型-集合类型
    redis数据类型-列表类型
    python——井字小游戏
    python——元组和字典学习笔记
    docker学习笔记
    中型公司网络架构拓扑与详解
    python——将图片转换为字符编码(linux版的)
    python——冒泡排序练习
  • 原文地址:https://www.cnblogs.com/jHenry/p/4301057.html
Copyright © 2011-2022 走看看