【Java学习】API接口数据规范

在日常开发中,一个优雅的API,必须提供简单明了的响应值,然后根据状态码就可以大概知道问题的所在。这里主要整理一下HTTP状态码和自定义状态码。

1、HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。

常见的HTTP状态码有:

200-请求成功。

301-资源(网页等)被永久转移到其它URL。

403-服务器拒绝访问。验证身份通过了,但是资源没有权限进行操作。

404-请求资源(网页等)不存在。

500-内部服务器错误。

504-网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求。

2、HTTP状态码分类

HTTP状态码可以分为5类:消息响应、成功响应、重定向、客户端错误、服务器错误。

状态

描述

100

继续。客户端应继续其请求

101

切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议。

200

请求成功。一般用于GET与POST请求。

201

已创建。成功请求并创建了新的资源。

202

已接受。已经接受请求,但未处理完成。

203

非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本。

204

无内容。服务器成功处理,但未返回内容。

205

重置内容。

300

多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。

301

永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。

302

临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。

303

查看其它地址。与301类似。使用GET和POST请求查看。

304

未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。

305

使用代理。所请求的资源必须通过代理访问。

400

客户端请求的语法错误,服务器无法理解。

401

用户身份认证失败。

402

保留,将来使用。

403

验证身份通过了,但是资源没有权限进行操作。

404

服务器无法根据客户端的请求找到资源(网页)。

405

客户端请求中的方法被禁止。

500

服务器内部错误,无法完成请求。

501

服务器不支持请求的功能,无法完成请求。

502

作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

503

由于超载或系统维护,服务器暂时的无法处理客户端的请求。

504

服务器作为网关或代理,但是没有及时从上游服务器收到请求。

3、自定义响应状态码规范

后端返回给前端一般使用json格式,定义如下:

{
    #返回状态码
    Code:integer,
    #返回信息描述
    message:string,
    #返回值
    data:object
}

3.1、返回接口

public interface IResultStatus {
    /**
     * 状态码
     * @return
     */
    Integer errorCode();
    /**
     * 异常信息
     * @return
     */
    String errorMsg();
}

3.2、状态码枚举:

public enum ResultStatus implements IResultStatus {
    /**
     * 状态码及对应信息
     */
    //成功状态码
    SUCCESS(0, "执行成功"),
    //参数错误:1001~1999
    PARAM_IS_INVALID(1001, "参数无效"),
    PARAM_IS_BLANK(1002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(1003, "参数类型错误"),
    //用户错误:2001~2999
    USER_LOGIN_ERROR(2001, "账号不存在或密码错误"),
    USER_ACCOUNT_FORBIDDEN(2002, "账户已被禁用"),
    USER_NOT_EXIST(2003, "用户不存在");
    private int errorCode;
    private String errorMsg;
    ResultStatus(int errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }
    @Override
    public Integer errorCode() {
        return errorCode;
    }
    @Override
    public String errorMsg() {
        return errorMsg;
    }
}

状态码和信息就会一一对应,比较好维护。这样前端同事在得到返回值后,根据状态码就可以知道,大概是什么错误,再根据message相关的信息描述,可以快速定位。

3.3、返回数据体

json格式,根据不同的业务有不同的json体,可以设计一个返回体类Result

@Data
public class Result<T> {
    private Integer code;
    private String message;
    private Object data;
    public Result(ResultStatus restStatus, Object data) {
        this.code = restStatus.errorCode();
        this.message = restStatus.errorMsg();
        this.data = data;
    }
    /**
     * 业务成功返回业务代码和描述信息
     */
    public static Result<Void> success() {
        return new Result<Void>(ResultStatus.SUCCESS, null);
    }
    /**
     * 业务成功返回业务代码,描述和返回的参数
     */
    public static <T> Result<T> success(T data) {
        return new Result<T>(ResultStatus.SUCCESS, data);
    }
    /**
     * 业务成功返回业务代码,描述和返回的参数
     */
    public static <T> Result<T> success(ResultStatus resultStatus, T data) {
        if (resultStatus == null) {
            return success(data);
        }
        return new Result<T>(resultStatus, data);
    }
    /**
     * 业务异常返回业务代码和描述信息
     */
    public static <T> Result<T> failure() {
        return new Result<T>(ResultStatus.PARAM_TYPE_BIND_ERROR, null);
    }
    /**
     * 业务异常返回业务代码,描述和返回的参数
     */
    public static <T> Result<T> failure(ResultStatus resultStatus) {
        return failure(resultStatus, null);
    }
    /**
     * 业务异常返回业务代码,描述和返回的参数
     */
    public static <T> Result<T> failure(ResultStatus resultStatus, T data) {
        if (resultStatus == null) {
            return new Result<T>(ResultStatus.PARAM_IS_INVALID, null);
        }
        return new Result<T>(resultStatus, data);
    }
}

3.4、返回体测试

@RestController
@RequestMapping("/api/demo2")
public class Demo2Controller {
    private static final HashMap<String, Object> INFO;
    static {
        INFO = new HashMap<>();
        INFO.put("name", "张三");
        INFO.put("age", "25");
    }
    @GetMapping("/getInfo")
    public Map<String, Object> getInfo() {
        return INFO;
    }
    @GetMapping("/getInfoResult")
    public Result<Map<String, Object>> getInfoResult() {
        return Result.success(INFO);
    }
}

结果参考:

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java Web API 接口开发实例可以分为以下步骤: 1. 设计 API 接口:定义 API 接口的请求和响应数据格式、接口地址、请求方法等。 2. 编写 API 接口实现代码:根据设计好的接口定义编写具体的 API 实现代码,处理请求数据并生成响应数据。 3. 部署 API 接口代码:将 API 实现代码部署到服务器上,使其可以被其他应用程序或服务调用。 4. 测试 API 接口:使用 API 调试工具对接口进行测试,验证接口的功能和正确性。 5. 文档编写和发布:编写 API 接口的文档,并发布到合适的文档平台上,方便其他开发者使用和集成。 具体实现中,可以使用 Java 的框架(如 Spring、Spring Boot 等)来简化 API 接口的开发和部署过程。同时,还可以使用常见的数据库(如 MySQL、MongoDB 等)来存储和管理 API 接口所需的数据。 ### 回答2: Java Web API接口开发实例 Java Web API是Web应用程序中最常用的一种技术。它通过一组标准和协议来允许Web应用程序与Web服务器之间相互通信。Java Web API通常被用于开发RESTful API接口,这种接口主要是基于HTTP协议和HTTP方法,以实现数据的传输和服务的调用。 下面将介绍一个Java Web API接口开发的实例。本实例主要实现的是一个简单的学生信息管理系统。 Step 1:准备工作 在开始开发Java Web API接口前,需要做好以下准备工作: 1.安装JDK和Eclipse开发环境。 2.下载并安装Tomcat Web Server。 3.使用Eclipse创建一个新的Java Web项目。 4.添加必要的依赖库。 Step 2:定义数据模型 在Java Web API接口中,需要使用数据模型来表示RESTful的资源。本例中定义的数据模型是学生信息,其中包括学生姓名、学号、性别、班级等信息。 Step 3:创建RESTful资源 在Java Web API接口中,需要使用RESTful风格的资源来实现数据的增删改查等操作,以此来实现对学生信息的管理。本例中,我们将使用以下HTTP方法来进行操作: 1.GET:获取学生信息列表和指定学号的学生信息。 2.POST:添加新的学生信息。 3.PUT:修改指定学号的学生信息。 4.DELETE:删除指定学号的学生信息。 Step 4:实现接口 根据RESTful接口的定义,我们需要分别实现以下请求: 1.获取学生信息列表:主要使用GET方法来实现,返回JSON格式的学生信息列表。 2.获取指定学号的学生信息:同样使用GET方法来实现,返回JSON格式的学生信息。 3.添加新的学生信息:使用POST方法来实现,在请求体中包含要添加的学生信息,返回成功或失败信息。 4.修改指定学号的学生信息:使用PUT方法来实现,在请求体中包含要修改的学生信息,返回成功或失败信息。 5.删除指定学号的学生信息:使用DELETE方法来实现,返回成功或失败信息。 Step 5:测试接口 使用Postman等工具来测试Java Web API接口的正确性,主要需要测试请求和响应的数据格式以及各类异常情况的处理。 总结 Java Web API接口开发是Web应用程序中不可或缺的一部分。对于想要开发基于Web的应用程序的开发者来说,精通Java Web API接口开发是必不可少的技能之一。掌握了Java Web API的开发技术,可以极大地提升Web应用程序的性能和用户体验。 ### 回答3: Java Web API 接口开发实例的目的是为了解决 Web 应用之间的数据交互问题。在这个过程中,使用基于 Java 的 Web API 接口对外提供数据交换接口,这样不仅能够使不同平台、不同语言的应用程序间进行数据交互,而且能够兼容现有的系统,提高系统的整体性能。 Java Web API 接口开发需要关注以下几个方面: 1. 接口设计 接口设计是 Java Web API 接口开发的一个重要环节,需要根据数据交换的需求设计 RESTful API 。RESTful API 是一种基于 HTTP 规范的 Web API 设计,它具有简洁、灵活、可扩展等特点,在实现Web API 接口开发时,能够快速创建符合规范接口。 2. 安全性 由于 Web API 接口经过公网传输,因此安全性是 Web API 接口开发不可忽视的因素。在接口开发中通常采用 Token 认证机制,来确保用户的身份安全,同时也需要考虑防止 SQL 注入等攻击,提高安全性。 3. 数据库操作 Java Web API 接口开发需要对底层数据库进行操作,常用的数据库包括 MySQL、PostgreSQL 等。在 API 接口开发中通常采用 ORM 框架来简化数据库操作,例如 MyBatis、Hibernate 等开源框架。 4. 使用 RESTful 工具包 使用 RESTful 工具包能够大大降低 Web API 接口开发的难度。常用的 RESTful 工具包包括 Jersey、Spring Web MVC 等,这些工具包提供了快速构建 RESTful API 接口的能力,同时也支持 JSON、XML 等常用的数据格式,便于数据交换。 综上所述,Java Web API 接口开发是实现跨平台、跨语言、实时数据交换的重要手段。在接口开发中需要关注接口设计、安全性、数据库操作和使用 RESTful 工具包等方面,这样才能够高效地实现数据交换接口,提高系统整体性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值