使用CakePHP中的REST进行优雅降级

时间:2013-02-04 04:37:58

标签: rest cakephp progressive-enhancement graceful-degradation

好吧,所以这里更好的标题可能是“在CakePHP中使用REST进行渐进式增强”,但至少现在我知道如果你的答案只是提到两者之间的区别,你就没有读过这个问题;)

我对REST非常熟悉,以及如何将它与CakePHP集成,但我并不是100%依赖于如何仍然维护一个传统功能的网站。使用Router :: mapResources听起来是个好主意,但这会产生维护网站“优雅降级”版本的问题,因为对/ resource / add的/ resource / AND GET请求的POST请求都将路由到同一个动作(加)。很明显,如果他们使用REST api,我会希望这个动作返回一个JSON对象,但是如果他们使用的是网站的降级版本(也许不是JS),它应该是一个添加表单,对吗?

解决这个问题的最佳方法是什么。您是否使用Router :: resourceMap()将REST请求路由到其他操作名称?你做那个疯狂的黑客我看到有资源地图的/ api /前缀部分,所以你可以使用api_action函数?您是否通过检查isAjax()来处理REST和传统请求?如果是这样,您如何确保您可以依赖浏览器来正确支持其他两种请求类型?

我已经搜索了很多但是没有找到任何关于如何在Cake中保留常规请求的方法,所以如果有人有任何建议或经验,我很乐意听到它!

1 个答案:

答案 0 :(得分:0)

CakePHP也使用扩展路由,通过Router :: parseExtension()so;

  • / test / action将呈现views / test / action.ctp
  • /test/action.html也
  • /test/action.json将呈现views / test / json / action.ctp
  • /test/action.xml将呈现views / test / xml / action.ctp

如果所有视图都设计为处理控制器设置的相同数据,那么您将能够以与处理AJAX请求相同的方式显示常规HTML表单并处理发布的数据。

如果在/ add,/ edit,/ delete操作中发布/提交了 的任何数据,您可能不得不添加支票,以防止在没有发布表单的情况下删除项目(避难所)但是,测试一下,如果为控制器设置了mapresources,那么蛋糕可能会阻塞这些网址。

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

(扩展)路由 http://book.cakephp.org/2.0/en/development/routing.html#file-extensions