私のファイルに次のようなファイルがあるとしましょう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]
。アクションを呼び出します。
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 がこれらのほとんどすべてを行う必要があるため、この機能にアクセスするための合理的に簡単な方法があることを願っています。