Я в настоящее время работаю над сервисом REST. Этот сервис имеет объект, который имеет различные версии, подобные статьям Wikipedia.
Теперь я задаюсь вопросом, для чего я должен возвратиться если
GET /article/4711
Если я использую (временное) перенаправление для текущей версии, например.
GET /article/4711/version/7
Или я должен возвратить текущую версию непосредственно? Используя перенаправления значительно упростил бы кэширование HTTP (использующий Измененный в последний раз), но имеет недостатки, которые перенаправление имеет (дополнительный запрос, 'тяжелее' для реализации). Поэтому я не уверен, является ли это хорошей практикой все же.
Какие-либо предложения, советуйте, или события совместно использовать?
(btw: когда-нибудь испытанный поиск "Версии REST"? Все, что Вы получаете, о версии API, а не объектов. Поэтому терпите меня, если это - дубликат.)
Если вы относитесь к версиям как к объектам (что, судя по всему, вы и делаете), вот что я бы посоветовал:
GET / article / 4711
возвращает список всех версий (и ссылки на них). Что делает / article / 4711
контейнерным объектом.
GET / article / 4711 / latest
возвращает содержимое последней версии. Возможно, вы захотите рассмотреть / version / latest
, чтобы соответствовать приведенному ниже.
GET / article / 4711 / version / 7
возвращает конкретную версию статьи.
Вы можете посмотреть http://tools.ietf.org/html/draft-brown-versioning-link- отношения .
Используя отношения ссылок CMIS и заголовок HTTP Link, вы можете сделать / article / 4711 последним и предоставить ссылку на версии, например Ссылка: article / 4711 / versions>; rel = version-history
Если вы действительно беспокоитесь о том, чтобы сделать интерфейс RESTful, вам следует подумать, как это сделать в HATEOS стиль.
На мой взгляд, это будет означать возврат достаточного количества информации, чтобы пользователь мог перемещаться по списку ревизий вашего объекта. Если вы читаете это от Роя ...
«Интерфейс не нужно открывать. Он определяется прямо здесь, в гипертексте.Представление сообщает клиенту, как составлять все переходы к следующему состоянию приложения «
... вы почувствуете, как ваш GET / article / 4711
должен возвращать достаточно информации в
Вы будете знать, что лучше всего подходит для вашей модели, но в качестве указателя вы можете рассмотреть возможность использования тегов
<link rel="older"
type="text/html"
href="http://www.yourdomain.com/article/4711?version=6"/>
...
Зависит от вашего предполагаемого поведения для GET / article / 4711
. Если он предназначен для того, чтобы всегда указывать на последнюю версию, он должен напрямую возвращать последнюю версию. Перенаправление на конкретную версию кажется проблематичным, поскольку вы полагаетесь на то, что пользовательская / клиентская библиотека не будет посещать этот конкретный URL-адрес в будущем. Для перевода в термины HTML пользователь может добавить в закладки URL version / 7
и удивиться тому, что теперь они обращаются к более старой версии, а не к последней версии, которую они изначально вводили в адресную строку.
Думаю, было бы лучше вернуть список ревизий для:
GET /article/4711
У вас также может быть:
GET /article/4711/current
Которая возвращает текущую версию напрямую.