Вы правы в том, что предыдущий URL «лучше» и используется более широко.Я не думаю, что вы найдете это документированным в каком-либо стандарте ;это скорее конвенция.Большинство статей и книг, посвященных REST, делают это таким образом.
Причина этого, как вы говорите, в том, что компоненты пути в URL соответствуют структуре ресурсов и подресурсов.В частности, все следующие адреса должны быть действительными:
- website.com /
- website.com / books
- website.com / books / 123
В частности, обратите внимание, что books/123
, не book/123
, как у вас.Я видел единственное число, но имхо множественное число лучше.
Для URL /books
- GET получает все книги, но вы можете ограничить книги параметрами запроса, например
/books?author=alice
- a POST добавляет новую книгу (с идентификатором, сгенерированным сервером).
Для URL /books/123
- a GETполучает эту конкретную книгу
- , PUT заменяет книгу с этим идентификатором (или добавляет книгу с этим сгенерированным клиентом идентификатором)
Теперь, если в книге есть пятна, а пятна уникальны только для определенной книги , тогда вы добавите следующие URL:
- website.com / books / 123 / blurbs
- website.com / books / 123/ blurbs / 72
Вы можете сделать то же самое для фильмов и галерей, при условии, что каждая галерея принадлежит одному фильму.Но если бы галереи существовали для нескольких фильмов, вы бы сделали /galleries
URL верхнего уровня.Переход от фильма к галерее все равно будет в порядке.У вас не будет структурированного URL.Вместо этого вы получите все галереи, содержащие изображения из фильма 456, через GET на
- website.com / galleries? Film = 456
Общее правило таково, что если у вас естьОтношение владения для подресурсов вы можете использовать структурированные URL, но если есть более слабые отношения среди элементов верхнего уровня, параметры запроса в порядке.Не впадайте в распространенное заблуждение, что URL-адреса RESTful не имеют параметров запроса;они делают.:)
Теперь, наконец, прямо отвечу на ваш вопрос: website.com/films/galleries/456
не очень хороший URL, ИМХО, потому что `website.com/films/galleries/
не очень полезен.На самом деле я думаю, что это довольно некрасиво.Что бы это значило?Все галереи?Если это так, это должно быть website.com/galleries
.
Опять же, я не думаю, что это где-то стандартизировано, но это кажется очень распространенным и традиционным.