在 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为修订号

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

现在需要在版本大于等于1.2.1时,响应字段全为字符串,为了处理次要版本号,可以利用内容协商功能通过 contentNegotiator 提供的行为。

图2

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

打印 $acceptParams

图3

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

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

图4

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

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

图5

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

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

图6

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

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

图7

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/180567.html

(0)
上一篇 2021年10月31日
下一篇 2021年10月31日

相关推荐

发表回复

登录后才能评论