在 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为修订号
3、现在需要在版本大于等于1.2.1时,响应字段全为字符串,为了处理次要版本号,可以利用内容协商功能通过 contentNegotiator 提供的行为。contentNegotiator 行为可设置 yii\web\Response::$acceptParams 属性当它确定 支持哪些内容类型时。例如, 如果一个请求通过 Accept: application/json; version=2.0被发送,内容交涉后,yii\web\Response::$acceptParams将包含值[‘version’ => ‘2.0’]。代码如图2
4、打印 $acceptParams,结果如图3
5、基于 acceptParams 的版本信息,编写条件代码,具体含义为:请求的Headers中version不存在 或者 version存在且大于等于2.1,则处理,如图4
6、当请求的Headers中version不存在时,接口按照最新版本规范响应,响应字段全为字符串,如图5
7、当请求的Headers中version存在,但小于2.1时,接口按照小于1.2.1版本规范响应,字段不做处理,其中字段 room_status 为数字类型,如图6
8、当请求的Headers中version存在,且大于等于2.1时,接口按照最新版本规范响应,响应字段全为字符串,如图7
近期评论