PHP中api版本控制系统的结构


Structure of api versioning system in PHP

所以我想向我的API添加向后的内部兼容更改。

我正在考虑做以下事情。

我的所有api端点的访问方式如下:

/v2/account
/v2/order

拥有一个传递了API版本的v2控制器,并在作为v2子类的版本特定控制器中调用适当的函数。

因此对于版本2013_02_13,它调用v2_2013_02_13::account进行帐户api调用

您将如何实现API版本控制系统,以使用PHP-mvc框架支持向后不兼容的更改?

在Kohana中,只需使用一个目录即可。所以你的控制器会这样放置。

application/classes/Controllers/V2_2013_02_13/Enpoint1Controller

然后你可以为你的不同版本设置路线。

Route::set('v2', 'v2/<controller>(/<action>)')
->defaults(array(
    'directory'  => 'V2_2013_02_13',
    'controller' => 'welcome',
    'action'     => 'index',
));

这将是最简单的方法,然而,如果你真的想有一些动态的方式来调用特定版本的控制器,我会看看Kohana的HMVC。

我的猜测是,您需要为每个版本提供一个入口控制器,并对正确的控制器进行内部请求。

也许是这样的。

路线:

Route::set('versioned', '<version>/<someAction>')
->defaults(array(
    'version'        => 'v2',
    'someAction'     => 'user'
    'controller'     => 'welcome',
    'action'         => 'index',
));

控制器:

class Controller_Welcome extends Controller {
    public function action_index()
    {
        // Your Version and the action
        $this->request->param('version');
        $this->request->param('someAction');
        // Do an internal request to the right controller (the v2/user is an example)
        $internalRequest = Request::factory('v2/user');
    }
}  

我希望这能有所帮助。