介面資料返回---標準格式
阿新 • • 發佈:2019-02-01
開發中,如果前端和後端,在沒有統一返回資料格式,我們來看一下會發生什麼:
後臺開發人員A,在介面返回時,習慣返回一個返回碼code=0000,然後返回資料;
後臺開發人員B,在介面返回時,習慣直接返回一個boolean型別的success=true,然後返回資料;
後臺開發人員C,在介面返回時,習慣在介面失敗時返回碼為code=0000。
可以看到,上面的三個開發人員,都沒有大問題,沒有誰對誰錯,只要給前端介面文件,前端都是可以接上介面的。但是,在專案功能越來越多,介面數量持續增長時,對開發人員而言,就是一種災難,同一個前端,如果對接A和C,那她接介面時會很崩潰。因為返回的code,同樣是0000,但是一個代表成功,一個代表失敗,這時前端就會去找兩個人溝通,看可不可以統一一下,但是兩個人一看,最近寫了幾十個介面了,還和別人對接過,牽一髮動全身,沒法做改動了。看,這就是災難。
所以,在專案開發中,初期搭建框架時,定好通用的介面資料返回格式,定義好全域性的狀態碼,是非常有必要的。一個專案,甚至整個公司,遵循同一套介面返回格式規範,這樣可以極大的提高進度,降低溝通成本。
下面的兩個類,一個是資料返回格式,是自定義的,很簡單,但是可通用,這裡分享一下,返回給前端時,根據情況,直接呼叫此類中的方法做返回值;另一個是狀態碼,這個可以根據專案實際情況,自己做修改。
介面資料返回格式:
package response; import domain.ReturnCode; /** * Created by lightClouds917 * Date 2017/11/10 * Description:介面統一返回格式 */ public class ResponseWrapper { /**是否成功*/ private boolean success; /**返回碼*/ private String code; /**返回資訊*/ private String msg; /**返回資料*/ private Object data; /** * 自定義返回結果 * 建議使用統一的返回結果,特殊情況可以使用此方法 * @param success * @param code * @param msg * @param data * @return */ public static ResponseWrapper markCustom(boolean success,String code,String msg,String data){ ResponseWrapper responseWrapper = new ResponseWrapper(); responseWrapper.setSuccess(success); responseWrapper.setCode(code); responseWrapper.setMsg(msg); responseWrapper.setData(data); return responseWrapper; } /** * 引數為空或者引數格式錯誤 * @return */ public static ResponseWrapper markParamError(){ ResponseWrapper responseWrapper = new ResponseWrapper(); responseWrapper.setSuccess(false); responseWrapper.setCode(ReturnCode.PARAMS_ERROR.getCode()); responseWrapper.setMsg(ReturnCode.PARAMS_ERROR.getMsg()); return responseWrapper; } /** * 查詢失敗 * @return */ public static ResponseWrapper markError(){ ResponseWrapper responseWrapper = new ResponseWrapper(); responseWrapper.setSuccess(false); responseWrapper.setCode(ReturnCode.FEAILED.getCode()); responseWrapper.setMsg(ReturnCode.FEAILED.getMsg()); responseWrapper.setData(null); return responseWrapper; } /** * 查詢成功但無資料 * @return */ public static ResponseWrapper markSuccessButNoData(){ ResponseWrapper responseWrapper = new ResponseWrapper(); responseWrapper.setSuccess(true); responseWrapper.setCode(ReturnCode.NODATA.getCode()); responseWrapper.setMsg(ReturnCode.NODATA.getMsg()); responseWrapper.setData(null); return responseWrapper; } /** * 查詢成功且有資料 * @param data * @return */ public static ResponseWrapper markSuccess(Object data){ ResponseWrapper responseWrapper = new ResponseWrapper(); responseWrapper.setSuccess(true); responseWrapper.setCode(ReturnCode.SUCCESS.getCode()); responseWrapper.setMsg(ReturnCode.SUCCESS.getMsg()); responseWrapper.setData(data); return responseWrapper; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Override public String toString() { return "ResponseWrapper{" + "success=" + success + ", code='" + code + '\'' + ", msg='" + msg + '\'' + ", data=" + data + '}'; } }
狀態碼
package domain; /** * Created by lightClouds917 * Date 2017/11/10 * Description:介面返回碼和返回值 * 結合返回資料封裝類ResponseWrapper,統一介面的資料返回格式 */ public enum ReturnCode { SUCCESS("0000","查詢成功"), NODATA("0001","查詢成功無記錄"), FEAILED("0002","查詢失敗"), ACCOUNT_ERROR("1000", "賬戶不存在或被禁用"), API_NOT_EXISTS("1001", "請求的介面不存在"), API_NOT_PER("1002", "沒有該介面的訪問許可權"), PARAMS_ERROR("1004", "引數為空或格式錯誤"), SIGN_ERROR("1005", "資料簽名錯誤"), AMOUNT_NOT_QUERY("1010", "餘額不夠,無法進行查詢"), API_DISABLE("1011", "查詢許可權已被限制"), UNKNOWN_IP("1099", "非法IP請求"), SYSTEM_ERROR("9999", "系統異常"); private String code; private String msg; public String getCode() { return code; } public String getMsg() { return msg; } ReturnCode(String code, String msg) { this.code = code; this.msg = msg; } }
返回示例:
ResponseWrapper{success=true, code='0000', msg='查詢成功', data=資料}
ResponseWrapper{success=true, code='0001', msg='查詢成功無記錄', data=null}
ResponseWrapper{success=false, code='0002', msg='查詢失敗', data=null}
ResponseWrapper{success=false, code='1004', msg='引數為空或格式錯誤', data=null}
ResponseWrapper{success=true, code='0000', msg='自定義msg', data=這是自定義的資料}