2012-05-30 3 views
0

Я пытаюсь создать веб-API с CodeIgniter как фреймворк PHP.Как структурировать мои контроллеры в CodeIgniter с учетом условий

Это не REST api. Это просто веб-api, что означает, что все запросы будут POST-запросами.

Типичный запрос будет выглядеть следующим образом

http://host/api1/user/get_name 

и

http://host/api2/user/get_name 

При таких обстоятельствах api1 и API2 становятся контроллерами и пользователь становится методом под ним.

Я не доволен этим, потому что тогда классы api1 и api2 становятся слишком большими, а также я не хочу смешивать несвязанный код в одном классе.

Что я могу сделать? Могу ли я играть с моим файлом .htaccess или конфигурацией маршрутизации, так что каждый раз, когда сервер получает запрос формы \^api \, он пересылает его соответствующему контроллеру?

Обратите внимание: api1 и api2 не являются единственными контроллерами в моей системе.

+0

Решение может заключаться в создании папки в вашей папке «контроллеры», называемой api1, а затем с контроллером «User», который должен содержать все ваши действия, связанные с пользователем, и т. Д. – Gavin

+0

Что вы пытаетесь выполнить? Вы хотите, чтобы ** Пользователь ** был контроллером вместо действия? Вы хотите, чтобы один и тот же ** Пользовательский ** контроллер вызывал, запрашиваете ли вы api1 или api2? –

+0

@GustavBertram Я хочу, чтобы api1 и api2 отображались в URL-адресе, но я не хочу, чтобы они были контроллерами. Я хочу, чтобы Пользователь был контроллером, а api1 и api2 были просто строками, отображаемыми в URL-адресе, не должны отображаться ни в чем в CI. –

ответ

2

Вы должны рассмотреть несколько вещей

  1. ли они взаимозависимы?
  2. У вас должна быть определенная причина для поддержки 2 веб-API.

Если они не являются взаимозависимыми, то я рекомендую вам сделать это

http://host1/user/get_name 
http://host2/user/get_name 

Если они взаимозависимы, то вы должны сделать

http://host/api1/user/get_name 
http://host/api2/user/get_name 

причина что вам не нужно поддерживайте 2 разных модели.

Например, если вы внесли некоторые изменения в X_model.php, вы должны загрузить их на обоих серверах.

И вы можете создать папку под контроллером. Я очень подтверждаю это. Я сделал это в codeigniter 1.7.

Таким образом, вы можете создать папку и продолжить ее.

+0

Оба полностью независимы. Api1 и Api2 - просто гипотетические имена. Это две разные вещи, делающие две разные вещи. –

+0

Я не знал, что можно создать несколько папок в папке контроллеров codeigniter. Это должно ее решить. –

+0

его мое удовольствие мой друг ...! Лучшая удача ..! – KuKu

1

Вы можете попробовать $route['api(:num)'] = "api$1/";

Не проверял Незнайка, если это сработает так, как вы хотите.

Codeigniter Routing

1

Что API1 и API2? Являются ли они независимыми друг от друга?

Если да, то я бы порекомендовал вам использовать отдельные поддомены для двух интерфейсов, так что вы можете сделать это:

http://api1.example.com/user/get_name 
http://api2.example.com/user/get_name 

Это обеспечивает четкое разделение между этими двумя API-интерфейсов, а также позволяет User быть контроллер, как против всего API.

Для этого потребуется создать в корневом каталоге два каталога (api1, api2), «установить» два экземпляра CI и маршрутизировать поддомены в соответствующие каталоги.

+0

Ваш ответ приемлем для меня. –

0

Я не вижу ничего плохого в вашей схеме URL. это то, как вы должны вызвать контроллер -> действие в codeigniter. Если вы хотите, чтобы ваши контроллеры были тощими, переместите фактический код обработки в библиотеках и вызовите библиотеки для каждого запроса. Или вы могли бы играть с правилами перезаписи для распределения работы через разные контроллеры.

+0

Увеличьте контроллер дольше, чтобы загрузить его в память. Даже если я держу его тощим, это все еще проблема, потому что у меня около 200 методов. –

Смежные вопросы