iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Software Development

一個新鮮人如何完轉Spring boot與DevOps從0到101系列 第 9

談談 Spring boot Controller API 怎麼設計

說到了 controller 就不得不說一下 API,簡單來說就是負責建立客戶所需的內容和產生所需回應的內容。在 Web 世界中可以把它認為是一個取得 Web 資源的中介。RESTful API 是一種規範,它應用了 HTTP 協定來存取資源,可以藉由 GET、PUT、POST 和 DELETE 等 HTTP Method 進行資源操作。

REST API 支援的資料格式有以下,其中 application/json 被廣泛使用

  • application/json
  • application/xml
  • application/x-www-form-urlencoded
  • multipart/form-data

在 Spring Boot 中的 controller 我們可以藉由 @RestController 宣告說我要建立 RESTful Web 服務。以下描述了基本的 API 宣告和使用

宣告一個 GET 請求的資源,這通常用來獲取資料庫單一資源或是整個資源。當中的範例對應請求會是

curl -X GET -H "Content-Type: application/json" -d '{model 的資訊}' http://localhost:8080/api/list
@GetMapping(value = "/api/list", produces = APPLICATION_JSON_VALUE)
public ResponseEntity<?> post(Model model) {
    // do something
}

宣告一個 POST 請求的資源,用於新增資料或是上傳檔案等。當中的範例對應請求會是

curl -X POST -H "Content-Type: application/json" -d '{model 的資訊}' http://localhost:8080/api/upload
@PostMapping(value = "/api/upload",
            consumes = MULTIPART_FORM_DATA_VALUE,
            produces = APPLICATION_JSON_VALUE)
public ResponseEntity<?> post(Model model) {
    // do something
}

宣告一個 DELETE 請求的資源,用於刪除資源。當中的範例對應請求會是

curl -X DELETE http://localhost:8080/api/{id} # {id} 通常會是刪除該物件的主鍵或是可識別該物件的唯一值
@DeleteMapping("/api/{id}")
public ResponseEntity<Void> delete(@PathVariable String id) {
    // do something
}

宣告一個 PUT 請求的資源,用於更新資源。當中的範例對應請求會是

curl -X PUT -H "Content-Type: application/json" -d '{model 資訊}' http://localhost:8080/api/{id} # {id} 通常會是刪除該物件的主鍵或是可識別該物件的唯一值
@PutMapping(value = "/api/{id}", consumes = APPLICATION_JSON_VALUE)
public void update(@PathVariable String id, Model model){
    // do something
}

當中 MULTIPART_FORM_DATA_VALUE(檔案), APPLICATION_JSON_VALUE(JSON 格式) 可以約束 Client 必須傳什麼數據,當違反時將會回傳 4XX 代碼。

  • @RequestParam
    • request header
    • 通常用於 GET 請求
    • Content-Type 為 application/x-www-form-urlencoded
      • 表單中插入數據
  • @PathVariable
    • URI Template Pattern ex. http://localhost:8080/api/show/101?param1=10&param2=20
@RequestMapping("/show/{id}")
    public String getEmployee(@PathVariable(value="id") String id,
    @RequestParam(value="param1") String param1,
    @RequestParam(value="param2") String param2){
.......
}

上一篇
JAVA 8 的使用
下一篇
Lombok 利器去除冗餘
系列文
一個新鮮人如何完轉Spring boot與DevOps從0到10130

尚未有邦友留言

立即登入留言