牛皮的程序猿后端返回值怎么界说
《用户中心》
在后端接口封装中,我们一般都会对返回的数据做一个封装,以防止系统出现不可预期的数据布局和范例。比如如许:
布局体 1- {
- "success": true,
- "code": 200,
- "message": "成功",
- "data": {
- "items": [
- {
- "id": "1",
- "name": "小王",
- "identified": "JavaPub博主"
- }
- ]
- }
- }
复制代码 布局体 2- {
- "ret": 200,
- "data": {
- "title": "Default Api",
- "content": "王哥 您好,欢迎使用 apifather!",
- "version": "1.1.0",
- "time": 14231428021
- },
- "msg": ""
- }
复制代码 不论怎样界说,多一个或少一个字段,我们都须要同一规范。接下来我们拆解一下,
首先,通过观察,一定要有状态码,也就是案例中的 code 和 ret ,通过状态码可以知道当前程序那里出了问题,比如 200 就是乐成。有同砚会问,为何不消 data 来判断,为空或者为 0 就是错误,当然不行。
比如:下面这个布局,data 长度虽然即是 0,但是这属于确实没查到数据,而不是程序出错。- {
- "ret": 200,
- "data": [],
- "msg": ""
- }
复制代码 再看 data,这个毋庸置疑,它是接口的焦点数据,也是接口对外提供的业务数据。
再看 message 或者称为 msg,它是给状态做一个笔墨说明。比如,有个老六在界说了一个状态码(666),第一次调用这个接口的同砚大概并不知道返回的状态码寄义、也不想去查接口文档,我加个描述:(老六的接口不通啦),调用者就一目了然了。
最后看 success 字段,这个字段是为了更规范而加的,方便前端直接将接口响应状态展示。比如:用户登录乐成,可以展示一个 true,或者前端在判断时也可以写更简洁的代码 if result.success:。毕竟将(老六的接口不通啦)描述直接展示出来显得不太正式。
基于以上几点,我们的返回布局如许界说:
ApiResponse.class- // 定义API响应结构体
- public class ApiResponse<T> {
- private int status; // HTTP状态码
- private String message; // 状态信息
- private T data; // 返回的数据,泛型支持返回不同类型的数据
- // 构造函数
- public ApiResponse(ResponseStatus status) {
- this.status = status.getCode();
- this.message = status.getMessage();
- }
- // 带数据的构造函数
- public ApiResponse(ResponseStatus status, T data) {
- this(status);
- this.data = data;
- }
- // Getter和Setter方法
- // ...
- }
复制代码 界说完返回布局后,我们须要界说状态的枚举值。这是为了定一个同一的规范,方便开辟时状态码搞混。- // 定义状态码枚举
- public enum ResponseStatus {
- SUCCESS(200, "操作成功"),
- ERROR(500, "服务器内部错误"),
- BAD_REQUEST(400, "请求参数错误"),
- NOT_FOUND(404, "资源未找到"),
- UNAUTHORIZED(401, "未授权"),
- FORBIDDEN(403, "禁止访问");
- private final int code;
- private final String message;
- ResponseStatus(int code, String message) {
- this.code = code;
- this.message = message;
- }
- public int getCode() {
- return code;
- }
- public String getMessage() {
- return message;
- }
- }
复制代码 怎样使用呢- @GetMapping("/users/{id}")
- public ResponseEntity<ApiResponse<User>> getUser(@PathVariable Long id) {
- try {
- User user = userService.getUserById(id);
- if (user != null) {
- return ResponseEntity.ok(new ApiResponse<>(ResponseStatus.SUCCESS, user));
- } else {
- return ResponseEntity.status(HttpStatus.NOT_FOUND)
- .body(new ApiResponse<>(ResponseStatus.NOT_FOUND));
- }
- } catch (Exception e) {
- // 这里可以根据异常类型返回不同的错误状态码和消息
- return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .body(new ApiResponse<>(ResponseStatus.ERROR));
- }
- }
复制代码 这里使用了 Spring 自带的返回布局体 ResponseEntity 进行封装。
获取到的结果是如许的:- {
- "code": 200,
- "message": "操作成功",
- "data": {
- "id": "1",
- "name": "javapub",
- "age": 18
- }
- }
复制代码 原文地址: https://javapub.net.cn/star/project/user-center/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |