說到了 controller 就不得不說一下 API,簡單來說就是負責建立客戶所需的內容和產生所需回應的內容。在 Web 世界中可以把它認為是一個取得 Web 資源的中介。RESTful API 是一種規範,它應用了 HTTP 協定來存取資源,可以藉由 GET、PUT、POST 和 DELETE 等 HTTP Method 進行資源操作。
REST API 支援的資料格式有以下,其中 application/json
被廣泛使用
在 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 代碼。
http://localhost:8080/api/show/101?param1=10¶m2=20
@RequestMapping("/show/{id}")
public String getEmployee(@PathVariable(value="id") String id,
@RequestParam(value="param1") String param1,
@RequestParam(value="param2") String param2){
.......
}