Java >> Java チュートリアル >  >> Java

遊ぶ!フレームワークのパス、クエリ、ルートのデフォルト パラメータの例

前回の投稿では、HelloWorld の例を使用して Play フレームワークの基本について説明しました。この例を試して、このシリーズの次のステップを待っていることを願っています。完了していない場合は、まず Play で以前の投稿を参照することをお勧めします。フレームワーク Hello World の例。 「Play フレームワークと Scala SBT プロジェクトのしくみ」についての基本的な考え方を説明します。

この投稿では、いくつかの適切な例を使用して、パス パラメータ、クエリ パラメータ、ルーティング デフォルト パラメータ、ルーティング固定値パラメータなどの Play フレームワークの基本について詳しく説明します。また、REST API を開発するためのパス パラメータとクエリ パラメータの間の最適なアプローチについても説明します。コンセプトごとに個別の SBT プロジェクトを開発して、それらをうまくプレイまたは評価できるようにします。今すぐ始めましょう。

目次

1.使用されている技術
2.パス パラメータ
2.1 パス パラメータの例
2.2 テスト パス パラメータ
3.クエリ パラメータ
3.1 クエリ パラメータの例
3.2 クエリ パラメータ エラーのシナリオ
4.パスとクエリ パラメータ
4.1 パスとクエリ パラメータのベスト プラクティス
5.ルートのデフォルト パラメータ
5.1 ルートのデフォルト パラメータの例
6.ルート固定値
6.1 ルートの固定値の例
7. Play フレームワーク ルート:デフォルト値と固定値
8.結論
9.参考文献
10.ソースコードをダウンロード

1.使用されているテクノロジー

この投稿では、次のテクノロジーを使用して Play-Scala SBT ベースのプロジェクトを開発します。

  • Scala 2.12.6
  • Play フレームワーク 2.6.13
  • SBT 1.1.5
  • IntelliJ アイデア

次の手順を検討する前に、Java 1.8 以降のバージョンと上記のソフトウェアをインストールしてみてください。次のセクションで Play Scala Web アプリケーションの開発を始めましょう。

2.パス パラメータ

パス パラメーターまたはパス変数は、データを転送し、REST リソースを一意に識別するために使用されます。 「URI パラメータ」と呼ばれることもあります。この投稿では、Parameters と Params の両方の単語を同じ意味で使用しています。

パス パラメータの構文:

:pathparam

パス パラメータを定義するには、最初に「:」(コロン) を使用し、次に「pathparam」などの変数名を使用します。たとえば、次の REST API または EndPoint を観察して、この概念を理解してください:

GET /hello/:name

こちら :name はパス パラメータです。ユーザーがこの EndPoint を呼び出したい場合、以下に示すように、その変数に値を渡す必要があります:

GET /hello/ram

こちら :name 「ram」値に割り当てられます。同様に、以下に示すように、必要に応じて複数のパス パラメータを使用できます:

GET /hello/:name/:message

次のセクションで「Play フレームワークがパスパラメータをサポートする方法」の概念をよく理解するために、1 つの例を作成してみましょう。

2.1 パス パラメータの例

このセクションでは、Path パラメーターを使用して動的データを送信する方法を調べるために、Play Framework Scala Web アプリケーションを開発します。

IntelliJ IDE と SBT ビルド ツールを使用して、このアプリケーションを開発します。 IntelliJ IDE Ultimate Edition を使用している場合は、まず IDE を使用して Play Framework Web アプリケーションを作成してください。 IntelliJ IDE CE (Community Edition) を使用している場合は、次の Lightbend の Play Framework Examples GitHub の場所から Play Scala Starter プロジェクトをダウンロードしてください:
https://github.com/playframework/play-scala-starter-example

このプロジェクトの名前を「PlayFrameworkScalaPathParamsExample」に変更し、IntelliJ IDE にインポートしてすべてのファイルを削除しました。
次に、次の手順に従って HelloWorld アプリケーションを開発してください:

    • 最初の 4 つのステップは、前回の投稿と同じです。 Playで参考にしてください!フレームワーク Hello World の例
    • 以下に示すように、「conf」フォルダの下の「routes」ファイルに新しいルーティングを追加します

ルート

## Hello Path Params Controller
GET     /hello/:name    controllers.HelloPathParamsController.name(name: String)

説明

      • エンドポイントは、次の URI を使用して識別されます:/hello/:name
      • {name} が含まれています パス パラメータとして
      • ユーザーが {name} の代わりに何らかの値を使用してこのエンドポイントを呼び出したとき 以下に示すパス パラメータ:
GET     /hello/ram    

この「ram」値は HelloPathParamsController.name(name: String) に渡されます 関数.

    • Scala ビュー テンプレートの定義 name.scala.html 次のコンテンツを含む「views」フォルダーの下:

name.scala.html

@(name: String)
<h1>Play Framework + Scala Example</h1>
<h2>Hello @name</h2>
    • HelloPathParamsController を作成する name() で 以下に示すように、「コントローラー」フォルダーの下:

HelloPathParamsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloPathParamsController @Inject() extends InjectedController {

  def name(name: String) = Action {
    Ok(views.html.name(name))
  }

}

初期のアプリケーション コンポーネントの開発に成功しました。次のセクションでテストします。

注: Play/Scala/SBT ベースのプロジェクト構造を理解したい場合は、Play での以前の投稿を参照してください。フレームワーク Hello World の例。

2.2 テスト パス パラメータ

このセクションでは、Play Scala ベースのアプリケーションを起動して実行し、テストします。

    • sbt コマンドを使用してアプリケーションを起動および実行するには
$cd PlayFrameworkScalaPathParamsExample
$sbt run
    • http://localhost:9000/hello/ram にアクセス 以下に示すように Web ブラウザから URL を取得し、結果を確認します

Play Scala パス パラメータを Web ブラウザでテスト

    • http://localhost:9000/hello/ram にアクセス 以下に示すように POSTMAN REST クライアントから url を取得し、結果を確認します

REST クライアントで Play Scala パス パラメータをテストする

うわーすごい!パス パラメータをテストする Play + Scala アプリケーションの開発とテストに成功しました。ここで、Path Params についてさらにいくつかのことを学びます。

    • Scala ビュー テンプレートの開発 age.scala.html 次のコンテンツを含む「views」フォルダーの下:

age.scala.html

@(age: Int)
<h1>Play Framework + Scala Example</h1>
<h2>Hello, you are @age years old.</h2>
    • 別の機能を開発する age() 私たちの HelloPathParamsController 以下に示すように、「コントローラー」フォルダーの下に:

HelloPathParamsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloPathParamsController @Inject() extends InjectedController {

  // Other Code
  def age(age: Int) = Action {
    Ok(views.html.age(age))
  }

}
    • 以下に示すように、「routes」ファイルに新しいルートを追加します:

ルート

## Hello Path Params Controller
GET  /hello/:name  controllers.HelloPathParamsController.name(name: String)
GET  /hello/:age   controllers.HelloPathParamsController.age(age: Int)

説明
上記の 2 つのエンドポイントから次のことがわかります。

      • どちらのエンドポイントにも HTTP リクエスト メソッドとして「GET」があります
      • 両方のエンドポイントに異なるパス パラメータがあります:最初のエンドポイントは {name}、2 番目のエンドポイントは {age}
      • 両方のエンドポイントが 2 つの異なる関数を参照しています name()age() HelloPathParamsController から
    • アプリケーションが稼働していることを確認してください
    • http://localhost:9000/hello/35 にアクセスすると url を Web ブラウザから取得すると、次の結果が表示されます

Scala Path Params のテストプレイ – Web ブラウザを使ってみる

はい、/hello/{name} と同じ結果が表示されます 終点。 age.scala.html のとおり 、次の出力が必要です:

Play Framework + Scala Example
Hello, you are 35 years old.

これらの 2 つのエンドポイントの問題はなぜですか?両方の URL に同じテキストが表示されるのはなぜですか?これらのことを今すぐ調べてみましょう。

  • まず覚えておく必要があるのは、Play フレームワークでは、各パス パラメータの型が String であることです。
  • /hello/35 を区別しようとしていますが、 URI のパス パラメータ「35」は Int として、Play Framework はそれを文字列のみに変換します
  • だからこそ、/hello/ram と呼ぶかどうか または /hello/35 、どちらも同じ「GET /hello/{name}」エンドポイントを呼び出しています
  • 2 人とも HelloPathParamsController.name() に電話をかけています 関数

