当前位置:  开发笔记 > 编程语言 > 正文

如何使用Spray.io构建RESTful API?

如何解决《如何使用Spray.io构建RESTfulAPI?》经验,为你挑选了1个好方法。

当我使用Spray.io开发RESTful API时,我应该如何构建我的应用程序?

我已经看到了关于如何拆分Spray应用程序的这个答案,但我对此并不满意,因为它似乎没有使用"每个请求的一个actor"方法.我可以根据路径将根执行者的请求转发给我的应用程序中的其他actor,并在这些actor中定义相关的路由吗?

谢谢



1> Gangstead..:

您当然可以根据路径或其他任何方式将请求从一个actor转发到另一个actor.看看我的示例项目(这是一个示例项目的fork的分支):

https://github.com/gangstead/spray-moviedb/blob/master/src/main/scala/com/example/routes/ApiRouter.scala

来自主actor的相关代码,它接收所有请求并将它们路由到处理每个服务的其他actor:

  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)     
      }        
    }
  }  


仅仅因为依赖注入一般是好的原因.它允许您注入模拟对象以单独测试图层,如果需要,可以换出图层.
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有