REST: я должен перенаправить к URL версии объекта?

Я в настоящее время работаю над сервисом REST. Этот сервис имеет объект, который имеет различные версии, подобные статьям Wikipedia.

Теперь я задаюсь вопросом, для чего я должен возвратиться если

GET /article/4711

Если я использую (временное) перенаправление для текущей версии, например.

GET /article/4711/version/7

Или я должен возвратить текущую версию непосредственно? Используя перенаправления значительно упростил бы кэширование HTTP (использующий Измененный в последний раз), но имеет недостатки, которые перенаправление имеет (дополнительный запрос, 'тяжелее' для реализации). Поэтому я не уверен, является ли это хорошей практикой все же.

Какие-либо предложения, советуйте, или события совместно использовать?

(btw: когда-нибудь испытанный поиск "Версии REST"? Все, что Вы получаете, о версии API, а не объектов. Поэтому терпите меня, если это - дубликат.)

13
задан sfussenegger 2 April 2010 в 16:36
поделиться

5 ответов

Если вы относитесь к версиям как к объектам (что, судя по всему, вы и делаете), вот что я бы посоветовал:

GET / article / 4711

возвращает список всех версий (и ссылки на них). Что делает / article / 4711 контейнерным объектом.

GET / article / 4711 / latest

возвращает содержимое последней версии. Возможно, вы захотите рассмотреть / version / latest , чтобы соответствовать приведенному ниже.

GET / article / 4711 / version / 7

возвращает конкретную версию статьи.

11
ответ дан 1 December 2019 в 23:31
поделиться

Вы можете посмотреть http://tools.ietf.org/html/draft-brown-versioning-link- отношения .

Используя отношения ссылок CMIS и заголовок HTTP Link, вы можете сделать / article / 4711 последним и предоставить ссылку на версии, например Ссылка: ; rel = version-history

2
ответ дан 1 December 2019 в 23:31
поделиться

Версии статей и гипертекст

Если вы действительно беспокоитесь о том, чтобы сделать интерфейс RESTful, вам следует подумать, как это сделать в HATEOS стиль.

На мой взгляд, это будет означать возврат достаточного количества информации, чтобы пользователь мог перемещаться по списку ревизий вашего объекта. Если вы читаете это от Роя ...

«Интерфейс не нужно открывать. Он определяется прямо здесь, в гипертексте.Представление сообщает клиенту, как составлять все переходы к следующему состоянию приложения «

... вы почувствуете, как ваш GET / article / 4711 должен возвращать достаточно информации в

  1. Получить последнюю версию статьи

  2. Получить следующую / предыдущую версии

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

  <link rel="older"
        type="text/html"
        href="http://www.yourdomain.com/article/4711?version=6"/>

...

2
ответ дан 1 December 2019 в 23:31
поделиться

Зависит от вашего предполагаемого поведения для GET / article / 4711 . Если он предназначен для того, чтобы всегда указывать на последнюю версию, он должен напрямую возвращать последнюю версию. Перенаправление на конкретную версию кажется проблематичным, поскольку вы полагаетесь на то, что пользовательская / клиентская библиотека не будет посещать этот конкретный URL-адрес в будущем. Для перевода в термины HTML пользователь может добавить в закладки URL version / 7 и удивиться тому, что теперь они обращаются к более старой версии, а не к последней версии, которую они изначально вводили в адресную строку.

2
ответ дан 1 December 2019 в 23:31
поделиться

Думаю, было бы лучше вернуть список ревизий для:

GET /article/4711

У вас также может быть:

GET /article/4711/current

Которая возвращает текущую версию напрямую.

1
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: