App下載

接口規(guī)范化——你的JSON應(yīng)該攜帶哪些信息

猿友 2021-06-21 10:54:01 瀏覽數(shù) (2904)
反饋

許多小伙伴在看完小編的json api接口的使用后,會(huì)發(fā)現(xiàn)大公司提供的json都有一定的格式。而且仿佛有一定的規(guī)律。接下來這篇文章,小編將帶你了解為什么要對(duì)json接口進(jìn)行封裝,以及了解json封裝數(shù)據(jù)的方法(以java為例)。

案例介紹

還記得快遞一百api接口返回的JSON嗎?我們請求這個(gè)鏈接的時(shí)候:

鏈接:?http://www.kuaidi100.com/query?type=ems&postid=1111111111111?

返回如下結(jié)果:

{
    "message": "ok",
    "nu": "1111111111111",
    "ischeck": "1",
    "com": "ems",
    "status": "200",
    "condition": "F00",
    "state": "3",
    "data": [
        {
            "time": "2021-05-26 09:45:08",
            "context": "查無結(jié)果",
            "ftime": "2021-05-26 09:45:08"
        }
    ]
}

在看了其他api文檔后我們發(fā)現(xiàn),很多api返回的json都有一定的特點(diǎn)。比如都有status,都有message等等。接下來小編就來帶你了解,一個(gè)json應(yīng)該有哪些數(shù)據(jù)吧?

分析

一個(gè)json應(yīng)該有哪些數(shù)據(jù),應(yīng)該由前端和后端進(jìn)行討論后得出,小編列出一些選項(xiàng)供各位小伙伴參考:

status:響應(yīng)狀態(tài),一個(gè)json應(yīng)該告訴前端返回狀態(tài),方便前端進(jìn)行處理,比如出現(xiàn)404的時(shí)候應(yīng)該通過前端跳轉(zhuǎn)到404頁面,響應(yīng)信息就是用在這里。

message:響應(yīng)信息,這個(gè)信息一般用來報(bào)錯(cuò),如果沒錯(cuò)就返回ok,有出現(xiàn)錯(cuò)誤一般后端會(huì)把錯(cuò)誤填寫入這個(gè)字段中,比如權(quán)限不足這樣的輔助提示,前端也可以將這個(gè)信息展示給用戶。

data:用來存放數(shù)據(jù),一般會(huì)以數(shù)組方式來存放數(shù)據(jù),以對(duì)象數(shù)組存放的數(shù)據(jù)通常用來存放列表數(shù)據(jù)

page:存放分頁的頁數(shù),有做數(shù)據(jù)分頁的情況下,一般會(huì)返回一個(gè)page值。前端可以針對(duì)這個(gè)page值確定當(dāng)前分頁的頁數(shù)

有些json還會(huì)根據(jù)前端的需求定義一些返回值,比如標(biāo)題,url,時(shí)間等,json數(shù)據(jù)的定制具體還是由前后端交流后得出。

后端如何封裝JSON數(shù)據(jù)

以下是小編開發(fā)過的一個(gè)web項(xiàng)目的json封裝代碼,各位小伙伴可以用作參考:

設(shè)置狀態(tài)碼:

public enum ResultType {
    SUCCESS("200", "操作成功"),
    FAIL("400", "操作失敗"),
    UNAUTHORIZED("401", "權(quán)限不足"),
    NOT_FOUND("404", "接口不存在"),
    INTERNAL_SERVER_ERROR("500", "服務(wù)器內(nèi)部錯(cuò)誤"),
    AGAIN_LOGIN("600", "請重新登錄");

    private String code;
    private String name;

    ResultType(String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }
    public String getName() {
        return name;
    }
}

json封裝:

import java.io.Serializable;
// 請求返回結(jié)果對(duì)象
public class Result<T> implements Serializable{
	//返回狀態(tài)編碼
	private String statusCode = ResultType.SUCCESS.getCode();
	//返回提示信息
	private String message = ResultType.SUCCESS.getName();
	//返回結(jié)果
	private T data = null;
	//是否成功
	private Boolean success = true;
	//獲取狀態(tài)編碼
	public String getStatusCode() {
		return statusCode;
	}
	//設(shè)置狀態(tài)編碼@param statusCode
	public void setStatusCode(String statusCode) {
		this.statusCode = statusCode;
	}
	//獲取提示信息
	public String getMessage() {
		return message;
	}
	// 設(shè)置提示信息 @param message
	public void setMessage(String message) {
		this.message = message;
	}
	//獲取返回結(jié)果@return
	public T getData() {
		return data;
	}
	//設(shè)置返回結(jié)果@param data
	public void setData(T data) {
		this.data = data;
	}
	public Boolean isSuccess() {
		return success;
	}
	public void setSuccess(Boolean success) {
		this.success = success;
	}
	public void addError() {
		this.addError("");
	}
	public void addError(String message) {
		this.success = false;
		this.message = message;
		this.statusCode = ResultType.INTERNAL_SERVER_ERROR.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.INTERNAL_SERVER_ERROR.getName();
		}
	}
	public void success() {
		this.success("");
	}
	public void success(String message) {
		this.success = true;
		this.message = message;
		this.statusCode = ResultType.SUCCESS.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.SUCCESS.getName();
		}
	}
	public void fail() {
		this.fail("");
	}
	public void fail(String message) {
		this.success = false;
		this.message = message;
		this.statusCode = ResultType.FAIL.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.FAIL.getName();
		}
	}
	public void unauthorized() {
		this.unauthorized("");
	}
	public void unauthorized(String message) {
		this.success = false;
		this.message = message;
		this.statusCode = ResultType.UNAUTHORIZED.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.UNAUTHORIZED.getName();
		}
	}
	public void notFound() {
		this.notFound("");
	}
	public void notFound(String message) {
		this.success = false;
		this.message = message;
		this.statusCode = ResultType.NOT_FOUND.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.NOT_FOUND.getName();
		}
	}
	public void againLogin() {
		this.againLogin("");
	}
	public void againLogin(String message) {
		this.success = false;
		this.message = message;
		this.statusCode = ResultType.AGAIN_LOGIN.getCode();
		if(this.message == null || "".equals(this.message)){
			this.message = ResultType.AGAIN_LOGIN.getName();
		}
	}
}

小結(jié)

以上就是json封裝數(shù)據(jù)的全部內(nèi)容。更多json知識(shí)可以參考json教程。


0 人點(diǎn)贊