これは技術的な質問よりも概念的です。巨大なレンタカーを扱うためのREST APIがあるとします。RESTful APIのパラメータに有効な値のリストを提供するにはどうすればよいですか?
APIはそのような非常に標準とコヒーレント(でも物議場合)の方法でビジネスエンティティ/リソースの周りにモデル化されています
/cars/1234
- 詳細なデータを特定の車/clients/5678
について - 詳細なデータ車のリストとそのURIを/clients
- - 特定のクライアント/cars
に関するクライアントのリスト
しかし、艦隊は巨大で、すべての車のリストはそれほど有用ではありません。私はむしろのように、それがフィルタリングだろう:正しく「type
」パラメータを使用するために
GET /cars?type=minivan
、私は「そのような「ミニバン」、「コンバーチブル」、「ステーションワゴン」として有効な値のリストを持っている必要がありますハッチバック "、"セダン "などです。そこには多くの種類の車はありませんが、このリストはAPIのSwagger定義のenumには大きすぎるものとしましょう。
だから、REST APIがそのようなクエリパラメータに有効な値のリストを提供するために最も一貫して自然な方法はありますか?
/cars/types
のような従属リソースとして、これでURLパターン/cars/{id}
が破損することはありますか?/tables/cars/types
のような別のリソースとして、これは、ビジネスモデル自体の主要なリソースの周りの一貫性を破るだろうか?OPTIONS /cars
の応答の一部として、それは私にとって「最もリーズナブルな」方法のように見えますが、私の同僚の中には同意しない人もいますし、OPTIONSはそのようなものにはめったに使われないようです。おそらく
GET /cars?&metadata=values
などの応答の一部として、ここでの「値」は、クエリパラメータよりも返されるデータに意味的に関連しているように見えますが、そうではありませんか?他に何か?
私は
はありがとう... Googleで検索して、この特定の主題に関するいくつかの推奨事項については、SOで検索、私は、そのような意思決定のための引数で私を助けるために何かを見つけることができませんでしたしています!
はFabricioロシャ
ブラジリア、ブラジル
ありがとうございます。私は他の答えを待っていますが、今は来ないようです。 同じ例では、_/cars/types_のようなものも私の同僚のお気に入りの選択肢でしたが、私はまだ人々が自動車の下で見つけると期待しているものは...と思います。平均)ではなく、それらの間の値のリスト... –