接口数据返回---标准格式

Posted jpfss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口数据返回---标准格式相关的知识,希望对你有一定的参考价值。

开发中,如果前端和后端,在没有统一返回数据格式,我们来看一下会发生什么:

后台开发人员A,在接口返回时,习惯返回一个返回码code=0000,然后返回数据;

后台开发人员B,在接口返回时,习惯直接返回一个boolean类型的success=true,然后返回数据;

后台开发人员C,在接口返回时,习惯在接口失败时返回码为code=0000。

可以看到,上面的三个开发人员,都没有大问题,没有谁对谁错,只要给前端接口文档,前端都是可以接上接口的。但是,在项目功能越来越多,接口数量持续增长时,对开发人员而言,就是一种灾难,同一个前端,如果对接A和C,那她接接口时会很崩溃。因为返回的code,同样是0000,但是一个代表成功,一个代表失败,这时前端就会去找两个人沟通,看可不可以统一一下,但是两个人一看,最近写了几十个接口了,还和别人对接过,牵一发动全身,没法做改动了。看,这就是灾难。

所以,在项目开发中,初期搭建框架时,定好通用的接口数据返回格式,定义好全局的状态码,是非常有必要的。一个项目,甚至整个公司,遵循同一套接口返回格式规范,这样可以极大的提高进度,降低沟通成本。

下面的两个类,一个是数据返回格式,是自定义的,很简单,但是可通用,这里分享一下,返回给前端时,根据情况,直接调用此类中的方法做返回值;另一个是状态码,这个可以根据项目实际情况,自己做修改。

接口数据返回格式:

  1. package response;
  2. import domain.ReturnCode;
  3. /**
  4. * Created by lightClouds917
  5. * Date 2017/11/10
  6. * Description:接口统一返回格式
  7. */
  8. public class ResponseWrapper {
  9. /**是否成功*/
  10. private boolean success;
  11. /**返回码*/
  12. private String code;
  13. /**返回信息*/
  14. private String msg;
  15. /**返回数据*/
  16. private Object data;
  17. /**
  18. * 自定义返回结果
  19. * 建议使用统一的返回结果,特殊情况可以使用此方法
  20. * @param success
  21. * @param code
  22. * @param msg
  23. * @param data
  24. * @return
  25. */
  26. public static ResponseWrapper markCustom(boolean success,String code,String msg,String data){
  27. ResponseWrapper responseWrapper = new ResponseWrapper();
  28. responseWrapper.setSuccess(success);
  29. responseWrapper.setCode(code);
  30. responseWrapper.setMsg(msg);
  31. responseWrapper.setData(data);
  32. return responseWrapper;
  33. }
  34. /**
  35. * 参数为空或者参数格式错误
  36. * @return
  37. */
  38. public static ResponseWrapper markParamError(){
  39. ResponseWrapper responseWrapper = new ResponseWrapper();
  40. responseWrapper.setSuccess(false);
  41. responseWrapper.setCode(ReturnCode.PARAMS_ERROR.getCode());
  42. responseWrapper.setMsg(ReturnCode.PARAMS_ERROR.getMsg());
  43. return responseWrapper;
  44. }
  45. /**
  46. * 查询失败
  47. * @return
  48. */
  49. public static ResponseWrapper markError(){
  50. ResponseWrapper responseWrapper = new ResponseWrapper();
  51. responseWrapper.setSuccess(false);
  52. responseWrapper.setCode(ReturnCode.FEAILED.getCode());
  53. responseWrapper.setMsg(ReturnCode.FEAILED.getMsg());
  54. responseWrapper.setData(null);
  55. return responseWrapper;
  56. }
  57. /**
  58. * 查询成功但无数据
  59. * @return
  60. */
  61. public static ResponseWrapper markSuccessButNoData(){
  62. ResponseWrapper responseWrapper = new ResponseWrapper();
  63. responseWrapper.setSuccess(true);
  64. responseWrapper.setCode(ReturnCode.NODATA.getCode());
  65. responseWrapper.setMsg(ReturnCode.NODATA.getMsg());
  66. responseWrapper.setData(null);
  67. return responseWrapper;
  68. }
  69. /**
  70. * 查询成功且有数据
  71. * @param data
  72. * @return
  73. */
  74. public static ResponseWrapper markSuccess(Object data){
  75. ResponseWrapper responseWrapper = new ResponseWrapper();
  76. responseWrapper.setSuccess(true);
  77. responseWrapper.setCode(ReturnCode.SUCCESS.getCode());
  78. responseWrapper.setMsg(ReturnCode.SUCCESS.getMsg());
  79. responseWrapper.setData(data);
  80. return responseWrapper;
  81. }
  82. public boolean isSuccess() {
  83. return success;
  84. }
  85. public void setSuccess(boolean success) {
  86. this.success = success;
  87. }
  88. public Object getData() {
  89. return data;
  90. }
  91. public void setData(Object data) {
  92. this.data = data;
  93. }
  94. public String getMsg() {
  95. return msg;
  96. }
  97. public void setMsg(String msg) {
  98. this.msg = msg;
  99. }
  100. public String getCode() {
  101. return code;
  102. }
  103. public void setCode(String code) {
  104. this.code = code;
  105. }
  106. @Override
  107. public String toString() {
  108. return "ResponseWrapper{" +
  109. "success=" + success +
  110. ", code=‘" + code + ‘\‘‘ +
  111. ", msg=‘" + msg + ‘\‘‘ +
  112. ", data=" + data +
  113. ‘}‘;
  114. }
  115. }

状态码

  1. package domain;
  2. /**
  3. * Created by lightClouds917
  4. * Date 2017/11/10
  5. * Description:接口返回码和返回值
  6. * 结合返回数据封装类ResponseWrapper,统一接口的数据返回格式
  7. */
  8. public enum ReturnCode {
  9. SUCCESS("0000","查询成功"),
  10. NODATA("0001","查询成功无记录"),
  11. FEAILED("0002","查询失败"),
  12. ACCOUNT_ERROR("1000", "账户不存在或被禁用"),
  13. API_NOT_EXISTS("1001", "请求的接口不存在"),
  14. API_NOT_PER("1002", "没有该接口的访问权限"),
  15. PARAMS_ERROR("1004", "参数为空或格式错误"),
  16. SIGN_ERROR("1005", "数据签名错误"),
  17. AMOUNT_NOT_QUERY("1010", "余额不够,无法进行查询"),
  18. API_DISABLE("1011", "查询权限已被限制"),
  19. UNKNOWN_IP("1099", "非法IP请求"),
  20. SYSTEM_ERROR("9999", "系统异常");
  21. private String code;
  22. private String msg;
  23. public String getCode() {
  24. return code;
  25. }
  26. public String getMsg() {
  27. return msg;
  28. }
  29. ReturnCode(String code, String msg) {
  30. this.code = code;
  31. this.msg = msg;
  32. }
  33. }

返回示例:

ResponseWrapper{success=true, code=‘0000‘, msg=‘查询成功‘, data=数据}
  1. ResponseWrapper{success=true, code=‘0001‘, msg=‘查询成功无记录‘, data=null}
  1. ResponseWrapper{success=false, code=‘0002‘, msg=‘查询失败‘, data=null}
  1. ResponseWrapper{success=false, code=‘1004‘, msg=‘参数为空或格式错误‘, data=null}
  1. ResponseWrapper{success=true, code=‘0000‘, msg=‘自定义msg‘, data=这是自定义的数据}

以上是关于接口数据返回---标准格式的主要内容,如果未能解决你的问题,请参考以下文章

接口返回值response统一标准格式

SpringBoot返回统一的JSON标准格式

SpringBoot返回统一的JSON标准格式

Note

如何使用接口将活动回调返回到片段

9.13面经