Правильное управление версиями API в CodeIgniter - PullRequest
2 голосов
/ 28 апреля 2011

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

  1. Создание версий контроллеров API, что-то вроде {root} /application/controllers/api/v1.0/api.php и /v2.0/api.php и т. Д. ...
  2. Разрешить более высокие версии API наследовать от предыдущих версий, поэтому мне нужно переопределить только те методы, которые я хочу

CodeIgniter, похоже, не нравится этот тип структуры папок. А также, если все мои контроллеры API имеют одно и то же имя класса, я не смогу создать подкласс (т. Е. «API класса расширяет API» не будет работать). Тем не менее, я бы предпочел не делать этого: «класс API2_0 расширяет API1_0», но я сделаю это при необходимости.

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

-Стив

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Структурируйте свой API, однако, как правило, если вы используете контроллеры и все остальное, просто наберите:

application/controllers/api_1/foo.php
application/controllers/api_2/foo.php

Используя Маршруты вы можете сделать это:

/api/1/foo
/api/2/foo
0 голосов
/ 29 апреля 2011

Я думаю, что вам нужно улучшить свою логику, пожалуйста, посмотрите этот ответ код воспламенителя динамической маршрутизации о добавлении пользовательских маршрутов на ваш сайт, с помощью которых вы можете добавить свои собственные.Когда дело доходит до контроллеров, лучше всего иметь один MY_Controller в вашей папке application / core /, который будет основным родителем всех контроллеров приложений.Затем создайте новую библиотеку в application / library / Apiv1_Controller.php, которая расширит класс MY_Controller, обратите внимание, что вам потребуется функция __autoload () для автоматической загрузки классов из папки application / libraryЗатем все ваши контроллеры API версии 1 расширят Apiv1_Controller, получая доступ к его методам.Для версии 2 просто создайте другую библиотеку Apiv2_Controller, которая расширяет Apiv1_Controller, а контроллеры из версии 2 расширят этот класс.Таким образом, ваша логика останется в одном классе, поэтому вам не нужно создавать дополнительные папки.Также с помощью пользовательских маршрутов вы можете сопоставить свои маршруты с различными контроллерами.Надеюсь, это поможет вам.

//API V1 Controller
class Someapi extends Apiv1_Controller
{

}

//API V2 Controller
class Otherapi extends Apiv2_Controller
{

}
...