В REST нормально иметь несколько ресурсов, которые совместно используют одни и те же представления.
Например, «предпочтительной версией авторов» научной статьи является отображение, значение которого меняется со временемтогда как сопоставление с «статьей, опубликованной в трудах конференции X», является статичным. Это два разных ресурса, даже если они оба отображаются в одно и то же значение в определенный момент времени. Различие необходимо для того, чтобы оба ресурса можно было идентифицировать и ссылаться независимо. Аналогичный пример из разработки программного обеспечения - это отдельная идентификация файла исходного кода с управлением версиями при обращении к «последней редакции», «редакции номер 1.2.7» или «редакции, включенной в выпуск Orange». - Fielding, 2000
Этот подход полностью соответствует тому, что у вас может быть один ресурс для «всех пользователей» и другой ресурс для «пользователей, созданных Бобом».
В тех случаях, когда все становится запутанным, это тот случай, когда вы хотите использовать тот же самый идентификатор ресурса для предоставления различных представлений. То есть, когда Алиса смотрит на «пользователей, созданных мной», она видит «пользователей, созданных Алисой», а когда Боб смотрит на «пользователей, созданных мной», он видит «пользователей, созданных Бобом».
Одной из возможностей является перенаправление «созданных мной пользователей» на соответствующий ресурс. Это работает для значений «works», которые разрешают дополнительные циклы, когда целевой ресурс еще не находится в локальном кэше.
В HTTP / 2 серверная отправка может избавить вас от некоторой боли в этом круговом цикле.
Правила для общих кэшей должны защищать вас от отправки взгляда Алисы на "я "ресурс для Боба, и наоборот, но полезно знать о значениях различных заголовков, чтобы вы случайно не отключили эту защиту.
Наличие некоторых ресурсов может быть проблемой в некоторыхнастройки «читать ваши собственные записи», поскольку кэши не будут знать, что небезопасный запрос аннулировал оба ресурса. Боб создает нового пользователя через POST для «пользователей, созданных мной», и соответствующая запись в кэше становится недействительной ... но «все пользователи» - это другой ключ кэша, и он не становится недействительным. Поэтому, если Боб просматривает представление всех пользователей, он может видеть ранее кэшированную копию без изменений, которые он только что видел в своем собственном представлении.
В некоторых случаях имеет смысл рассмотреть подресурсы.
/api/customers
/api/customers#created-by-Alice
/api/customers#created-by-Bob
Но если вы пытаетесь уменьшить количество несущественных данных, которыми обмениваются, то это не очень подходит.