この問題を解決するには?これらのエンドポイントが期待どおりに機能するように設計するにはどうすればよいですか? REST API の開発では、API やエンドポイントの URI を独自に設計することが非常に重要です。これらは、リソースを一意に参照する必要があるため、RESTful Web サービスまたは REST API 開発で非常に重要な役割を果たします。 「ルート」ファイルで以下に示すように、これら 2 つのエンドポイントを異なる方法で再設計してみましょう。

ルート

## Hello Path Params Controller
GET    /hello/:name       controllers.HelloPathParamsController.name(name: String)
#GET   /hello/:age        controllers.HelloPathParamsController.age(age: Int)
GET    /hello/age/:age    controllers.HelloPathParamsController.age(age: Int)

/hello/age/:age のような URI を指定しました /hello/:name で区別する
Controller に変更はありません。上に示したように、「#」を使用して、「route」ファイル内の未使用のテキストにコメントを付けることができます。

そうでない場合は、サーバーを起動して実行し、新しいエンドポイントにアクセスして結果を確認します。

Scala Path Params のテストプレイ – ブラウザで熟成

REST API を設計および開発する際に、0 個または 1 個以上のパス パラメーターを使用できます。これまで、単一のパス パラメータの使用方法について説明してきました。このセクションでは、複数のパス パラメーターを使用する方法について開発し、検討しましょう。

2 つの例を作成しました。1 つは名前用、もう 1 つは年齢の詳細用です。ここで、両方を 1 つのエンドポイントに結合します。

    • 以下に示すように、新しいエンドポイントを「routes」ファイルに追加します:

ルート

## Hello Path Params Controller
GET    /hello/:name         controllers.HelloPathParamsController.name(name: String)
#GET   /hello/:age          controllers.HelloPathParamsController.age(age: Int)
GET    /hello/age/:age      controllers.HelloPathParamsController.age(age: Int)
GET    /hello/:name/:age    controllers.HelloPathParamsController.nameAge(name:String, age: Int)

ここでは、新しいエンドポイント /hello/:name/:age で 2 つのパス パラメータを使用しています。 :1 つは名前を使用してユーザーに挨拶することで、もう 1 つはユーザーの年齢の詳細を表示することです。

URI の 2 つのパス パラメータをアクションに 2 つのパラメータとしてマッピングしました:nameAge(name:String, age: Int) .最初のパス パラメータは name にマッピングされます 関数の引数と 2 番目のパラメーターは age にマップされます 関数の引数.

    • 新しい関数 nameAge を追加 私たちの HelloPathParamsController に 以下に示すように:

HelloPathParamsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloPathParamsController @Inject() extends InjectedController {

  def name(name: String) = Action {
    Ok(views.html.name(name))
  }

  def age(age: Int) = Action {
    Ok(views.html.age(age))
  }

  def nameAge(name:String, age: Int) = Action {
    Ok(views.html.nameAge(name, age))
  }
}

これが最終的な HelloPathParamsController です コントローラーの実装。

    • Scala ビュー テンプレートの開発 nameAge.scala.html 次のコンテンツを含む「views」フォルダーの下:

nameAge.scala.html

@(name: String, age: Int)
<h1>Play Framework + Scala Example</h1>
<h2>Hello @name, you are @age years old.</h2>

ここでは、nameAge.scala.html template は name と age.

    の 2 つのパラメータを取ります。
    • アプリケーションが稼働していることを確認してください
    • http://localhost:9000/hello/ram/35 にアクセスすると url を Web ブラウザから取得すると、次の結果が表示されます

ブラウザで Scala の複数のパス パラメータをテストする

Play Framework の Path Parameters の概念については以上です。次に、次の概念であるクエリ パラメータに進みます。

3.クエリ パラメータ

パス パラメータと同様に、Play Framework はクエリ パラメータをサポートしています。パス パラメータとクエリ パラメータの両方を使用して、クライアントからサーバーに動的データを送信します。

