【发布时间】:2017-07-15 10:31:02
【问题描述】:
我正在编写基于 Akka-HTTP 的 REST API。由于我是 Akka 和 Scala 的新手,我不确定在我的项目中组织代码的最佳方式是什么。我将有大约。具有基本 CRUD 的 7 个不同实体。这意味着我将在 API 中有超过 25 条路由。我想根据逻辑关联的实体对路由进行分组。什么是实现这一目标的好方法?目前,我从 GitHub 上的一些可用项目中获得灵感,并将这些路线分组为特征。我有一个主要特征,其中包括一些通用内容,扩展指令并添加编组:
trait Resource extends Directives with JsonSupport{
...
}
然后我安排了其他路线,如下所示。
trait UserResource extends Resource{
def userRoutes:Route =
pathPrefix("authenticate") {
pathEndOrSingleSlash {
post {
entity(as[LoginRequest]) { request =>
...
}
}
}
}
} ~
pathPrefix("subscribe") {
pathEndOrSingleSlash {
post {
entity(as[UserSubscribeRequest]) { request =>
...
}
}
}
}
}
}
有一个类定义异常处理程序,实例化一些帮助程序并将路由放在一起:
class Routes extends UserResource with OtherResource with SomeOtherResource{
... handlers definitions ...
... helpers ...
def allRoutesUnified: Route =
handleErrors {
cors() {
pathPrefix("api") {
authenticateOAuth2("api", PasswordAuthenticator) { _ =>
//Routes defined in other traits
otherRoutes ~ someOtherRoutes
}
} ~ userRoutes
}
}
}
终于在app入口点:
object Main extends App{
... usual Akka stuff ..
val routes = new Routes ()
val router = routes.allRoutesUnified
Http().bindAndHandle(router, "localhost", 8080)
}
还有什么更好或更优雅的路线组织方式?
【问题讨论】:
-
我认为这已经是一种很好的路线组织方式了,我也是这样做的。
标签: scala architecture routes akka-http