Spray:查询作为URI或参数的一部分

时间:2015-12-22 14:13:26

标签: scala rest spray

我尝试允许API使用两种类型:提供查询作为URI的一部分或将其作为参数提供。

端点

/search/myQuery相当于/search?query=myQuery

两者都应该返回相同的结果。

代码

这是我目前正在使用的实施方案。然而,感觉有点复兴,因为很多代码需要重复。

path("search") {
  parameter('query) { term =>
    get {
     complete { performSearch(term) }
    }
} ~
path("search" / Segment) { searchTerm =>
  get {
    complete { performSearch(term) }
  }
}

问题

在Spray中有更多的干嘛方式来表达这种行为吗?

1 个答案:

答案 0 :(得分:3)

喷雾具有非常强大的组合,因此它是非常简单的任务。

val pathOrParameter = path(Segment) | parameter('search)

path("search") {
  pathOrParameter { term =>
    get {
     complete { performSearch(term) }
    }
  }
}

除此之外,您还可以进一步组合:

val searchApi = get & path("search") & (path(Segment) | parameter('search))

searchApi { term =>
  complete { performSearch(term) }
}

Custom Directive页面解释了喷雾详细撰写指令的能力。