我尝试允许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中有更多的干嘛方式来表达这种行为吗?
答案 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页面解释了喷雾详细撰写指令的能力。