[解決済み】@QueryParamと@PathParamの使い分けについて
質問
ここで既に質問されていることを質問しているのではありません。 PathParamと@QueryParamの違いは何ですか?
これは、ベストプラクティスや規約に関する質問です。
どのような場合に
@PathParam
対
@QueryParam
.
判断は、情報パターンを区別するために、この2つを使い分けているのではないかと考えられること。以下、私のLTPO - less than perfect observationを図解してみよう。
PathParamの使用は、情報ツリーの枝にうまく収まるような情報カテゴリに予約することができます。PathParamは、エンティティクラスの階層にドリルダウンするために使用することができます。
一方、QueryParamは、あるクラスのインスタンスを見つけるための属性を指定するために予約することができます。
例えば
-
/Vehicle/Car?registration=123
-
/House/Colonial?region=newengland
/category?instance
@GET
@Path("/employee/{dept}")
Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ;
対
/category/instance
@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;
対
?category+instance
@GET
@Path("/employee")
Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ;
標準的なやり方はないと思うのですが。あるのでしょうか?ただ、上で例示したようなPathParamとQueryParamの使い分けをしている人の話を聞いてみたいです。また、その理由も聞いてみたいです。
どのように解決するのか?
RESTはそのような標準ではないかもしれませんが、一般的なRESTのドキュメントやブログ記事を読むことで、API URLを構成する良い方法のガイドラインを得ることができます。ほとんどのレストAPIは、リソース名とリソースIDのみをパスに持つ傾向があります。例えば、以下のようなものです。
/departments/{dept}/employees/{id}
REST API の中には、フィルタリングやページネーション、ソートのためにクエリ文字列を使用するものがありますが、REST は厳密な標準ではないので、以下のような REST API をチェックすることをお勧めします。 ギズーブ と スタックオーバーフロー をクリックし、あなたの用途に合うものを探してみてください。
必須パラメータはパスに、オプションのパラメータはクエリ文字列パラメータにすることをお勧めします。オプションのパラメータをパスに置くと、異なる組み合わせにマッチするURLハンドラを書こうとしたときに、本当に面倒なことになります。
関連
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] init-paramとcontext-param
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] Javaでdoubleをfloatに変換する