SpringBoot基礎教程 2-1-1 搭建RESTful風格Web服務

1. 概述

RESTful架構風格規定,數據的元操作,即CRUD(增刪查改)操作,分別對應於HTTP方法:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源,這樣就統一了數據操作的接口,僅通過HTTP方法,就可以完成對數據的所有增刪查改工作。

  • GET(SELECT):從服務器取出資源(一項或多項)。
  • POST(CREATE):在服務器新建一個資源。
  • PUT(UPDATE):在服務器更新資源(客戶端提供完整資源數據)。
  • PATCH(UPDATE):在服務器更新資源(客戶端提供需要修改的資源數據)。
  • DELETE(DELETE):從服務器刪除資源。

本文中例子RESTful API具體設計如下:

SpringBoot基礎教程 2-1-1 搭建RESTful風格Web服務

2. 本節重點

  • RESTful風格介紹
  • 使用SpringBoot,快速搭建RESTful風格Web服務

3. 工具

  • IntelliJ IDEA,直接官網下載,Ultimate版本,傻瓜式安裝
  • Maven,IntelliJ IDEA自帶無需安裝
  • Springboot ,版本2.0.3.RELEASE
  • Postman,測試工具,解壓無需安裝

4. 代碼分析

新建User實體類

public class User { private Integer userId; private String name; private Integer age; private String address; // 省略 get set方法}

快捷鍵Alt+Insert,可以生成構造器/Getter/Setter等

新建DAO層,查詢數據庫,這裡為了簡單用Map模擬

@Componentpublic class UserDao { // 數據層:查詢數據庫,這裡為了簡單用Map模擬 private static Integer count = 0;​ // 線程安全的Map private static Map userMap = Collections.synchronizedMap(new HashMap<>());​ static { // 靜態代碼塊,第一次初始化類時被調用 // 初始化userMap userMap.put(++count, User.builder().userId(count).name("Mkeeper").age(28).address("wuhan").build()); userMap.put(++count, User.builder().userId(count).name("Jam").age(22).address("beijing").build()); userMap.put(++count, User.builder().userId(count).name("Li").age(18).address("shanghai").build()); }​ public User findByUserId(Integer userId){ return userMap.get(userId); }​ public List findList(){ return new ArrayList<>(userMap.values()); }​ public User addUser(User user){ user.setUserId(++count); userMap.put(count, user); return user; }​ public User updateUser(User user){ userMap.put(user.getUserId(), user); return user; }​ public boolean deleteByUserId(Integer userId){ userMap.remove(userId); return true; }}

新建service層,包括接口與實現

public interface UserService { // 服務層:處理業務邏輯 User findByUserId(Integer userId); List findList(); User addUser(User user); User updateUser(User user); boolean deleteByUserId(Integer userId);}@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao;​ @Override public User findByUserId(Integer userId) { return userDao.findByUserId(userId); }​ @Override public List findList() { return userDao.findList(); }​ @Override public User addUser(User user) { return userDao.addUser(user); }​ @Override public User updateUser(User user) { return userDao.updateUser(user); }​ @Override public boolean deleteByUserId(Integer userId) { return userDao.deleteByUserId(userId); }}

新建操作user的接口

@RequestMapping("/users")@RestControllerpublic class UserController { // 入口:處理相應URL @Autowired private UserService userService;​ @GetMapping("/{userId}") public User findByUserId(@PathVariable Integer userId){ // 處理“/users/{userId}”的Get請求,獲取user信息 // url中的id可通過@PathVariable綁定到函數的參數中 return userService.findByUserId(userId); }​ @GetMapping("/") public List findList(){ // 處理“/users/”的Get請求,獲取用戶列表信息 // 還可以通過@RequestParam從頁面中傳遞參數來進行查詢條件或者翻頁信息的傳遞 return userService.findList(); }​ @PostMapping("/") public User addUser(@RequestBody User user){ // 處理"/users/"的POST請求,用來創建User // 除了@RequestBody綁定參數之外,還可以通過@RequestParam從頁面中傳遞參數 return userService.addUser(user); }​ @PutMapping("/") public User updateUser(@RequestBody User user){ // 處理"/users/{id}"的PUT請求,用來更新User信息 return userService.updateUser(user); }​ @DeleteMapping("/{userId}") public boolean deleteByUserId(@PathVariable Integer userId){ // 處理"/users/{id}"的DELETE請求,用來刪除User return userService.deleteByUserId(userId); }}

推薦一個查詢URL的快捷鍵:Ctrl+Shift+Alt+N,然後輸入url,可以快速查找對應Controller;該快捷鍵還可以查方法。

測試結果,這裡只展示新增的測試結果,其他接口測試還請讀者自行實踐

SpringBoot基礎教程 2-1-1 搭建RESTful風格Web服務

5. 工程目錄

SpringBoot基礎教程 2-1-1 搭建RESTful風格Web服務

6. 結束語

微服務盛行,RESTful風格接口大行其道,實踐後,才知道其實不復雜,原理是一樣的。有任何建議,歡迎留言探討。

本文源碼:github(Mkeeper666),gitee(Mkeeper)


分享到:


相關文章: