Изящная деградация с REST в CakePHP

Хорошо, поэтому лучшим заголовком здесь, возможно, было бы «Прогрессивное улучшение с REST в CakePHP», но, по крайней мере, теперь я буду знать, что вы не читали вопрос, если ваш ответ просто относится к разнице между ними;)

Я довольно хорошо знаком с REST и с тем, как интегрировать его с CakePHP, но я не на 100% согласен с тем, как поддерживать нормально функционирующий веб-сайт. Использование Router::mapResources кажется отличной идеей, но это создает проблему с поддержкой «изящной деградации» версии сайта, потому что запросы POST к /resource/ И запросы GET к /resource/add будут направляться к одному и тому же действию. (добавлять). Очевидно, я хочу, чтобы это действие возвращало объект JSON, если они используют REST API, но если они используют деградированную версию сайта (возможно, без JS), это должна быть форма добавления, верно?

Как лучше с этим справиться. Направляете ли вы свои REST-запросы к другим именам действий, используя Router::resourceMap()? Вы делаете тот сумасшедший хак, который я видел, чтобы иметь часть префикса /api/ в resourceMap, чтобы вы могли использовать функции api_action? У вас есть действия, обрабатывающие как REST, так и обычные запросы с помощью проверки isAjax()? Если да, то как убедиться, что браузер правильно поддерживает два других типа запросов?

Я немного поискал, но ничего не нашел о том, как сделать обычные запросы доступными в Cake вместе с REST, поэтому, если у кого-то есть какие-либо советы или опыт, я буду рад их услышать!


person BeniRose    schedule 04.02.2013    source источник


Ответы (1)


CakePHP также использует маршрутизацию расширений через Router::parseExtension(), поэтому;

  • /test/action будет отображать представления/test/action.ctp
  • /test/action.html также
  • /test/action.json будет отображать представления/test/json/action.ctp.
  • /test/action.xml будет отображать представления/test/xml/action.ctp.

Если все представления предназначены для обработки одних и тех же данных, заданных вашим контроллером, вы сможете отображать обычную HTML-форму и обрабатывать размещенные данные так же, как вы обрабатываете запрос AJAX.

Возможно, вам придется добавить проверки, если какие-либо данные отправлены/отправлены внутри действий /add, /edit, /delete, чтобы предотвратить удаление элементов без публикации формы (это не проверялось хотя может случиться так, что торт блокирует эти URL-адреса, если для контроллера установлены ресурсы карты)

REST в CakePHP: http://book.cakephp.org/2.0/en/development/rest.html

(Расширение) Маршрутизация http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

person thaJeztah    schedule 05.02.2013
comment
Спасибо за информацию, я понял эту часть, я думаю, мой вопрос был о том, что вы делаете в контроллере, потому что казалось, что действия для REST API будут делать что-то другое, чем действия для традиционных запросов, но вы можете быть правы, они могут быть использование одних и тех же данных и представления - это то, что делает что-то другое. Спасибо! - person BeniRose; 01.03.2013