クエリ パラメータは、フィルタリング、並べ替え、検索、グループ化など、REST リソースでいくつかの追加アクティビティを実行するのに役立ちます。クエリ パラメータは、URL で「キー =値」のペアとして定義できます。アンパサンド (&) で区切ります。

GET /hello?key=value

疑問符 (?) を使用して、URI とクエリ パラメータを区切ります。ここで、URI は「/hello」、クエリ パラメータは「key=value」です。次の例を見てみましょう:

GET /hello?name=ram

ゼロまたは 1 つ以上のクエリ パラメータを使用して REST エンドポイントを設計できます。複数のパラメータは、次のようにアンパサンド (&) で区切られます:

GET /hello?key1=value1&key2=value2

次のセクションでは、これらの概念を 1 つずつ調べるために、いくつかの例を作成します。

3.1 クエリ パラメータの例

このセクションでは、Play/Scala/SBT プロジェクトを開発して、クライアントとサーバー間で動的データを送信する際にクエリ パラメータがどのように機能するかを調べます。

IntelliJ IDE と SBT ビルド ツールを使用して、このアプリケーションを開発します。 IntelliJ IDE Ultimate Edition を使用している場合は、まず IDE を使用して Play Framework Web アプリケーションを作成してください。 IntelliJ IDE CE (Community Edition) を使用している場合は、次の Lightbend の Play Framework Examples GitHub の場所から Play Scala Starter プロジェクトをダウンロードしてください:
https://github.com/playframework/play-scala-starter-example

このプロジェクトの名前を「PlayFrameworkScalaQueryParamsExample」に変更し、IntelliJ IDE にインポートしてすべてのファイルを削除しました。
次に、次の手順に従って HelloWorld アプリケーションを開発してください。

    • 最初の 4 つのステップは、前回の投稿と同じです。 Playで参考にしてください!フレームワーク Hello World の例
    • 以下に示すように、新しいエンドポイントを「routes」ファイルに追加します:

ルート

## Hello Query Params Controller
GET   /hello   controllers.HelloQueryParamsController.hello(name: String, age: Int)

上記のエンドポイントを見ると、URI には「/hello」だけが含まれています。 URI からすべてを削除しただけで、データを渡すためのパス パラメータはありません。では、そのデータをクライアントからサーバーに送信するにはどうすればよいでしょうか?このコントローラーがそのデータをどのように受け取り、このリクエストを処理するか?

前のセクションでクエリ パラメータの構文について説明したように、必要なデータを次のように送信できます。

/hello?name=Ram&age=35

ここでは、コントローラーがこの要求を処理できるように、クエリ パラメーターを使用して両方の必要な値を渡しています。

    • HelloQueryParamsController を作成 以下に示すように、「コントローラー」パッケージの下にあるコントローラー:

HelloQueryParamsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloQueryParamsController @Inject() extends InjectedController {

}
    • hello を追加 HelloQueryParamsController への機能 以下に示すように:

HelloQueryParamsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloQueryParamsController @Inject() extends InjectedController {

  def hello(name: String, age:Int) = Action {
    Ok(views.html.hello(name, age))
  }

}
    • Scala ビュー テンプレートの開発 hello.scala.html 次のコンテンツを含む「views」フォルダーの下:

hello.scala.html

@(name: String, age: Int)
<h1>Play Framework + Scala Example</h1>
<h2>Hello @name, you are @age years old.</h2>

ここでは、hello.scala.html template は name と age.

    の 2 つのパラメータを取ります。
    • アプリケーションが稼働していることを確認してください
    • http://localhost:9000/hello?name=ram&age=35 にアクセスすると url を Web ブラウザから取得すると、次の結果が表示されます

ブラウザで Play Scala クエリ パラメータをテストする

このように、任意の数のクエリ パラメータを使用して、動的データをクライアントからサーバーに渡すことができます。

3.2 クエリ パラメータ エラーのシナリオ

このセクションでは、クエリ パラメータに関連するいくつかの重要なエラー シナリオについて説明します。場合によっては、経験の浅いユーザーや経験の浅いユーザーがこれらの間違いを犯すことがあります。

ユーザーがこれらのクエリ パラメータを送信するのを忘れたり見逃したりした場合、または少数のパラメータのみを送信した場合、次のエラー メッセージが表示されます。

ケース 1: 名前と年齢の両方のパラメーターがありません

http://localhost:9000/hello のような URL

Play Scala Missing Query パラメータをブラウザでテスト

ケース 2: name パラメーターのみが欠落しています
http://localhost:9000/hello?age=35 のような URL 、次のエラー メッセージが表示されます

Bad Request
For request 'GET /hello?age=35' [Missing parameter: name]

ケース 3: age パラメーターのみが欠落しています
http://localhost:9000/hello?name=ram のような URL 、次のエラー メッセージが表示されます

Bad Request
For request 'GET /hello?name=ram' [Missing parameter: age]

4.パスとクエリ パラメータ

最後の 2 つのセクションでは、Play Framework でサポートされている 2 つの重要な概念について説明しました:パス パラメータとクエリ パラメータです。いくつかの例を作成しました。このセクションでは、両方の概念を比較し、どちらが REST API (RESTful Web サービス) を開発するのに適しているか、または最適であるかを判断します。

パス パラメータとクエリ パラメータの間に次の違いがあります。

    • パス パラメータは、主に REST リソースを一意に識別するのに役立ちます。クエリ パラメータは、フィルタリング、グループ化、並べ替えなどの追加アクティビティを行うのに役立ちます。
    • パス パラメータの構文は非常に単純ですが、クエリ パラメータの構文は少しぎこちなく、エラーが発生しやすいです。

パス パラメータの構文:

GET /hello/:name/:age

クエリ パラメータの構文:

GET /hello?name=ram&age=35
  • パス パラメータとクエリ パラメータは、ユーザーおよびすべての人に公開されるため、安全な値または機密値であってはなりません。

注: 最適な REST API を設計するには、次の 2 つのルールに従うことをお勧めします:

  • パス パラメータは、特定のリソースを一意に識別するために使用されます
  • クエリ パラメータは、リソースのフィルタリング、並べ替え、グループ化などに使用されます

4.1 パスとクエリ パラメータのベスト プラクティス

パスとクエリ パラメータを使用して REST API を設計する場合は、次のベスト プラクティスに従うことを強くお勧めします:

    • 可能であれば、両方のパラメータに単一の単語名を使用することをお勧めします
    • どちらのパラメータ名も小文字にする必要があります
    • 複数の単語名を使用する場合は、「月-年」のようにハイフン (-) で区切ることをお勧めします
GET /emp/:month-year
  • 意味のある名前を使う

5.ルートのデフォルト パラメータ

Play フレームワークは、ルートの「デフォルト パラメーター」をサポートします。 Params がオプションの場合もあります。ユーザーはそれらを送信して、クライアントからサーバーに動的データを送信するか、デフォルト値を使用できます。

デフォルト値を Route Parameters に定義すると、アプリケーションはユーザーがそのデータを送信しない場合にのみそれらを使用します。ただし、ユーザーはこれらのデフォルト値を上書きできます。

ルートのデフォルト パラメータの構文:

parameName: paramType ?= defaultValue

ここでは、「?=」(疑問符の後に代入) 記号を使用して、Route パラメーターにデフォルト値を割り当てる必要があります。

この構文をよく理解するには、次の例を参照してください。

name: String ?= "User"

Play フレームワークのルーティングでは、ゼロ、1 つ、または複数のデフォルト値を使用できます。

それでもはっきりしない場合でも、心配しないでください。次のセクションでそれを理解するための簡単な例を 1 つ作成します。

5.1 ルートのデフォルト パラメータの例

このセクションでは、Play/Scala/SBT の例を 1 つ作成して、「Play フレームワークがデフォルト パラメータをどのようにサポートしているか」を理解します。コンセプトがとても良い。

IntelliJ IDE と SBT ビルド ツールを使用して、このアプリケーションを開発します。 IntelliJ IDE Ultimate Edition を使用している場合は、まず IDE を使用して Play Framework Web アプリケーションを作成してください。 IntelliJ IDE CE (Community Edition) を使用している場合は、次の Lightbend の Play Framework Examples GitHub の場所から Play Scala Starter プロジェクトをダウンロードしてください:
https://github.com/playframework/play-scala-starter-example

このプロジェクトの名前を「PlayFrameworkScalaRouteDefaultParamsExample」に変更し、IntelliJ IDE にインポートしてすべてのファイルを削除しました。
次に、次の手順に従って HelloWorld アプリケーションを開発してください:

    • 最初の 4 つのステップは、前回の投稿と同じです。 Playで参考にしてください!フレームワーク Hello World の例
    • 以下に示すように、新しいエンドポイントを「routes」ファイルに追加します:

ルート

## Hello Route Default values Controller
GET   /hello   controllers.HelloRouteDefaultsController.hello(name: String ?= "User", age: Int ?= 35)
    • HelloRouteDefaultsController を作成 以下に示すように、「コントローラー」パッケージの下にあるコントローラー:

HelloRouteDefaultsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloRouteDefaultsController @Inject() extends InjectedController {
}
    • hello を追加 HelloRouteDefaultsController への機能 以下に示すように:

HelloRouteDefaultsController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloRouteDefaultsController @Inject() extends InjectedController {

  def hello(name: String, age: Int) = Action {
    Ok(views.html.hello(name, age))
  }

}
    • Scala ビュー テンプレートの開発 hello.scala.html 次のコンテンツを含む「views」フォルダーの下:

hello.scala.html

@(name: String, age: Int)
<h1>Play Framework + Scala Example</h1>
<h2>Hello @name, you are @age years old.</h2>

ここでは、hello.scala.html template は name と age.

    の 2 つのパラメータを取ります。
    • アプリケーションが稼働していることを確認してください
    • http://localhost:9000/hello にアクセスすると url を Web ブラウザから取得すると、次の結果が表示されます

ブラウザで Scala ルートのデフォルト パラメータをテストプレイ

    • http://localhost:9000/hello?name=ram&age=35 にアクセスしたとき url を Web ブラウザから取得すると、次の結果が表示されます

ブラウザを使用して、与えられた値で Scala ルートのデフォルト パラメータをテストします

つまり、ルートにデフォルト値がある場合、それらをそのまま使用するか、必要に応じてオーバーライドできます。

Play Framework がサポートする Route Default Parameters については以上です。

6.ルート固定値

前のセクションで説明した Route Default Params と同様に、Play Framework は Route パラメータの「固定値」をサポートしています。場合によっては、ユーザーがクライアントからサーバーにデータを送信できないようにしたり、ルート パラメーターに固定値を割り当てたりする必要があります。

ルート固定値の構文:

paramName: paramType = fixedValue

Route Default 値とは異なり、ここでは「=」(代入) 演算子を使用して Rout パラメータに固定値を設定する必要があります。この構文をよく理解するには、次の例を参照してください:

name: String = "ram"

Play フレームワークのルーティングでは、ゼロ、1 つ、または複数の固定値を使用できます。

それでもはっきりしない場合でも、心配しないでください。次のセクションで、それを理解するために役立つ例を 1 つ作成します。

6.1 ルート固定値の例

この概念をよく理解するために、1 つの例を作成してみましょう。

IntelliJ IDE と SBT ビルド ツールを使用して、このアプリケーションを開発します。 IntelliJ IDE Ultimate Edition を使用している場合は、まず IDE を使用して Play Framework Web アプリケーションを作成してください。 IntelliJ IDE CE (Community Edition) を使用している場合は、次の Lightbend の Play Framework Examples GitHub の場所から Play Scala Starter プロジェクトをダウンロードしてください:
https://github.com/playframework/play-scala-starter-example

このプロジェクトの名前を「 PlayFrameworkScalaRouteFixedValuesExample」に変更し、IntelliJ IDE にインポートしてすべてのファイルを削除しました。
次に、次の手順に従って HelloWorld アプリケーションを開発してください:

    • 最初の 4 つのステップは、前回の投稿と同じです。 Playで参考にしてください!フレームワーク Hello World の例
    • 以下に示すように、新しいエンドポイントを「routes」ファイルに追加します:

ルート

