1. ホーム
  2. rest

[解決済み] 検索のためのRESTfulなURL設計

2022-03-20 19:20:27

質問

検索をRESTfulなURLとして表現する合理的な方法を探しています。

設定です。私は2つのモデル、車とガレージを持っており、車はガレージの中にあることができます。だから、私のURLは次のようになります。

/car/xxxx
  xxx == car id
  returns car with given id

/garage/yyy
  yyy = garage id
  returns garage with given id

車は単体で存在することもあれば(それゆえ/car)、ガレージの中に存在することもあります。例えば、あるガレージにあるすべての車を表現するには、どのような方法が適切でしょうか?次のようなものです。

/garage/yyy/cars     ?

ガレージyyyとzzzの車の組合わせはどうでしょうか?

ある属性を持つ車の検索を表現するのに適した方法は何でしょうか?例えば、「4ドアの青いセダンをすべて表示する。

/car/search?color=blue&type=sedan&doors=4

それとも、/cars にすべきでしょうか?

検索("search")の使用は不適切に思えますが、何か良い方法/用語はありますか?ということでしょうか?

/cars/?color=blue&type=sedan&doors=4

検索パラメータは、PATHINFOとQUERYSTRINGのどちらに含まれるべきですか?

要するに、モデル横断的なREST urlの設計と、検索に関するガイダンスを探しているのです。

[更新】Justinの回答は気に入っていますが、彼はマルチフィールド検索のケースをカバーしていません。

/cars/color:blue/type:sedan/doors:4

といった感じでしょうか。からどうすれば

/cars/color/blue

をマルチフィールドケースに変更しますか?

どのように解決するのですか?

検索にはquerystringを使う。これは完全にRESTfulです。

/cars?color=blue&type=sedan&doors=4

通常のクエリ文字列の利点は、標準的で広く理解されていることと、form-getから生成できることです。