WANG LH , Research & Development

统一接口返回数据的类型

2021.05.31 22:05

ApiResp封装Demo github

为什么要统一接口返回数据结构

接口上方便后端与前端交互,同时也美化了后端接口返回的数据。

设计

{
    "status":{
        "code":0,
        "name":"OK",
        "msg":"succeed"
    },
    "data": object
}

status 返回接口状态相关信息
data 返回具体请求的业务数据

code状态码

可以根据需求去设计自己的错误类型,如下面这个例子:
1000~1999 区间表示参数错误
2000~2999 区间表示用户错误
3000~3999 区间表示接口异常
这样可以根据状态码大概就能知道是什么类型的错误。

name 状态码名称

与code一起设计,光看code数字有时可能会有点晕,看name简洁明了

msg 错误信息

捕获到异常报错信息,进一步封装成满足需求的的友好的错误提示。

实现思路

具体代码查看 ApiResp封装Demo github
封装ApiResp,Status类,然后通过@ControllerAdvice注解,实现ResponseBodyAdvice,对接口返回数据进行重写。
@ControllerAdvice注解很有意思,下次要写的统一封装异常返回也用到这个注解。

使用方式

使用demo
看代码并没有做什么封装处理,但是因为底层我们已经拦截(@ControllerAdvice ResponseBodyAdvice)并重写了,所以返回数据已经是按照我们定义的格式了。

@RestController
@RequestMapping(value = "/api/example/v1")
public class ExampleController {

  @GetMapping(value = "/resp/rewrite")
  public List<String> apiRespExample() {
    return Lists.newArrayList("hello", "world");
  }
}

请求接口返回数据:

{
    "status":{
        "code":0,
        "name":"OK",
        "msg":"succeed"
    },
    "data":[
        "hello",
        "world"
    ]
}