傳統Web應用和RESTful API
傳統模式
傳統模式沒有實現前后端分離,服務器處理完業務后直接返回完整的HTML頁面,每次操作都要刷新整個頁面。類似下面的情況:
@Controller
public class UserController {@RequestMapping("/addUser")public String addUser() {// 處理后返回JSP頁面return "user/add"; // 跳轉到添加用戶頁面}@RequestMapping("/saveUser")public String saveUser(User user) {userService.save(user);return "redirect:/userList"; // 重定向到用戶列表頁面}
}
RESTful API模式
RESTful API模式下,服務器不會返回整個頁面,前后端是分離的,對于作為后端的服務器來說只需要返回數據(通常是JSON格式的)。類似下面的情況:
@RestController
@RequestMapping("/api/users")
public class UserController {@GetMapping // 獲取所有用戶public List<User> getAllUsers() {return userService.findAll();}@PostMapping // 創建新用戶public Result createUser(@RequestBody User user) {userService.save(user);return Result.success("用戶創建成功");}@DeleteMapping("/{id}") // 刪除用戶public Result deleteUser(@PathVariable Long id) {userService.delete(id);return Result.success("用戶刪除成功");}
}
總結
為什么我需要搞清楚這個呢,是由于學習Spring MVC的時候,Spring MVC的執行流程中的DispatcherServlet去解析Controller的返回值這個步驟困惑住了我,如果是RESTful API模式,其實就沒有這個流程,如果是傳統Web模式,就會又這個步驟。
下面是簡化的Spring MVC在兩種模式下的執行流程:
傳統模式執行流程:
1. DispatcherServlet接收請求
2. HandlerMapping找到Controller
3. HandlerAdapter調用Controller方法
4. Controller返回ModelAndView(或字符串)
5. DispatcherServlet調用ViewResolver ← 這一步存在
6. ViewResolver解析視圖名 → 物理視圖
7. 渲染視圖(填充數據)
8. 返回HTML頁面
RESTful模式執行流程:
1. DispatcherServlet接收請求
2. HandlerMapping找到Controller
3. HandlerAdapter調用Controller方法
4. Controller返回數據對象
5. HttpMessageConverter序列化對象 ← 跳過視圖解析
6. 直接返回JSON數據