版本

    关于如何实现 API 版本,一个常见的做法是在 API 的 URL 中嵌入版本号。例如,
    代表 /users 版本 1 的 API。

    另一种 API 版本化的方法,
    最近用的非常多的是把版本号放入 HTTP 请求头,通常是通过 Accept 头,如下:

    为每个模块提供一个主要版本, 它应该包括资源类和控制器类
    为特定服务版本。 更好的分离代码, 你可以保存一组通用的
    基础资源和控制器类, 并用在每个子类版本模块。 在子类中,
    实现具体的代码例如 Model::fields()

    你的代码可以类似于如下的方法组织起来:

    你的应用程序配置应该这样:

    使用模块, 将不同版本的代码隔离。 通过共用基类和其他类
    跨模块重用代码也是有可能的。

    为了处理次要版本号, 可以利用内容协商
    功能通过 [[yii\filters\ContentNegotiator|contentNegotiator]] 提供的行为。 contentNegotiator 行为可设置
    [[yii\web\Response::acceptParams]] 属性当它确定支持哪些内容类型时。

    例如, 如果一个请求通过 Accept: application/json; version=v1 被发送,
    内容交涉后,[[yii\web\Response::acceptParams]]将包含值['version' => 'v1']

    由于次要版本需要保持向后兼容性,希望你的代码不会有
    太多的版本检查。否则,有机会你可能需要创建一个新的主要版本。