后端服务接口开发与业务逻辑实现

后端服务接口开发与业务逻辑实现

1 概述

后端服务接口是前后端数据交互的核心载体,负责接收前端请求、执行业务逻辑、操作数据存储并返回标准化响应。本文基于Spring Boot框架实现简易用户信息查询接口,演示接口定义、参数校验、业务处理、异常捕获与统一返回封装的完整流程,适用于中小型Web后端服务快速开发参考。

2 技术栈

  • 开发框架:Spring Boot 2.7.x
  • 依赖:Spring Web、Lombok
  • 数据存储:内存模拟(可替换为MyBatis/MyBatis-Plus对接MySQL)
  • 接口规范:RESTful风格,JSON格式请求响应

3 统一返回实体类

统一封装接口返回结果,包含状态码、提示信息、业务数据,便于前端统一解析。

typescript 复制代码
import lombok.Data;

@Data
public class Result<T> {
    private Integer code;
    private String msg;
    private T data;

    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setCode(200);
        result.setMsg("操作成功");
        result.setData(data);
        return result;
    }

    public static <T> Result<T> fail(Integer code, String msg) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

4 用户实体

kotlin 复制代码
import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private String email;
    private Integer age;
}

5 业务Service层

处理核心业务逻辑,模拟内存数据查询,可扩展数据库CRUD操作。

java 复制代码
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
public class UserService {

    private final List<User> userDB = new ArrayList<>();

    public UserService() {
        // 初始化模拟数据
        User u1 = new User();
        u1.setId(1L);
        u1.setUsername("zhangsan");
        u1.setEmail("zhangsan@example.com");
        u1.setAge(22);
        userDB.add(u1);

        User u2 = new User();
        u2.setId(2L);
        u2.setUsername("lisi");
        u2.setEmail("lisi@example.com");
        u2.setAge(25);
        userDB.add(u2);
    }

    public Optional<User> getUserById(Long id) {
        return userDB.stream().filter(item -> item.getId().equals(id)).findFirst();
    }

    public List<User> listAllUser() {
        return userDB;
    }
}

6 Controller接口层

定义HTTP接口,接收请求参数,调用业务层,处理空数据场景,返回统一结果。

kotlin 复制代码
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/user")
public class UserController {

    @Resource
    private UserService userService;

    @GetMapping("/list")
    public Result<List<User>> getUserList() {
        List<User> list = userService.listAllUser();
        return Result.success(list);
    }

    @GetMapping("/{id}")
    public Result<User> getUserInfo(@PathVariable Long id) {
        Optional<User> userOpt = userService.getUserById(id);
        if (userOpt.isPresent()) {
            return Result.success(userOpt.get());
        } else {
            return Result.fail(404, "用户不存在");
        }
    }
}

7 接口测试示例

  1. 获取全部用户 请求:GET /api/user/list
perl 复制代码
{
    "code":200,
    "msg":"操作成功",
    "data":[
        {"id":1,"username":"zhangsan","email":"zhangsan@example.com","age":22},
        {"id":2,"username":"lisi","email":"lisi@example.com","age":25}
    ]
}
  1. 根据ID查询用户 请求:GET /api/user/1
css 复制代码
{
    "code":200,
    "msg":"操作成功",
    "data":{"id":1,"username":"zhangsan","email":"zhangsan@example.com","age":22}
}
  1. 查询不存在用户 请求:GET /api/user/99
json 复制代码
{
    "code":404,
    "msg":"用户不存在",
    "data":null
}

8 核心要点说明

  1. 分层设计:Controller负责接收请求,Service承载业务逻辑,职责分离,便于单元测试和后续维护。
  2. 统一返回体:所有接口使用相同结构返回,前端不需要针对不同接口写差异化解析代码,降低联调成本。
  3. 异常与状态码:业务异常使用自定义业务码区分,和HTTP状态码解耦,便于精细化错误提示。
  4. 扩展性:示例使用内存模拟数据,实际项目中可直接替换为MyBatis操作数据库,增加参数校验、日志记录、接口鉴权、分页等能力。

9 总结

后端接口开发核心是合理分层、规范出入参、标准化返回。本文示例实现了基础REST接口,可在此基础上扩展分页查询、新增、修改、删除接口,增加全局异常处理器、请求日志、JWT认证等企业级能力,满足业务系统开发需求。

海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】

相关推荐
风骏时光牛马1 小时前
生成一个移动端标题,只需要一个标题,不需要其他的任何文本。
前端
IT_陈寒2 小时前
Redis雪崩把我坑惨了,这是5年经验的教训
前端·人工智能·后端
SameX2 小时前
HarmonyOS ArkUI List 的侧滑删除 用 ListItem 的 swipeAction + endIcon 的做法
前端
usdoc文档预览4 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户2705077725244 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
LuHang5 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风5 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276156 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
炫酷的大高个8 小时前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript
不可能片场8 小时前
内容运营自动化 配图折行别把词切两半
前端·electron