Я создаю API для доступа к пользователям и объектам, принадлежащим этим пользователям.Доступ к объектам может осуществляться анонимно, автором или каким-либо модератором / супервизором.
Во всех трех случаях набор полей может быть разным (или может быть одинаковым - он еще не известен);по крайней мере, он отличается для анонимных и идентифицированных авторизованных режимов.
Предположим, у нас есть пользователь 456, и этот пользователь владеет объектом 123.
Основной вопрос: Какова лучшая схема URI для этого случая и каковы плюсы и минусы каждого из них:
Вторичный вопрос: Являются ли эти ресурсы одинаковыми или это разные ресурсы для одного и того же объекта??
Один и тот же URI для всех объектов с выходными данными, зависящими от отсутствия или наличия идентификатора:
/objects.json?criteria=xyz&user=456 -- result depends on identity & "user"
/objects/123.json -- result depends on identity
/users/456.json
Различные URI для анонимногои идентифицировал доступ, как если бы это были разные ресурсы:
/objects.json?criteria=xyz -- anonymous only
/objects/123.json -- anonymous only
/users/456.json
/users/456/objects.json -- identified only
/users/456/objects/123.json -- identified only
Что-то еще?
UPD: Простоизобретено:
/objects/123 -- basic info, same for anonymous&identified
/objects/123/extra -- different kinds of extra info,
/objects/123/extended -- ... or extended representations,
/objects/123/meta -- ... only for authorized roles for each.
/objects?criteria=xyz -- common search for objects
/users/456/objects -- objects owned by user only
И в открытых списках и списках пользователей есть URI дополнительных ресурсов (списки являются точками входа), в зависимости от того, какой список используется.
При таком подходе мыиметь URI, указывающие на ресурсы, которые не меняются в зависимостив личность запрашивающего пользователя.Но мы по-прежнему контролируем, какие части информации мы предоставляем или не предоставляем запрашивающему пользователю.И URI не дублируются каким-либо образом или способом.Отлично!