

前阵子接手了一个项目,上线后发现接口响应时间动不动就超过 500ms,用户反馈卡顿严重。排查了一圈代码,发现问题很简单——之前写 API 的时候压根没按规范来,该用的注解没用,该做的异常处理没做。
踩了这个坑之后,花时间系统梳理了一下 Spring Boot REST API 的最佳实践,写出来分享给各位。下面的内容全部是实战经验,不整虚的。
做 REST API,第一件事就是把资源(Resource)的概念搞清楚。资源是什么?说白了就是你操作的对象——用户、订单、商品,都叫资源。
设计的时候有几个要点:
/users、/orders测试工具这块,推荐用 Postman,调试接口很方便。来看个最基础的例子,获取用户列表:
@RestController
@RequestMapping("/users")
public class UserController { @GetMapping public List<User> getUsers() { return userRepository.findAll(); }
}
@GetMapping 把 /users 这个端点映射到 getUsers() 方法,返回用户列表。简单直接,但真实项目里这么裸写可不行,后面会说问题在哪。
很多新手写接口喜欢一个 @RequestMapping 走天下,不管干什么都用 POST。这属于是给自己挖坑——HTTP 方法选错了,语义不通,后续维护和前端对接都难受。
基本原则:
举个好例子,创建用户的接口:
@PostMapping
public User createUser(@RequestBody User user) { return userRepository.save(user);
}
@PostMapping 对应新增操作,@RequestBody 接收请求体里的 JSON 数据。语义对了,代码读起来才不费劲。
这块是大多数项目最容易翻车的地方。我见过太多接口出异常了直接抛个 RuntimeException 就完事,前端拿到 500 错误一脸懵,查日志也不知道从哪下手。
生产级别的异常处理应该这么搞:
用 try-catch 配合日志框架(比如 Logback)来处理:
@GetMapping
public List<User> getUsers() { try { return userRepository.findAll(); } catch (Exception e) { logger.error("Error fetching users", e); throw new RuntimeException(e); }
}
这里把异常信息记录到日志,同时抛出去让上层处理。实际项目中更推荐用 @ControllerAdvice 统一处理异常,返回结构化的错误响应。
API 的性能瓶颈一半在代码,另一半在数据库。表结构设计不合理,SQL 写得再漂亮也没用。
几个关键点:
用 Hibernate(或者 JPA)这类 ORM 工具管理数据库 Schema 很方便,实体类和表结构对应起来,迁移的时候也省事。来看个简单的建表语句:
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255)
);
users 表包含 id、name、email 三个字段,id 作为主键。实际项目里字段肯定比这多,但原则是一样的——字段类型选对、索引建好、约束加上。
整理了一下常见的错误,这些坑我基本都踩过:
尤其是最后这条,安全问题绝对不是小事。上线前一定要检查有没有做认证授权。
生产环境的 API 不做安全防护,等于开门揖盗。常见的安全手段:
业界常用的方案是 OAuth 2.0 + JWT(JSON Web Token)的组合。JWT 的好处是无状态,服务端不用存 session,扩展性好。
看个接收 Token 的例子:
@GetMapping
public List<User> getUsers(@RequestHeader("Authorization") String token) { // Verify the token and authenticate the user return userRepository.findAll();
}
@RequestHeader 注解从请求头里取 Authorization 字段,里面装着 JWT Token。后端拿到 Token 之后验签、解析、鉴权,一套流程走完才知道这个请求能不能放行。
建议用 @ControllerAdvice 统一拦截所有异常,返回统一格式的错误响应。配合 Logback 记录日志,把异常堆栈、请求路径、操作人这些关键信息都记下来,方便排查问题。
基础的可以用 Spring Security 做认证,复杂一点的引入 OAuth 2.0。Token 方案推荐 JWT,无状态、跨域友好、性能好。记得敏感接口要加上接口级别的权限校验。
用 JPA/Hibernate 做 ORM,实体类就是表结构,代码即文档。设计的时候先想清楚查询场景,常用条件字段加上索引。表关联尽量少用多表 Join,数据量大的时候分库分表或者用 Elasticsearch 做检索。
看操作语义:查资源用 GET、改资源用 PUT/DELETE、新增用 POST。不要用 GET 做删除,也不要用 POST 做查询。前端和后端约定好语义,统一规范。
做好一个生产级的 Spring Boot REST API,设计层面要理解 REST 原则,编码层面要做好异常处理和日志记录,数据层面要设计好数据库 Schema,安全层面要把认证授权做到位。
说到底没什么高深的东西,关键是把每个环节都做到位,别图省事。上线前多检查,上线后出问题才不慌。
原文链接:https://dev.to/shubh2-0/spring-boot-rest-api-best-practices-in-2026-a-production-guide-1c5a