Лучший способ указать версию в вызовах сервиса 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?