在 Yii 2 框架中实现接口的向后兼容的流程

1、兼容目标:将飞流的响应调整为体奥的响应规范(将非数组的字段类型转换为字符串),且向后兼容
注:请求的Headers中version不存在 或者 version存在且大于等于2.1,则响应字段全为字符串。否则为飞流原始字段。

2、基于 Postman 调用接口,要求接口按照版本号为 1.2.1 的约定响应,其中字段 room_status 为数字类型,如图1
注:V1中的1为主版本号,version=2.1中的2为次版本号,version=2.1中的1为修订号

图1

3、现在需要在版本大于等于1.2.1时,响应字段全为字符串,为了处理次要版本号,可以利用内容协商功能通过 contentNegotiator 提供的行为。contentNegotiator 行为可设置 yii\web\Response::$acceptParams 属性当它确定 支持哪些内容类型时。例如, 如果一个请求通过 Accept: application/json; version=2.0被发送,内容交涉后,yii\web\Response::$acceptParams将包含值[‘version’ => ‘2.0’]。代码如图2

图2

4、打印 $acceptParams,结果如图3

图3

5、基于 acceptParams 的版本信息,编写条件代码,具体含义为:请求的Headers中version不存在 或者 version存在且大于等于2.1,则处理,如图4

图4

6、当请求的Headers中version不存在时,接口按照最新版本规范响应,响应字段全为字符串,如图5

图5

7、当请求的Headers中version存在,但小于2.1时,接口按照小于1.2.1版本规范响应,字段不做处理,其中字段 room_status 为数字类型,如图6

图6

8、当请求的Headers中version存在,且大于等于2.1时,接口按照最新版本规范响应,响应字段全为字符串,如图7

图7

永夜