Проектирование URI для текущего пользователя в приложениях REST

Мне нужен URI в моем REST API для извлечения текущего зарегистрированного пользователя. Обычно я использую GET на ресурсе с идентификатором, но клиент не знает идентификатора пользователя.

Я нашел следующие решения:

  • По имени пользователя

    Это решение использует имя пользователя вместо идентификатора пользователя.

    Пример:

  • С собственным ресурсом

    Это решение имеет один ресурс для пользователей и один дополнительный ресурс для зарегистрированного пользователя.

    Примеры:

  • С символической ссылкой

    Это решение имеет символическую ссылку для идентификатора пользователя.

    Пример:

  • С фильтром

    В этом решении используется фильтр для имени пользователя.

    Пример:

Какой из них наиболее RESTful? Каковы плюсы и минусы?

Ответ 1

Это вам. Все подходы отлично смотрятся с точки зрения REST.

В соответствии с диссертацией Роя Томаса Филдинга * любая информация, которую можно назвать, может быть ресурсом:

5.2.1.1 Идентификаторы ресурсов и ресурсов

Ключевая абстракция информации в REST - это ресурс. Любая информация, которая может быть названа, может быть ресурсом: документ или изображение, временная служба (например, "сегодня погода в Лос-Анджелесе" ), коллекция других ресурсов, не виртуальный объект (например, человек) и т.д., Другими словами, любое понятие, которое может быть объектом гипертекстовой ссылки автора, должно соответствовать определению ресурса. Ресурс представляет собой концептуальное сопоставление с набором объектов, а не с сущностью, которая соответствует отображению в любой конкретный момент времени. [...]

При использовании /me, /users/me, /users/myself, /users/current и аналогий у вас есть локатор для аутентифицированного пользователя, и он всегда будет идентифицировать концепцию аутентифицированного пользователя, независимо от того, какой пользователь аутентифицирован.

Для большей гибкости вы также можете поддерживать /users/{username}.

Кстати, аналогичная ситуация была рассмотрена в Использует ли идентификаторы ресурсов магии (me/self), идущие против принципов REST?


* Если вы заинтересованы в REST, глава 5 Филдинг-диссертации является обязательным для чтения.

Ответ 2

Все одинаково RESTful. REST не относится к URI, это касается их использования RESTfully.

REST - это состояние перехода к клиенту. Частью этого состояния может быть тот, кто является текущим пользователем. Все URL-адреса могут использоваться для получения этой части состояния приложения.