牛皮的程序猿后端返回值怎么定义

简介: 在后端接口封装中,通常会统一返回数据格式,确保稳定性和可预测性。常见的模式包括状态码(如`code`或`ret`)、状态信息(`message`或`msg`)、核心数据(`data`)。`success`字段提供了一种直观判断接口是否成功的标志。例如:

在后端接口封装中,我们一般都会对返回的数据做一个封装,以防止系统出现不可预期的数据结构和类型。比如这样:

结构体 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": ""
}

不论如何定义,多一个或少一个字段,我们都需要统一规范。接下来我们拆解一下,

首先,通过观察,一定要有状态码,也就是案例中的 coderet ,通过状态码可以知道当前程序哪里出了问题,比如 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/

目录
相关文章
|
7月前
|
监控 NoSQL Java
后端接口性能优化分析-问题发现&问题定义(下)
后端接口性能优化分析-问题发现&问题定义
162 0
|
7月前
|
SQL 缓存 监控
后端接口性能优化分析-问题发现&问题定义(上)
后端接口性能优化分析-问题发现&问题定义
532 0
|
JSON 前端开发 API
后端API接口标准定义
后端API接口标准定义
229 0
|
存储 弹性计算 运维
我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )
我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )
504 0
|
前端开发 JavaScript .NET
【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--控制器的声明定义和发现篇(3/8)
文章目录 前情概要 前面文章把路由已经介绍的差不多了,包括url映射,路由选择等。接下来讲一讲controller的一些基本规则 BaseController的所有代码都在这里拉。相当简单。 主要逻辑:我们的组件接到请求后,根据url规则找到对应的controller和要处理的请求的action后,直接new一个controller出来,把req,res等对象传递给controller对象。
1043 0
|
12天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
38 4
|
3天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
|
18天前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
21天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####

热门文章

最新文章

下一篇
DataWorks