接口數據返回---標准格式


開發中,如果前端和后端,在沒有統一返回數據格式,我們來看一下會發生什么:

后台開發人員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=這是自定義的數據}

        </div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM