← 返回博客列表

使用 Spring Boot 构建 RESTful API 的最佳实践

前言

在过去的一年里,我参与了多个基于 Spring Boot 的后端项目开发,逐渐积累了一些关于 RESTful API 设计的经验。本文总结了一些我认为比较重要的实践。

1. 统一响应格式

无论是在开发还是调试阶段,一个统一的响应格式都能大大降低沟通成本。我习惯使用如下结构:

{
  "code": 200,
  "message": "success",
  "data": {}
}

对应 Java 实现:

@Data
public class ApiResponse<T> {
    private Integer code;
    private String message;
    private T data;

    public static <T> ApiResponse<T> success(T data) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(200);
        response.setMessage("success");
        response.setData(data);
        return response;
    }

    public static <T> ApiResponse<T> error(Integer code, String message) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(code);
        response.setMessage(message);
        return response;
    }
}

2. 全局异常处理

借助 @RestControllerAdvice@ExceptionHandler,可以优雅地集中处理异常:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ApiResponse<?> handleValidation(MethodArgumentNotValidException ex) {
        String msg = ex.getBindingResult().getFieldErrors()
            .stream()
            .map(e -> e.getField() + ": " + e.getDefaultMessage())
            .collect(Collectors.joining(", "));
        return ApiResponse.error(400, msg);
    }

    @ExceptionHandler(Exception.class)
    public ApiResponse<?> handleException(Exception ex) {
        return ApiResponse.error(500, "服务器内部错误");
    }
}

3. 参数校验

Spring Boot 内置了 Bean Validation,配合 @Valid 注解可以很方便地做参数校验:

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

    @PostMapping
    public ApiResponse<User> create(@Valid @RequestBody CreateUserRequest request) {
        // 业务逻辑
    }
}

4. API 版本管理

推荐将版本号放在 URL 路径中:

  • /api/v1/users
  • /api/v2/users

这样在需要不兼容升级时,可以平滑过渡。

总结

以上就是我在实际项目中使用 Spring Boot 构建 RESTful API 时的一些实践。好的 API 设计应该在项目初期就确定好规范,避免后期返工。希望对你有所帮助。