好吧,所以这里更好的标题可能是"CakePHP中REST的渐进式增强",但至少现在我会知道你没有读过这个问题,如果你的答案只是指的是两者之间的区别;)
我非常熟悉REST以及如何将其与CakePHP集成,但我不是100%同意如何仍然维护一个常规功能的网站。使用 Router::mapResources 听起来是个好主意,但这会在维护站点的"优雅降级"版本时产生问题,因为对/resource/AND 的 POST 请求和对/resource/add 的 GET 请求都将路由到相同的操作(添加)。显然,如果他们使用 REST api,我希望此操作返回一个 JSON 对象,但如果他们使用的是站点的降级版本(可能没有 JS),它应该是一个添加表单,对吧?
处理这个问题的最佳方法是什么。您是否使用 Router::resourceMap() 将 REST 请求路由到其他操作名称?您是否做了我看到的疯狂黑客,将资源映射的/api/前缀部分用于您可以使用api_action函数?您是否通过检查 isAjax() 让操作同时处理 REST 和常规请求?如果是这样,如何确保可以依赖浏览器来正确支持其他两种请求类型?
我已经搜索了很多,但没有找到任何关于如何在 Cake 和 REST 中保持常规请求可用的信息,所以如果有人有任何建议或经验,我很想听听!
CakePHP 也使用扩展路由,通过 Router::p arseExtension() 所以;
- /
- 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
如果所有视图都设计为处理控制器设置的相同数据,则可以显示常规 HTML 表单,并以与处理 AJAX 请求相同的方式处理已发布的数据。
您可能必须添加检查,如果在/add、/edit、/delete 操作中发布/提交任何数据,以防止在没有发布表单的情况下删除项目(虽然没有测试过,但如果为控制器设置了 mapresources,可能是 cake 阻止了这些 URL)
REST in CakePHP:http://book.cakephp.org/2.0/en/development/rest.html
(扩展)路由http://book.cakephp.org/2.0/en/development/routing.html#file-extensions