1. ホーム

[解決済み】@QueryParamと@PathParamの使い分けについて

2022-03-26 10:06:37

質問

ここで既に質問されていることを質問しているのではありません。 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ハンドラを書こうとしたときに、本当に面倒なことになります。