Как реализовать бэкэнд API с несколькими версиями - PullRequest
5 голосов
/ 01 октября 2011

Я использую Django для реализации частного API, похожего на отдых, и я не уверен, как обрабатывать разные версии API на серверной части.

То есть, если у меня есть 2 версии API, как выглядит мой код?Должны ли я иметь разные приложения, которые обрабатывают разные версии?Должны ли разные функции обрабатывать разные версии?Или я должен просто использовать операторы if, когда одна версия отличается от другой?

Я планирую указать версию в заголовке.

Спасибо

1 Ответ

3 голосов
/ 01 октября 2011

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

«Обязательные правила расширения полезной нагрузки» относятся к аспекту, который вы встраиваете в дизайн ваших сообщений. «Необходимо игнорировать» означает, что часть программного обеспечения, которая обрабатывает сообщение данного формата, должна игнорировать любые неизвестные синтаксические конструкции. Это то, что мы все знаем из HTML и что позволяет вставлять всевозможные необычные теги в HTML-страницу без удушья парсера.

«Обязательно игнорировать» позволяет расширять возможности вашего сервиса, добавляя материал к тому, что вы уже отправляете, без учета клиентов, которые понимают только старые версии.

Контент-согласование относится к встроенному HTTP-механизму согласования фактического представления, которое сервер отправляет данному клиенту во время выполнения. Типичный сценарий таков: клиенты отправляют заголовок Accept в запросе, чтобы объявить, на что они способны, а серверы выбирают представление для отправки обратно на основе этих возможностей. Но есть и варианты этой темы (подробности см. Здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html).

Согласование содержимого допускает несовместимые изменения, что означает, что я могу превратить свой сервис в возможность отправки несовместимых старых и новых версий, и на основе заголовка Accept моя служба отправит соответствующую.

Итог: при обоих подходах ваш API остается без изменений. Нет необходимости делать какие-либо версии на уровне API - особенно не часто предлагаемое (но совершенно неправильное) включение идентификаторов версий в URI (помните, что вы делаете REST здесь, а не SOAP!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...