CakePHP将API路由到一组控制器

时间:2014-12-15 22:44:51

标签: php api rest cakephp routing

我想知道是否可以在Cakephp中设置一条允许我路由到一组设置了前缀的控制器的路由。我想要做的是复制我的大多数控制器,但是用于REST api。

我还想拥有网站本身的所有默认控制器,但有一个产品控制器,例如只返回JSON。为此,我想将所有api控制器移动到子文件夹中,并通过检测/api/controllername来路由它们。

这是可能的,甚至是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

  

我要做的是复制我的大多数控制器,但是   REST api。

糟糕的主意。恕我直言。你很可能会复制代码并在任何地方分散代码。把它放在一个地方。这句话是一个指标,让我觉得你的控制器中有很多逻辑。把它移到模特,胖模特。

有几种更好的方法可以做到这一点。

  • 使用前缀路由到相关控制器内的API方法(api / v1 / foo / bar - > ControllerName :: api_actionName())
  • 实现一个调度模型方法的API控制器(api / v1 / foo / bar - > FooModel :: barMethod($ queryParam1,$ queryparam2,...)
  • 实现位于模型和控制器之间的服务层,并从第二个建议实现调度程序过滤器或API控制器以分派服务方法。那么您将使用服务而不是模型。控制器< - >服务< - >模型。为了很好地实现这一点,需要一些框架和设计模式的经验。如果做得不好,可能会造成更多问题,而不是受益 - 恕我直言。
  • 如果它是一个或多或少简单的API,并且API逻辑与您的操作类似,您可以简单地重复使用您已有的相同控制器操作,并且只使用built in REST and JSON/XML view序列化,并且仍然可以使用路由来创建他们的花式路线(api / v1 / ...)。如果控制器被称为API,则可以进行条件检查。

取决于你选择哪一个,我已经看到并全部使用它们,它们都起作用,差别主要是你需要的实现和抽象级别。但是,关键是要编写干净和干燥的代码并关注SoC