2014-01-15 3 views
1

Как определить, какой ресурс является ресурсом останова верхнего уровня (URI не вложен внутри какого-либо родителя)?Иерархия ресурсов RESTful

Мой вопрос исходит из того факта, что, если я беру буквально концепцию иерархии ресурсов, я получаю очень длинные URI, например, 5 или 6 уровней.

Это противоречит принципу простоты REST, и, кроме того, все идентификаторы вдоль цепи уникальны, поэтому можно упростить/сократить. Кроме того, большой REST apis, как твиттер или facebook, не следует правилу иерархии буквально.

+0

Не могли бы вы привести пример такого глубоко вложенного URL-адреса? –

+0

@LutzHorn Пример создания объекта обмена:/brand /: bid/campaign /: cid/product /: pid/exchange /: eid Я думаю, что было бы намного более привлекательным, если бы ресурс был доступен в/exchange –

+0

@LutzHorn, если вы посмотрите на twitter Api, у них короткие URI –

ответ

2

В REST нет правила иерархии.

Действительно совершенно противоположное: это принцип REST, что URI непрозрачны, и поэтому URI <http://example.net/careers/technical/it/computing/programming/webProgramming/asp.net> не передает больше информации с точки зрения REST, чем <http://example.net/fasd12>.

Обратите внимание, что оба этих URI одинаково непрозрачны с точки зрения REST. Данный процесс (цифровая или человеческая мысль) может интерпретировать первый особый путь, но пока сервер не скажет иначе, что интерпретация не будет правильной (нет никакого способа узнать, глядя только на URI, что они оба идентифицируют веб-сайт сервис, чтобы помочь предсказать молочный выход стада коз).

Где иерархий приходят в это:

  1. Если сервер сообщил клиенту, как построить URI (например, HTML-формы, JavaScript будет выполняться на клиенте, или какой-либо другой формат, который описывает, как URI, построены).
  2. Если сервер использовал относительные URI для описания ссылок, как часть принципа HATEOAS.

В последнем, в частности, иерархии могут быть очень полезными.

И в этом случае, имеющие URI, которые имеют глубину 5, 6 или 14, полезны, если вы моделируете набор ресурсов, которые имеют иерархическое отношение друг к другу, которое имеет глубину 5, 6 или 14 уровней. И не иначе.

В данном случае это не нарушает принцип простоты:

  1. .. как относительная URI очень прост, собирается ли он с 1-го уровня глубины до 0, или 43 уровней глубины до 42 .
  2. ./programming/ как относительная URI очень прост, собирается ли он от 0 уровней глубины до 1, или 42 уровней в глубине до 43.
  3. вне данного контекста, такие как, что относительные ссылки использовать все идентификаторы URI являются одинаково непрозрачны и, следовательно, одинаково просты: все это строки, которые можно сравнить для равенства w друг с другом, и ничего больше.

Edit:

С другой стороны, в то время как нет никаких оснований опасаться глубоких иерархий, нет никаких причин, чтобы чувствовать себя обязанным им тоже. Если вам более полезно иметь ресурс в /a/b/c, включите в качестве составного ресурса один на /d, тогда штраф. Также можно сделать и то, и другое: с /a/b/c/d и /e оба идентификатора одного и того же ресурса (с одним 301 другим будут приводить к улучшению поведения кэша и сделать связь явным).

+0

Я не мог бы объяснить это лучше. Единственное исключение, которое я вижу, - это понятие «подчиненное» в [спецификации HTTP POST] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5). Однако спецификация достаточно мягкая, чтобы выбрать структуру, которую вы хотите для «подчинения». –

+0

@ Aurélien * entity * является подчиненным, но URI (ы) любых результирующих ресурсов не обязательно. POST может привести к добавлению, удалению или изменению любых ресурсов, в том числе идентифицированных с помощью URI, один ниже или выше в иерархии, один на другом сервере, ни один вообще и т. Д. –

+0

@Jon_Hanna. Вы правы, но создание более подробно, чем в других случаях, и определение «подчинения сущности URI» действительно странно для спецификации («так же, как файл подчинен каталогу, содержащему его, новостная статья подчинена в группу новостей, в которую он отправлен, или запись подчинена базе данных »). Однако я согласен с вами в том, что это подчинение очень абстрактно и не подразумевает «структуру» среди URI. –

Смежные вопросы