【问题标题】:Dynamic path routing in Play for ScalaPlay for Scala 中的动态路径路由
【发布时间】:2018-08-19 16:17:56
【问题描述】:

我在routes 文件中定义了 300 个条目,如下所示:

GET /url001 MyClass.myMethod

这适用于诸如 http://localhost:9000/url001 之类的 URL

现在,我需要为这 300 个链接定义两个环境,用于生产和测试。链接如下:

http://localhost:9000/prod/url001

用于生产(参见路径中的prod

http://localhost:9000/test/url001

用于测试(参见路径中的test)。

我想在routes 中拥有一组链接,如何在 Play 中实现?我知道我可以在路径中定义一个变量,比如path/:var,但是我需要的是设置一个相对URL。

注意:一些用户可能正在使用prod,而另一些用户可能同时使用test

【问题讨论】:

  • 您需要同时拥有/test/prod 还是只是环境之间的配置问题?如果你只是在测试和生产环境之间有不同的路径,你可以使用play.http.context,比如添加play.http.context="/test" in your conf/application.conf`。在此处查看如何为每个环境使用不同的配置文件:playframework.com/documentation/2.6.x/…
  • 他们必须同时生活,一些用户可能在使用prod,而另一些用户可能同时使用test
  • 为什么不部署到不同的环境中,一个用于测试,一个用于生产。
  • 因为测试环境不会用于实际测试系统。它适用于商业智能应用程序,用户将在其中测试他们构建的查询,然后再将它们迁移到生产环境。从系统的角度来看,prodtest 都是生产环境。从用户的角度来看,prodtest 是不同的环境。
  • 你可以这样定义,对吧:GET /:environment/url001 MyClass.myMethod

标签: scala playframework playframework-2.0 playframework-2.5


【解决方案1】:

您可以使用 SIRD(字符串插值路由 DSL): https://www.playframework.com/documentation/2.6.x/ScalaSirdRouter#Binding-sird-Router

您将需要在 scala 源中描述这 30 个条目,然后在路由中执行两条记录并将它们绑定到您的 scala 自定义路由器。

自定义路由器如下所示:

package my.app

import javax.inject.Inject

import play.api.mvc._
import play.api.routing.Router.Routes
import play.api.routing.SimpleRouter
import play.api.routing.sird._

class MainRouter @Inject()(controller: ApiController)
  extends SimpleRouter
{
  override def routes: Routes = {
    case GET(p"/url001") => MyClass.myMethod001
    case GET(p"/url002") => MyClass.myMethod002
  }
}

conf/routes 看起来像:

/prod                        my.app.MainRouter
/test                        my.app.MainRouter

不过,您需要以某种方式了解应用程序内部是什么,我不知道您的想法是什么 - 会话(cookie)或令牌或......

因为测试环境不会用于实际测试系统。它适用于商业智能应用程序,用户将在其中测试他们构建的查询,然后再将它们迁移到生产环境。从系统的角度来看,prod 和 test 都是生产。从用户的角度来看,prod 和 test 是不同的环境

在这种情况下,我建议您创建两个不同的分期付款。

【讨论】:

    【解决方案2】:

    与其拥有一组会引入大量复制/粘贴代码的重复路线,不如拥有一个基于角色的逻辑。 假设设置了某种会话管理/用户识别机制,则测试用户可以拥有测试凭据,登录时将具有角色/会话属性来指示仅测试功能。 理想情况下,您将拥有不同的专用实例,因为它们看起来已经用于不同的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2011-08-14
      • 2022-01-04
      • 2016-08-31
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      相关资源
      最近更新 更多