## Hello Route Fixed values Controller
GET   /hello     controllers.HelloRouteFixedValuesController.hello(name: String = "ram", age: Int = 35)
    • HelloRouteDefaultsController を作成 以下に示すように、「コントローラー」パッケージの下にあるコントローラー:

HelloRouteFixedValuesController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloRouteFixedValuesController @Inject() extends InjectedController {
}
    • hello を追加 HelloRouteDefaultsController への機能 以下に示すように:

HelloRouteFixedValuesController.scala

package controllers

import javax.inject.Inject
import play.api.mvc.InjectedController

class HelloRouteFixedValuesController @Inject() extends InjectedController {

  def hello(name: String, age: Int) = Action {
    Ok(views.html.hello(name, age))
  }

}
    • Scala ビュー テンプレートの開発 hello.scala.html 次のコンテンツを含む「views」フォルダーの下:

hello.scala.html

@(name: String, age: Int)
<h1>Play Framework + Scala Example</h1>
<h2>Hello @name, you are @age years old.</h2>

ここでは、hello.scala.html template は name と age.

    の 2 つのパラメータを取ります。
    • アプリケーションが稼働していることを確認してください
    • http://localhost:9000/hello にアクセスするとき url を Web ブラウザから取得すると、次の結果が表示されます

Scala のテストプレイ – ブラウザーで固定値をルーティングする

    • http://localhost:9000/hello?name=scala&age=51 にアクセスするとき url を Web ブラウザから取得すると、次の結果が表示されます

Scala のテストプレイ – 与えられたデータで固定値をルーティング

つまり、ルートに固定値がある場合は、そのまま使用する必要があります。それらを上書きすることはできません。

Play フレームワークの Route Fixed Values パラメータについては以上です。

7. Play フレームワーク ルート:デフォルト値と固定値

最後の 2 つのセクションでは、Play Framework Routes の 2 つの重要な機能であるデフォルト値と固定値について説明しました。ここでこれら 2 つの概念を比較してみましょう:

    • 構文: Route Default 値と Fixed 値の構文は異なります。

ルートのデフォルト値の構文:

name: String ?= "ram"

ルート固定値の構文:

name: String = "ram"
  • オーバーライド: Route Fixed 値は固定されており、変更できないため、必要に応じて Route Default 値をオーバーライドできます。
  • 使い方: 固定値がめったに使用されないほとんどのプロジェクトで、ルートのデフォルト値を頻繁に使用します。

8.結論

この投稿では、主に Play/Scala 開発者に役立つ 4 つの重要な概念について説明しました:パスとクエリ パラメータ、ルートのデフォルト値と固定値です。

パス パラメータは非常に重要で有用な概念であり、ほとんどのプロジェクトで REST API を設計する際に最も頻繁に使用される概念です。それらは非常に単純な構文を持っています。 Query Prams を使用して何かを行うこともできますが、構文が扱いにくいため、すべてのシナリオで使用することはお勧めしません。

Path Params を使用して REST リソースを識別できますが、Query Params は REST リソースのソート、フィルタリング、グループ化などに役立ちます。

Play フレームワークは、開発プロセスを容易にするために、ルートのデフォルト値と固定値の両方をサポートしています。 Route Default 値は最も頻繁に使用される概念であり、Route Fixed 値はめったに使用されない概念です。

今後の投稿で、いくつかのより便利な Play フレームワークの概念について説明します。ご期待ください。

9.参照

Play フレームワーク、Scala 言語、SBT ツールについて詳しく知りたい場合は、次の重要な Web サイトを参照してください。

  • Play フレームワークのウェブサイト:https://www.playframework.com
  • Play フレームワーク Scala API:https://www.playframework.com/documentation/2.6.x/api/scala/index.html#package
  • Scala 言語:https://www.scala-lang.org
  • Scala API:https://www.scala-lang.org/api/2.12.6
  • Scala SBT ツール:https://www.scala-sbt.org

10.ソースコードをダウンロード

それは遊びでした!フレームワーク + Scala:パス パラメーター、クエリ パラメーター、ルーティングの既定値と固定値 Web アプリケーションの例 Tutorial.Play フレームワーク Scala

Java タグ