【发布时间】:2017-01-31 11:11:31
【问题描述】:
我使用AKKA-HTTP、spray-json 和Slick 在scala 中创建了一个REST api。对于路由授权,我使用了oauth2。
DAO 检索数据(使用普通 SQL):
def getAllNotes: Future[Seq[UserEntity]] = {
implicit val getUserResult = GetResult(r => UserEntity(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<))
query(s"select id, email, password,created_at, updated_at, deleted_at from users", getUserResult)
}
DAO 检索数据(Slick Table):
def getAll(): Future[Seq[A]] = {
db.run(tableQ.result)
}
下面是路由部分:
val route: Route = pathPrefix("auth") {
get {
path("tests") {
complete(userDao.getAll.map(u => u.toList))
} ~
path("test") {
complete(userDao.getAllNotes.map(u => u.toList))
} ~
path("testUsers") {
baseApi(userDao.getAllNotes)
} ~
path("users") {
baseApi(userDao.getAll())
}
}
}
implicit def baseApi(f: ToResponseMarshallable): Route = {
authenticateOAuth2Async[AuthInfo[OauthAccount]]("realm", oauth2Authenticator) { auth =>
pathEndOrSingleSlash {
complete(f)
}
}
}
从功能上讲,所有路由都按预期工作,但是当使用 OAUTH2 和 Slick Tables 获取数据时,性能似乎有所下降。
以上路线的各自结果:
1. "users" => 10 request per second: OAUTH2: YES, Slick Table: YES
2. "testUsers" => 17 request per second: OAUTH2: YES, Slick Table: NO
3. "tests" => 500 request per second: OAUTH2: NO, Slick Table: YES
4. "test" => 5593 request per second: OAUTH2: NO, Slick Table: NO
我的问题
如何使用 OAUTH2 和 Slick Table 优化 REST 请求?
如果我在所有情况下都使用 PLAIN SQL 而不是 Slick 表和联接,这会是一种好习惯吗?
【问题讨论】:
标签: scala rest akka-http slick-3.0