Маршрутизация Symfony с помощью веб-службы API - PullRequest
4 голосов
/ 18 марта 2010

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

прямо сейчас:

url: /api/:action
param: { module: api, action: :action }
requirements:
  sf_format: (?:xml|json)

что я думал:

url: /api/v1/:module/:action
param: { module: api1, action: :action }
requirements:
  sf_format: (?:xml|json)

url: /api/v2/:module/:action
param: { module: api2, action: :action }
requirements:
  sf_format: (?:xml|json)

Это легко, но идеальным решением было бы иметь следующий тип маршрута

# Automatically redirects to one module or another
url: /api/v:version/:module/:action
param: { module: api:version, action: :action }
requirements:
  sf_format: (?:xml|json)

есть идеи как это сделать? что вы рекомендуете нам делать?

спасибо!

Ответы [ 3 ]

1 голос
/ 09 ноября 2012

Я думаю, что подход с двумя маршрутами, один с v1 на нем, а другой с v2, является лучшим решением. Это может звучать как повторение работы, но если вы начнете думать, причина, по которой вам придется использовать версоны, заключается в том, что первое несовместимо со вторым. Таким образом, смешать 2 логики было бы излишним. Если вы думаете, что когда-нибудь в будущем у вас будет 3 версии, как вы думаете, как будет выглядеть ваша логика?

Лучшее решение состоит в том, чтобы сделать оба компонента раздельными, поэтому, если вам нужно прекратить поддержку версии 1, это будет просто, как удалить файл для версии 1. =)

1 голос
/ 18 марта 2010

Как насчет использования старых правил маршрутизации и добавления .xml1 / .xml2 / .json1 / .json2 до конца? Таким образом, вы можете повторно использовать ваши текущие модули и вам нужно только создать новое представление («indexSuccess.xml1.php»).

Или создать новый класс маршрутизации?

0 голосов
/ 09 ноября 2012

Вероятно, вам следует создать собственную коллекцию маршрутов, как показано здесь .

Это позволит вам удовлетворить любые ваши потребности в маршрутизации. Вы можете переместить логику версии в класс маршрута и класс сбора маршрута.

...