Laravel API版本控制-如何处理版本之间的共享功能?

时间:2019-04-02 05:27:15

标签: laravel api laravel-5

我正在使用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版本控制的好策略吗?这是什么问题?

预先感谢

2 个答案:

答案 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.....
}