我正在使用Laravel 5并为需要api版本控制的应用程序构建Web服务。这是我到目前为止在不同的Web资源中找到的文件夹结构
/app
/controllers
/Api
/v1
/UserController.php
/v2
/UserController.php
问题是UserController
中有许多函数很可能在版本之间保持不变,或者任何更改都可能应用于每个版本。例如,有一个logout
函数,它在注销后向用户发送消息。如果我在每个UserController
中复制此函数,那么任何微小的改变,比如更改消息或类似的东西,都会让我改变不同版本中的每个UserController
。结果我决定创建一个BaseUserController
并在那里插入共享函数,每个Usercontroller
都应该继承它。我是说这个
/app
/controllers
/Api
/BaseUserController.php extends Controller.php
/v1
/UserController.php extends BaseUserController.php
/v2
/UserController.php extends BaseUserController.php
因此,如果任何版本需要实现自己的logout
,只需覆盖其父函数或任何全局更改,我更改父级中的函数。
我想问你,这是实施api版本控制的好策略吗?这有什么问题?
提前致谢
是的,你所做的是这个问题的众多解决方案之一。我个人更喜欢使用服务层,它包含大多数常用逻辑,可以在应用程序的不同点使用。
/app
/services
/UserService.php
这又是个人偏好,对我有用。
正如@GreedChikara所说的那样个人选择......我的结构如下所示......
/app
/controllers
/Api
/UserController.php
/v2/
/UserControllerV2.php
我做了什么来减少重复 - 总是扩展以前的版本并覆盖需要与以前的版本不同的方法 -
class UserControllerV2 extends UserController {
/**
* Create a new controller instance.
*/
public function __construct() {
parent::__construct();
}
##Overridden methods.....
}