设计 Java API 接口(这里通常指对外暴露的 RESTful / RPC 接口,也可能是内部 Java 接口设计)是一个系统工程,既要考虑功能性,也要考虑可用性、可维护性、安全性。下面我从设计原则、分层结构、命名规范、参数与返回值、异常处理、安全与版本控制等方面系统说明。
先明确你设计的 API 是哪一种:
下面以**最主流的 RESTful Java API(Spring Boot)**为主。
❌ 错误示例:
POST /user // 又注册、又登录、又改信息
✅ 正确示例:
POST /users/register
POST /users/login
PUT /users/{id}
使用名词表示资源,用 HTTP 方法表达动作:
| 动作 | HTTP 方法 | 示例 |
|---|---|---|
| 查询 | GET | /users/{id} |
| 新增 | POST | /users |
| 修改 | PUT / PATCH | /users/{id} |
| 删除 | DELETE | /users/{id} |
推荐使用统一响应对象:
public class ApiResponse<T> {
private int code;
private String message;
private T data;
}
示例:
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"name": "Tom"
}
}
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ApiResponse<UserDTO> getUser(@PathVariable Long id) {
return ApiResponse.success(userService.getUserById(id));
}
@PostMapping
public ApiResponse<Void> createUser(@Valid @RequestBody UserCreateRequest request) {
userService.createUser(request);
return ApiResponse.success();
}
}
@Service
public class UserService {
public UserDTO getUserById(Long id) {
// 业务逻辑
}
public void createUser(UserCreateRequest request) {
// 业务逻辑
}
}
❌ 不要直接暴露 Entity
// 请求
public class UserCreateRequest {
@NotBlank
private String username;
}
// 返回
public class UserDTO {
private Long id;
private String username;
}
@GetMapping("/search")
public ApiResponse<List<UserDTO>> search(
@RequestParam String name,
@RequestParam int page
)
{
"page": 1,
"size": 10,
"total": 100,
"records": []
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public ApiResponse<Void> handle(BusinessException e) {
return ApiResponse.fail(e.getCode(), e.getMessage());
}
}
推荐 URL 或 Header 方式:
/api/v1/users
或
Accept: application/vnd.myapi.v1+json
@Operation(summary = "获取用户详情")
❌ 接口参数过多
❌ 返回结构不一致
❌ 直接用 Entity 返回
❌ 业务逻辑写在 Controller
❌ 错误码乱用
好的 Java API = 清晰的职责 + 统一的规范 + 安全的设计 + 易用的文档
如果你愿意,我可以:
你想做哪一类 API?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。