当我使用 Spray.io 开发 RESTful API 时,我应该如何构建我的应用程序?
我已经看到了这个答案 https://stackoverflow.com/a/14653989/396002关于如何拆分 Spray 应用程序,但我对此不满意,因为它似乎没有使用“每个请求一个参与者”的方法。我可以根据路径将来自根 Actor 的请求转发到应用程序中的其他 Actor,并在这些 Actor 内部定义相关路由吗?
Thanks
您当然可以根据路径或其他任何方式将请求从一个参与者转发到另一个参与者。查看我的示例项目(这是示例项目的叉子的叉子):
https://github.com/gangstead/spray-moviedb/blob/master/src/main/scala/com/example/routes/ApiRouter.scala https://github.com/gangstead/spray-moviedb/blob/master/src/main/scala/com/example/routes/ApiRouter.scala
主要参与者的相关代码接收所有请求并将它们路由到处理每个服务的其他参与者:
def receive = runRoute {
compressResponseIfRequested(){
alwaysCache(simpleCache) {
pathPrefix("movies") { ctx => asb.moviesRoute ! ctx } ~
pathPrefix("people") { ctx => asb.peopleRoute ! ctx }
} ~
pathPrefix("login") { ctx => asb.loginRoute ! ctx } ~
pathPrefix("account") { ctx => asb.accountRoute ! ctx }
}
}
例如电影路线:
def receive = runRoute {
get {
parameters('query, 'page ? 1).as(TitleSearchQuery) { query =>
val titleSearchResults = ms.getTitleSearchResults(query)
complete(titleSearchResults)
}~
path(LongNumber) { movieId =>
val movie = ms.getMovie(movieId)
complete(movie)
}~
path(LongNumber / "cast") { movieId =>
val movieCast = ms.getMovieCast(movieId)
complete(movieCast)
}~
path(LongNumber / "trailers") { movieId =>
val trailers = ms.getTrailers(movieId)
complete(trailers)
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)