Как должна выглядеть схема REST URL для древовидной иерархии?
Давайте предположим, что у меня есть магазины, полки в магазине и продукты на полке. Поэтому, чтобы получить список товаров на полке в магазине, я бы использовал следующий запрос:
GET http://server/stores/123/shelves/456/products
Отсюда, как я могу получить отдельный продукт? Должен ли я использовать:
GET http://server/products/789
Или же:
GET http://server/stores/123/shelves/456/products/789
Первый способ более лаконичен, поскольку, получив список продуктов, вам неважно, к какому магазину он принадлежит, если вы просто хотите просмотреть сведения о конкретном продукте. Однако второй способ более логичен, поскольку вы просматриваете товары для определенной полки в конкретном магазине.
Точно так же, как насчет операции PUT / DELETE?
DELETE http://server/stores/123/shelves/456/products/789
Или же:
DELETE http://server/products/789
Каков будет правильный способ разработки схемы для такой древовидной иерархии?
Постскриптум Если я что-то неправильно понимаю в архитектуре REST, приведите примеры того, как я могу сделать это лучше. Слишком много людей, которые любят говорить «REST - это не CRUD» и «REST - это не RPC», тогда не дают абсолютно никаких разъяснений или примеров хорошего дизайна RESTful.