接口规范化——你的JSON应该携带哪些信息
许多小伙伴在看完小编的json api接口的使用后,会发现大公司提供的json都有一定的格式。而且仿佛有一定的规律。接下来这篇文章,小编将带你了解为什么要对json接口进行封装,以及了解json封装数据的方法(以java为例)。
案例介绍
还记得快递一百api接口返回的JSON吗?我们请求这个链接的时候:
链接:http://www.kuaidi100.com/query?type=ems&postid=1111111111111
返回如下结果:
{
"message": "ok",
"nu": "1111111111111",
"ischeck": "1",
"com": "ems",
"status": "200",
"condition": "F00",
"state": "3",
"data": [
{
"time": "2021-05-26 09:45:08",
"context": "查无结果",
"ftime": "2021-05-26 09:45:08"
}
]
}
在看了其他api文档后我们发现,很多api返回的json都有一定的特点。比如都有status,都有message等等。接下来小编就来带你了解,一个json应该有哪些数据吧?
分析
一个json应该有哪些数据,应该由前端和后端进行讨论后得出,小编列出一些选项供各位小伙伴参考:
status:响应状态,一个json应该告诉前端返回状态,方便前端进行处理,比如出现404的时候应该通过前端跳转到404页面,响应信息就是用在这里。
message:响应信息,这个信息一般用来报错,如果没错就返回ok,有出现错误一般后端会把错误填写入这个字段中,比如权限不足这样的辅助提示,前端也可以将这个信息展示给用户。
data:用来存放数据,一般会以数组方式来存放数据,以对象数组存放的数据通常用来存放列表数据
page:存放分页的页数,有做数据分页的情况下,一般会返回一个page值。前端可以针对这个page值确定当前分页的页数
有些json还会根据前端的需求定义一些返回值,比如标题,url,时间等,json数据的定制具体还是由前后端交流后得出。
后端如何封装JSON数据
以下是小编开发过的一个web项目的json封装代码,各位小伙伴可以用作参考:
设置状态码:
public enum ResultType {
SUCCESS("200", "操作成功"),
FAIL("400", "操作失败"),
UNAUTHORIZED("401", "权限不足"),
NOT_FOUND("404", "接口不存在"),
INTERNAL_SERVER_ERROR("500", "服务器内部错误"),
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;
// 请求返回结果对象
public class Result<T> implements Serializable{
//返回状态编码
private String statusCode = ResultType.SUCCESS.getCode();
//返回提示信息
private String message = ResultType.SUCCESS.getName();
//返回结果
private T data = null;
//是否成功
private Boolean success = true;
//获取状态编码
public String getStatusCode() {
return statusCode;
}
//设置状态编码@param statusCode
public void setStatusCode(String statusCode) {
this.statusCode = statusCode;
}
//获取提示信息
public String getMessage() {
return message;
}
// 设置提示信息 @param message
public void setMessage(String message) {
this.message = message;
}
//获取返回结果@return
public T getData() {
return data;
}
//设置返回结果@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();
}
}
}
小结
以上就是json封装数据的全部内容。更多json知识可以参考json教程。