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

问题描述 投票:1回答:2

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

提前致谢

laravel api laravel-5
2个回答
3
投票

是的,你所做的是这个问题的众多解决方案之一。我个人更喜欢使用服务层,它包含大多数常用逻辑,可以在应用程序的不同点使用。

/app
 /services
  /UserService.php

这又是个人偏好,对我有用。


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.....
}
© www.soinside.com 2019 - 2024. All rights reserved.