現代web應用程式開發,前後端分離架構變得越來越普遍,其中又會提到RESTful API。
REST(Representational State Transfer)是一種「架構風格」,根據HTTP協議,使後端與前端或其他服務可以溝通更順暢,也更好維護。設計RESTful API時,依照HTTP進行不同操作,能清楚定義如何與伺服器資源互動。
常用的HTTP方法以下幾種,搭配 Spring Boot 進行實作,以及對應回傳的json格式:
@ApiOperation("讀取task")
@GetMapping("/tasks")
public List<TaskDTO> getAllTasks() {
// 調用Service從DB查詢tasks
return taskService.getAllTasks();
}
回傳的JSON:
[
{
"taskId": 1,
"taskName": "撰寫報告",
"taskStatus": "待完成"
},
{
"taskId": 2,
"taskName": "準備會議",
"taskStatus": "進行中"
}
]
@ApiOperation("建立任務")
@PostMapping("/tasks")
public ResponseEntity<?> createTask(@RequestBody TaskDTO taskDTO) {
// 調用Service新增任務回傳結果
TaskDTO createdTask = taskService.createTask(taskDTO);
return ResponseEntity.status(HttpStatus.CREATED).body(createdTask);
}
請求的JSON:
{
"taskId": 3,
"taskName": "設計新功能",
"taskStatus": "待完成"
}
@ApiOperation("更新task")
@PutMapping("/tasks/{id}")
public ResponseEntity<?> updateTask(@PathVariable Long id, @RequestBody TaskDTO taskDTO) {
TaskDTO updatedTask = taskService.updateTask(id, taskDTO);
return ResponseEntity.ok(updatedTask);
}
請求的JSON:
{
"taskName": "寫報告",
"taskStatus": "已完成"
}
@ApiOperation("刪除task")
@DeleteMapping("/tasks/{id}")
public ResponseEntity<?> deleteTask(@PathVariable Long id) {
taskService.deleteTask(id);
return ResponseEntity.ok().body("任務已刪除");
}
回傳的JSON:
{
"message": "任務已刪除"
}
@GetMapping、@PostMapping等這些Spring MVC註解能自動處理HTTP路由和後端方法的映射,如果沒有這些註解,Spring Boot無法知道這些路徑要對應到後端的哪個控制方法,請求不會如期處理。
傳統是使用@RequestMapping,代碼冗長且閱讀性差:
@RequestMapping(value = "/tasks", method = RequestMethod.GET)
public List<TaskDTO> getAllTasks() {
return taskService.getAllTasks();
}
建議改用@GetMapping、@PostMapping等這些註解,代碼更加簡潔易讀,能快速構建RESTful API,並以 JSON 格式返回數據,更好與前端溝通。