この質問は、最適な REST API 設計と、ネストされたリソースとルート レベル コレクションのどちらを選択するかという問題に直面しています。
概念を説明するために、コレクションCity
、Business
、およびがあるとしEmployees
ます。典型的な API は、次のように構築できます。ABC、X7N、および WWW がキー、たとえば GUID であると想像してください。
GET Api/City/ABC/Businesses (returns all Businesses in City ABC)
GET Api/City/ABC/Businesses/X7N (returns business X7N)
GET Api/City/ABC/Businesses/X7N/Employees (returns all employees at business X7N)
PUT Api/City/ABC/Businesses/X7N/Employees/WWW (updates employee WWW)
これは、元のドメイン構造 (ビジネスは都市にあり、従業員はビジネスにある) に従っているため、クリーンに見えます。個々のアイテムは、コレクションの下のキーを介してアクセスできます (たとえば../Businesses
、すべてのビジネスを../Businesses/X7N
返し、個々のビジネスを返します)。
API コンシューマーができる必要があることは次のとおりです。
- 都市でビジネスを獲得する
(GET Api/City/ABC/Businesses)
- ビジネスのすべての従業員を取得する
(GET Api/City/ABC/Businesses/X7N/Employees)
- 社員個人情報の更新
(PUT Api/City/ABC/Businesses/X7N/Employees/WWW)
その 2 番目と 3 番目の呼び出しは、適切な場所にあるように見えますが、実際には不要な多くのパラメーターを使用しています。
- ビジネスの従業員を取得するために必要なパラメーターは、ビジネスのキー (
X7N
) だけです。 - 個々の従業員を更新するために必要なパラメーターは、従業員のキー (
WWW
)だけでした。
バックエンド コードには、ビジネスを検索したり、従業員を更新したりするための重要でない情報は必要ありません。したがって、代わりに、次のエンドポイントがより適切に表示されます。
GET Api/City/ABC/Businesses (returns all Businesses in City ABC)
GET Api/Businesses/X7N (returns business X7N)
GET Api/Businesses/X7N/Employees (returns all employees at business X7N)
PUT Api/Employees/WWW (updates employee WWW)
ご覧のとおり、ビジネスと従業員の新しいルートを作成しましたが、ドメインの観点から見ると、それらはサブ/サブサブコレクションです。
どちらのソリューションも私にはあまりきれいに見えません。
- 最初の例は不必要な情報を求めていますが、消費者にとって「自然」に見えるように構成されています (コレクションの個々のアイテムは下位のリーフを介して取得されます)。
- 2 番目の例は必要な情報のみを要求しますが、「自然な」方法で構造化されていません。サブコレクションはルート経由でアクセスできます。
- 従業員を追加するビジネスを知る必要があるため、新しい従業員を追加するときに個々の従業員ルートは機能しません
POST Api/Businesses/X7N7/Employees
。 .
私が考えていない、よりクリーンな第 3 の方法はありますか?