Как должна выглядеть схема 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.

Ответы на вопрос(5)

Ваш ответ на вопрос