Предположим, что у меня есть магазины, полки в магазине и продукты на полке. Поэтому, чтобы получить список продуктов на полке в магазине, я бы воспользовался следующим запросом:
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
Каким будет правильный способ проектирования схемы для иерархии дерева, например:
P.S. Если я что-то не понимаю о архитектуре REST, просьба привести примеры того, как я могу сделать это лучше. Там слишком много людей, которые любят говорить "ОТДЫХ - это не CRUD" и "REST не RPC", а затем не дают абсолютно никаких пояснений или примеров хорошего дизайна RESTful.