Как ответить на альтернативный URI в веб-сервисе RESTful
Я создаю веб-сервис RESTful, который имеет несколько URI для одного из своих ресурсов, поскольку существует более одного уникального идентификатора. Должен ли сервер ответить на запрос GET для альтернативного URI, возвращая ресурс, или я должен отправить перенаправление HTTP 3xx на канонический URI? Является ли HTTP 303 (см. Также) наиболее подходящим перенаправлением?
Пояснение: спецификация HTTP поясняет, что выбор перенаправления зависит от того, какой URI следует использовать в будущих запросах. В моем приложении "канонический" URI является наиболее стабильной из альтернатив; альтернативный URI всегда будет указывать на один и тот же канонический URI или станет недействительным.
3 ответа
Я лично пухл, чтобы вернуть ресурс, а не использовать перенаправление, хотя я подозреваю, что это только потому, что мое подсознание говорит мне, что перенаправления медленнее.
Однако, если вы решите использовать перенаправление, я думаю, что 302 или 307 могут быть более подходящими, чем 303, хотя на w3.org есть сведения о различных кодах перенаправления, которые вы можете использовать.
В томе Первого тома Architexture Всемирной паутины W3C есть раздел по псевдонимам URI ( раздел 2.3.1), в котором говорится следующее:
"Когда псевдоним URI становится общей валютой, владелец URI должен использовать методы протокола, такие как перенаправления на стороне сервера, для связи двух ресурсов. Сообществу выгодно, когда владелец URI поддерживает перенаправление псевдонима URI на соответствующий" официальный " URI. Для получения дополнительной информации о перенаправлении см. Раздел 10.3 "Перенаправление" в RFC2616. См. Также CHIPS для обсуждения некоторых рекомендаций для администраторов серверов ".
Для чего бы я ни рекомендовал бы редирект 302.
Ответ от Ubiguchi имел то, что мне было нужно, за исключением того, что теперь я думаю, что редирект - это путь, через ссылку на раздел спецификации HTTP 1.1 о кодах ответов. Оказывается, мне действительно нужно перенаправление 301, потому что URI, на который я перенаправляю, более "правильный" и стабильный, и поэтому должен использоваться для будущих запросов.