我目前正在设计一个基于Symfony Framework的新Web应用程序,该应用程序将同时提供Web和移动访问。为了便于说明,我将使用Symfony框架中的默认AcmeDemoBundle来详细说明我的问题。
所以,DemoBundle给了我以下路线:
/hello/{name}
到目前为止一切顺利。现在,我想在这个项目中实现一个API,它将为移动应用程序提供服务,因此与上述路由相同的控制器的路由应该是,例如:
/api/v1/hello/{name}
我的疑问是:如果不复制代码,最好的方法是什么?我打算使用FOSRestBundle作为API,我知道他处理渲染HTML视图,但我想像以前那样将API路由与Web分开。我可能应该为API创建一个新的捆绑包吗?
答案 0 :(得分:0)
为API创建一个捆绑包不是一个好习惯,原因很简单,因为您无法在其他项目中轻松地重用捆绑包。
例如,您为A项目创建PostBundle及其API包APIPostBundle。 如果要将该捆绑包用于B项目,则需要PostBundle和APIPostBundle。您在两个捆绑包之间创建了依赖关系,这是一种不好的做法(Component-Based Development).
因此,您必须生成一个具有强度体系结构的独立包,如果必须,可以允许您进行少量修改。
使用服务获取逻辑指令。然后,controller/APIController
可以管理路由并调用服务方法。通过这种方式,您可以在不编辑控制器的情况下修改服务。
所以,你的架构看起来像这样:
PostBundle
Controller
- PostController
- APIPostController
Service
- PostService
- PostServiceInterface