1. 程式人生 > >介面資料返回---標準格式

介面資料返回---標準格式

開發中,如果前端和後端,在沒有統一返回資料格式,我們來看一下會發生什麼:

後臺開發人員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=這是自定義的資料}