播放,路由解析和超媒体API

时间:2013-09-11 14:29:52

标签: scala playframework-2.1

假设我的routes文件中有这样的文件:

 GET     /api/jobs/:hash                 controllers.Jobs.read(hash)

现在,我了解如果发出此类请求,Play可以将其路由到controllers.Jobs.read并插入正确的hash参数以触发Action并返回Result }。此外,我知道我可以路由routes.Jobs.read.url(hash)来生成路径,让我回到字符串/api/jobs/${hash}(这很好,我一直使用它。)

但我有一个不同的用例(来自上面的那些),我想知道Play是否也可以帮助我。我想做的事情(Play必须在内部做某事)是采取一个给定的路径,例如/api/jobs/12345然后将其传递给一个函数,该函数只会向我返回一个表示哈希参数的Option[String](假设它是一个有效路径),但会调用该行为。< / p>

我希望某个地方有一个自动生成的函数,如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必须完成所有这些操作,以便有一种相当直接的方式来访问此功能。 / p>

1 个答案:

答案 0 :(得分:0)

这个答案可能有点晚了,但我只是偶然发现了你的问题。

与搜索内容最接近的是路由器API本身,您可以通过Application.router访问它(这是自2.2以来的记录,但它也可以在2.1中使用)。

Router对象有一个handlerFor方法,应该是您想要的方法(尽管方式略低)。