CakePHP restful API-маршрутизация на набор контроллеров

0

Мне интересно, можно ли установить маршрут в Cakephp, который позволит мне перенаправить на набор контроллеров, где установлен префикс. То, что я хочу сделать, это дублировать большинство моих контроллеров, но для REST api.

Я бы все еще имел все контроллеры по умолчанию для самого сайта, но, например, имел контроллер продукта, который возвращает JSON. Для этого я хотел бы переместить все контроллеры api в подпапку и направить их к ним путем обнаружения /api/controllername.

Возможно ли это или даже правильный способ достичь этого?

Теги:
cakephp
rest
routing

1 ответ

3
Лучший ответ

То, что я хочу сделать, это дублировать большинство моих контроллеров, но для REST api.

Плохая идея. ИМХО. Вы собираетесь скопировать код очень вероятно и разбросать код повсюду. Держите его в одном месте. Это предложение является показателем, который заставляет меня думать, что у вас много логики в ваших контроллерах. Переместите его в модели, толстые модели.

Есть несколько лучших способов сделать это.

  • Используйте префикс для маршрутизации к API-методам внутри ваших соответствующих контроллеров (api/v1/foo/bar → ControllerName :: api_actionName())
  • Внедрите один контроллер API, который отправляет методы модели (api/v1/foo/bar → FooModel :: barMethod ($ queryParam1, $ queryparam2,...)
  • Реализовать сервисный уровень, который находится между моделью и контроллерами, и реализовать диспетчерский фильтр или контроллер API из второго предложения для отправки методов службы. Тогда вы будете использовать сервисы вместо моделей. Контроллер <-> Сервис <-> Модель. Для реализации этой задачи требуется некоторый опыт работы с рамками и шаблонами проектирования. Если это не очень хорошо сделано, это, вероятно, вызовет больше проблем, чем пользы - ИМХО.
  • Если это более или менее простой API и логика API аналогичны вашим действиям, вы можете просто повторно использовать те же действия контроллера, которые у вас уже есть, и просто встроили в сериализацию REST и JSON/XML и все еще можете использовать маршрутизацию для создания (api/v1/...) для них. Вы также можете выполнить условные проверки, если контроллер называется API.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню