Я отметил 2 подхода к разработке RESTful URI: иерархический и отфильтрованный
Я чувствую, что иерархическая структура является слишком многословной, имеет потенциал для избыточных конечных точек (не СУХОЙ) и маскирует то, в каком состоянии ресурса вы действительно заинтересованы (в конце концов, REST = репрезентативная передача состояния).
Я предпочитаю простые URI
Просто элегантно. Я бы выбрал структуру URI, такую как
GET http://server/products/789
потому что меня интересует состояние ресурса продукта.
Если бы я хотел, чтобы все товары, которые принадлежали определенной полке в конкретном магазине, я бы сделал
GET http://server/products?store=123&shelf=456
Если бы я хотел создать продукт в определенном магазине на определенной полке, то я бы опубликовал
{
product: {
store: 123,
shelf: 456,
name: "test product"
}
}
* * Тысяча двадцать-одина с помощью * * тысяча двадцать две
POST http://server/products
В конце концов, это томайто, томахто
REST не требует одного над другим. Однако, по моему собственному опыту, более эффективно использовать RESTful API, который отображает отдельные сущности на отдельные конечные точки (например, сопоставления объектов RestKit на iOS), вместо того, чтобы сопоставлять сущности множеству разных конечных точек в зависимости от того, какие параметры передаются.
О ОТДЫХЕ
Что касается REST, то он не является протоколом и не имеет RFC. Он тесно связан с RFC HTTP / 1.1 как способом реализации своих действий CRUD, но многие разработчики программного обеспечения утверждают, что REST не зависит от HTTP. Я не согласен и считаю это предположением, потому что оригинальная диссертация Роя Филдинга (UCI) (http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm) объясняет глубоко укоренившуюся связь REST и HTTP / 1.1. Вам также может понравиться мнение Роя по этой теме: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven.
Принципы, определенные REST, могут применяться к другим протоколам, но REST был создан для Интернета, а HTTP - это протокол для всемирной паутины.
REST vs RPC
RPC предназначен для вызовов удаленных функций и является глагол-центрированным .
REST - это использование соглашения CRUD для обработки данных в зависимости от того, как операция CRUD применяется к данному типу данных, и существительное-центрированное .
Вы можете выполнить то же самое с помощью REST или RPC, но REST следует принципам DRY, потому что для каждого URI вы можете выполнить 4 действия, тогда как RPC требует конечную точку для каждого действия.
PS
Многое из этого является моим мнением и основано на моем опыте, но я надеюсь, что это проливает некоторый свет на то, как вы могли бы наиболее эффективно разработать схему RESTful URI. Как всегда, ваши конкретные цели и потребности будут влиять на ваш выбор, но простота - всегда хорошая цель для достижения цели.