我正在使用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版本控制的好策略吗?这是什么问题?
预先感谢
答案 0 :(得分:3)
是的,您所做的是解决此问题的众多方法之一。 我个人更喜欢使用服务层,其中包含大多数通用逻辑,可以从应用程序的不同角度使用它。
/app
/services
/UserService.php
同样,这是个人喜好,对我有用。
答案 1 :(得分:1)
正如@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.....
}