2

私のファイルに次のようなファイルがあるとしましょうroutes

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

これで、そのようなリクエストが行われた場合、Play はcontrollers.Jobs.read正しいhashパラメータを挿入して にルーティングし、 をトリガーしてActionを返すことができることを理解しましたResultroutes.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 パターンは、ファイル内の GET 要求に関連付けられたものになりroutesます。

私は、a) これはハイパーメディア API にとって非常に必要な機能であるため、b) ルーティング中のある時点で Play がこれらのほとんどすべてを行う必要があるため、この機能にアクセスするための合理的に簡単な方法があることを願っています。

4

1 に答える 1

0

この答えは少し遅れているかもしれませんが、あなたの質問につまずいたところです。

検索対象に最も近いのは、アクセスできるルーターAPIApplication.router自体です(これは 2.2 以降で文書化されていますが、2.1 でも機能する可能性があります)。

RouterオブジェクトにはメソッドhandlerForがあり、これは必要なものである必要があります (ただし、少し低レベルの方法で)。

于 2014-07-08T03:19:05.060 に答える