iT邦幫忙

2024 iThome 鐵人賽

DAY 10
1

現代web應用程式開發,前後端分離架構變得越來越普遍,其中又會提到RESTful API。

什麼是 RESTful API?

REST(Representational State Transfer)是一種「架構風格」,根據HTTP協議,使後端與前端或其他服務可以溝通更順暢,也更好維護。設計RESTful API時,依照HTTP進行不同操作,能清楚定義如何與伺服器資源互動。

常見的 HTTP 方法與示例

常用的HTTP方法以下幾種,搭配 Spring Boot 進行實作,以及對應回傳的json格式:

  • GET請求 - 讀取伺服器資源
    適合用於查詢或顯示現有數據。
@ApiOperation("讀取task")
@GetMapping("/tasks")
public List<TaskDTO> getAllTasks() {
    // 調用Service從DB查詢tasks
    return taskService.getAllTasks();
}

回傳的JSON:

[
  {
    "taskId": 1,
    "taskName": "撰寫報告",
    "taskStatus": "待完成"
  },
  {
    "taskId": 2,
    "taskName": "準備會議",
    "taskStatus": "進行中"
  }
]
  • POST請求 - 創建新資源
    向伺服器提交數據,適合用於表單提交。
@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": "待完成"
}
  • PUT請求 - 更新現有資源
    用來修改現有資料,適合更新特定資料。
@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": "已完成"
}
  • DELETE請求 - 刪除資源
    用來刪除伺服器上的特定資料。
@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 格式返回數據,更好與前端溝通。


上一篇
自動配置—Spring常見註解揭秘
下一篇
沒有要給你知道那麼多—DTO 設計應用
系列文
從卡關到通關的Spring Boot 腦內風暴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言