public interface UserService {

User getUserById(Long id);

List<User> getAllUsers();

void createUser(User user);

}

// 不好的設(shè)計(jì):命名不一致,參數(shù)混亂

public interface UserService {

User getTheUserWithId(Long userId);

List<User> fetchAllUsersList();

Boolean addNewUserToSystem(User userObj);

}

2. 清晰的錯誤處理

public class ApiResponse<T> {

private boolean success;

private T data;

private String message;

// 構(gòu)造器和getter/setter省略

public static <T> ApiResponse<T> success(T data) {

ApiResponse<T> response = new ApiResponse<>();

response.setSuccess(true);

response.setData(data);

return response;

}

public static <T> ApiResponse<T> error(String message) {

ApiResponse<T> response = new ApiResponse<>();

response.setSuccess(false);

response.setMessage(message);

return response;

}

}

3. REST API 示例

@RestController

@RequestMapping("/api/v1/users")

public class UserController {

@Autowired

private UserService userService;

@GetMapping("/{id}")

public ApiResponse<User> getUser(@PathVariable Long id) {

try {

User user = userService.getUserById(id);

return ApiResponse.success(user);

} catch (UserNotFoundException e) {

return ApiResponse.error("用戶不存在");

}

}

@PostMapping

public ApiResponse<User> createUser(@RequestBody @Valid User user) {

try {

User createdUser = userService.createUser(user);

return ApiResponse.success(createdUser);

} catch (Exception e) {

return ApiResponse.error("創(chuàng)建用戶失敗:" + e.getMessage());

}

}

}

實(shí)用小貼士

  1. 版本控制:為 API 添加版本號,方便后續(xù)升級
  2. 文檔化:使用 Swagger 或 Spring Doc 自動生成 API 文檔
  3. 安全性:實(shí)現(xiàn)適當(dāng)?shù)恼J(rèn)證和授權(quán)機(jī)制
  4. 性能優(yōu)化:使用緩存和分頁技術(shù)

常見錯誤和解決方案

  1. 接口過度設(shè)計(jì):保持簡單,只暴露必要的功能
  2. 錯誤處理不當(dāng):統(tǒng)一錯誤響應(yīng)格式
  3. 缺乏安全考慮:添加適當(dāng)?shù)尿?yàn)證和授權(quán)
  4. 文檔缺失:及時(shí)更新 API 文檔

動手練習(xí)

創(chuàng)建一個簡單的圖書管理 API,要求:

  1. 實(shí)現(xiàn)基本的 CRUD 操作
  2. 添加錯誤處理
  3. 實(shí)現(xiàn)分頁查詢
  4. 添加接口文檔
// 這是一個基礎(chǔ)的示例框架

@RestController

@RequestMapping("/api/v1/books")

public class BookController {

@GetMapping

public ApiResponse<Page<Book>> getBooks(

@RequestParam(defaultValue = "0") int page,

@RequestParam(defaultValue = "10") int size) {

// 實(shí)現(xiàn)分頁查詢

return null; // 你來實(shí)現(xiàn)具體邏輯

}

// 添加其他CRUD操作...

}

進(jìn)階提示

小伙伴們,今天的 java 學(xué)習(xí)之旅就到這里啦!記得動手敲代碼,有問題隨時(shí)在評論區(qū)問凱哥哦。祝大家學(xué)習(xí)愉快,java 學(xué)習(xí)節(jié)節(jié)高!

本文章轉(zhuǎn)載微信公眾號@凱伊

上一篇:

Windows遠(yuǎn)端線程執(zhí)行任意API的設(shè)計(jì)與實(shí)現(xiàn)

下一篇:

B站微服務(wù)API管理
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時(shí)免費(fèi)