2010-05-26 3 views
4

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

Если конечная точка RESTful использует аутентификацию на основе токенов, то для доступа к ресурсу требуется токен-токен, и этот токен истекает через определенное время, нарушив принцип RESTful? Другими словами, если один и тот же URL-адрес истекает через определенное время, значит, ресурс возвращает другой ответ в зависимости от того, когда он был запрошен, является ли нарушение REST?

ответ

1

Право на доступ к URL-адресу пользователя/приложения может истечь, но это не означает, что URL-адрес истекает. В больших системах реального мира аутентификационная часть API может обрабатываться другим продуктом, защищая реальный API от атак, неавторизованных пользователей и т. Д. Таким образом, API RESTful по-прежнему следует принципам покоя.

0

Ресурсы будут часто давать разные ответы в зависимости от того, когда они запрашиваются. Это то, что происходит, когда фактические ресурсы меняются со временем. Запрос ресурса этой страницы (например) за неделю, скорее всего, даст разные ответы, чем при первом чтении.

+0

Или просто что-то так просто, как /отдых/профиль/адрес электронной почты будет возвращать различное содержание в зависимости вошедший в. –

+0

@BurningIce Нет, это не тот же самый пример. Использование того же URI, чтобы содержать разные вещи для разных людей, обычно не является лучшим решением. Однако конечные точки, такие как/TodaysWeather, со временем будут меняться. –

3

Нет, ваш сценарий не нарушает какой-либо спокойный принцип, о котором я могу думать. Кажется, вы сбиваете с толку запрос, возвращающий другой ресурс, и запрос получает другой ответ.

В вашем сценарии я ожидал бы, что после того, как токен истек, сервер вернет 401, и клиент инициирует какой-то обмен подлинности для повторной проверки пользователя.
После повторной проверки сервер должен вернуть целевой ресурс.

Есть много случаев, когда запрос может иметь совершенно разные ответы. 403 Запрещены, 410 Прошли примеры.

+0

А это имеет смысл, если соблюдаются правила HTTP, похоже, что он не нарушит какой-либо процесс RESTful. – auser

+0

@auser. Я бы не пошел так далеко, но есть вероятность, что вы работаете в духе HTTP вы также, вероятно, на хорошем треке RESTful. Не забывайте, что Рой Филдинг был соавтором спецификации HTTP 1.1. –

1

Ваш дизайн не нарушает ограничения REST, но вы должны быть осторожны, чтобы правильно использовать HTTP. Если ваши ресурсы предназначены только для определенного пользователя, этот пользователь должен быть аутентифицирован с использованием HTTP-аутентификации. Это позволит публичным кэшам не кэшировать представления ресурса (которые они обычно обычно использовали).

Таким образом, даже если вы намерены, чтобы URL-адрес был известен только определенному пользователю, убедитесь, что этот пользователь также аутентифицирован, используя правильные HTTP-заголовки.

Jan