SpringBoot ~ Restful請求風格

Restful請求風格

  • 在RESTful架構中,每個網址代表一種資源(resource),所以網址中不能有動詞,只能有名詞,而且所用的名詞往往與數據庫的表格名對應。一般來說,數據庫中的表都是同種記錄的"集合"(collection),所以API中的名詞也應該使用複數。
  • 對於資源的具體操作類型,由HTTP動詞表示。

    • 常用的HTTP動詞有下面五個(括號裏是對應的SQL命令)。

      • GET(SELECT):從服務器取出資源(一項或多項)。
      • POST(CREATE):在服務器新建一個資源。
      • PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
      • PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
      • DELETE(DELETE):從服務器刪除資源。
    • 還有兩個不常用的HTTP動詞。

      • HEAD:獲取資源的元數據。
      • OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。
  • 舉例如下:

    • GET /zoos:列出所有動物園
    • POST /zoos:新建一個動物園
    • GET /zoos/ID:獲取某個指定動物園的信息
    • PUT /zoos/ID:更新某個指定動物園的信息(提供該動物園的全部信息)
    • PATCH /zoos/ID:更新某個指定動物園的信息(提供該動物園的部分信息)
    • DELETE /zoos/ID:刪除某個動物園
    • GET /zoos/ID/animals:列出某個指定動物園的所有動物
    • DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物
  • 狀態碼

    • 200 OK - [GET]:服務器成功返回用戶請求的數據,該操作是冪等的(Idempotent)。
    • 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
    • 202 Accepted - [*]:表示一個請求已經進入後臺排隊(異步任務)
    • 204 NO CONTENT - [DELETE]:用戶刪除數據成功。
    • 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作,該操作是冪等的。
    • 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
    • 403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
    • 404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
    • 406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是隻有XML格式)。
    • 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
    • 422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
    • 500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷髮出的請求是否成功。
  1. SpringBoot請求方法代碼參考

    /**
     * @author wsyjlly
     * @create 2019.06.10 - 19:00
     * GET(SELECT):從服務器取出資源(一項或多項)。
     * POST(CREATE):在服務器新建一個資源。
     * PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
     * PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
     * DELETE(DELETE):從服務器刪除資源。
     **/
    @RestController
    @RequestMapping("/cors")
    public class RestfulCorsController {
        @RequestMapping("/")
        public Map<String,String> itemOperator(@RequestBody ModelMap params){
            Map<String,String> map = new HashMap<>();
            map.put("name", (String) params.get("name"));
            System.out.println(params);
            return map;
        }
    
        @PostMapping("/add")
        public Map<String,String> addItem(@RequestBody ModelMap params){
            Map<String,String> map = new HashMap<>();
            map.put("name", (String) params.get("name"));
            System.out.println(params);
            return map;
        }
    
        @DeleteMapping("/{id}")
        public String deleteItem(@PathVariable Long id){
            System.out.println(id);
            return String.valueOf(id);
        }
    
        @PutMapping("/{id}")
        public String updateItem(@PathVariable Long id){
            System.out.println(id);
            return String.valueOf(id);
        }
    
        @PatchMapping("/patch")
        public String updateItem(@RequestBody ModelMap entity){
            System.out.println(entity);
            return "STATUS";
        }
    
        @GetMapping("/{id}")
        @CrossOrigin(value = "*",allowedHeaders = "*",maxAge = 1800)
        public String getItem(@RequestParam(value = "id", required = false, defaultValue = "1601141019") @PathVariable Long id){
            System.out.println(id);
            return String.valueOf(id);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章