Лучший способ указать версию в вызовах сервиса REST

Возможный дубликат:
Как сделать версию REST URI

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

Например, когда я обновляю свой REST-сервер до версии 2, я не хочу прерывать вызовы для всех клиентов, которые внедрили версию 1 моей службы.

Я видел, как другие добавляли версию в URL или где-то указывали версию в шапке.

Возможно, не существует "лучшего" способа для реализации этого, но я был бы признателен за некоторые мысли по этому вопросу (за и против каждого и т.д....)

Спасибо

2 ответа

Решение

Мы делаем это по отдельным маршрутам:

 http://my.service.com/v1/user/1

 http://my.service.com/v2/user/1

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

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

Если вы действительно хотите избежать проблемы с дублирующимся ресурсом, вы можете перейти в версию, подобную параметру get:

 http://my.service.com/user/1?version=1

Если нет версии, по умолчанию все. Это на самом деле полностью догматичный REST, но я думаю, что это сильно влияет на ваших пользователей API.

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

Я бы порекомендовал управление версиями через заголовок Accept/Content-Type. URI не должны изменяться в зависимости от версии, если только в самих ресурсах нет значительных структурных изменений. Вот отличное объяснение: Лучшие практики для управления версиями API?

Другие вопросы по тегам