假设我的文件中有这样的routes
文件:
GET /api/jobs/:hash controllers.Jobs.read(hash)
现在,我知道如果发出这样的请求,Play 可以将其路由到插入controllers.Jobs.read
正确的hash
参数以触发 anAction
并返回 a Result
。此外,我知道我可以通过路由routes.Jobs.read.url(hash)
生成将字符串返回给我的路径/api/jobs/${hash}
(这很棒,我一直都在使用它)。
但是我有一个不同的用例(与上面的用例不同),我想知道 Play 是否也可以帮助我。我想要做的(并且 Play 必须在内部某个地方做)是采用给定的路径,例如/api/jobs/12345
,然后将其传递给一个函数,该函数将简单地返回给我一个Option[String]
表示哈希参数(假设它是一个有效的路由)但不是调用动作。
我希望在某个地方有一个自动生成的函数,比如routeparsers.Jobs.read(url: String): Option[String]
,或者更一般地说routeparser.Jobs.read(url: String): Map[String,String]
。我查看了一些生成的代码,但没有看到任何这样的实用程序函数(至少不是我认识的那些)。
为了清楚起见,这里的问题在于超媒体 API,其中 API 的用户将向我传递请求,其中主体(在我的情况下为 JSON)通过其 URL 引用资源。我需要能够将这些 URL 转换为对实际服务器端资源的引用,为此,我需要首先确认它们是引用预期类型资源的正确格式(即它们符合模式),然后提取我可以用来识别服务器端资源的关键参数。所以关键是我没有使用这些 URL 来触发Action
,我只是使用它们来尝试识别服务器端资源。由于显而易见的原因,我感兴趣的 URL 模式将是与我的routes
文件中的 GET 请求相关联的那些。
我希望 a) 因为这对于超媒体 API 来说是非常必要的功能,并且 b) Play 必须在路由期间的某个时间点完成几乎所有这些工作,因为有一种相当简单的方法可以访问此功能。