開發中,如果前端和后端,在沒有統一返回數據格式,我們來看一下會發生什么:
后台開發人員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=這是自定義的數據}
</div>