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

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

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认证等企业级能力,满足业务系统开发需求。

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

相关推荐
牧艺41 分钟前
cos-design 4.0:91 个特效组件一次捅成 React / Vue / Web Components / Core
前端·vue.js·web components
沙蒿同学41 分钟前
Wails v2 实战:用 Go + Vue3 做一个真正能用的 AI 桌面应用
前端·javascript·后端
某亿41 分钟前
为什么我放弃了 esbuild,改用 typescript 包做运行时编译
前端·electron
Blanche150041 分钟前
优化 RAG 应用提升问答准确度
前端
颜进强42 分钟前
09 · NestJS Middleware 中间件:链路最外层那个"最像 Express"的家伙
前端·后端·ai编程
创新技术阁42 分钟前
FastapiAdmin 实战:演示模式开关失效的排查记录
前端·后端·fastapi
拖孩42 分钟前
一个人 + AI 做的小程序,一个半月把服务器钱赚回来一半了
前端·后端·微信小程序
编程老船长43 分钟前
权限不只是菜单按钮——QuickBlue 的 RBAC 与行级数据权限是怎么落地的
java·前端·后端
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent