RESTful 是一種架構的規範與約束、原則,符合這種規範的架構就是 RESTful 架構。
一、動詞+賓語 結構
RESTful 的核心思想就是客戶端發出的數據操作指令都是“動詞+賓語”的結構。比如 GET /articles 這個命令,GET 是動詞,articles 是賓語。
動詞通常就是五種HTTP方法,對應CRUD操作。
-
GET:讀取(read)
-
POST:新建(create)
-
PUT:更新(update)
-
PATCH:更新(update),通常是部分更新
-
DELETE:刪除(delete)
根據HTTP規範,動詞一律大寫。
二、動詞的覆蓋
有些客戶端只能使用GET和POST這兩種方法,服務器必須接受POST模擬其他的三種方法(PUT、PATCH、DELETE)。這時,客戶端發出的HTTP請求,要加上 X-HTTP-Method_override 屬性,告訴服務器應該使用哪一個動詞來覆蓋POST方法。
POST /api/person/4 HTTP/1.1
X-HTTP-Method-Override:PUT
上面的代碼中,X-HTTP-Method-Override 指定本次請求的方法是PUT,而不是POST。
三、賓語必須是名詞
賓語就是API的URL,是http 動詞作用的對象。他應該是名詞,不能是動詞。比如:/articles 這個URL是正確的,而下面的URL不是名詞,所以都是錯誤的。
/getAllCars
/createNewCar
/delateAllRedCars
四、複數URL
想一想,既然URL是名詞,那麼應該使用複數,還是單數?
這沒有統一的規定,但是常見的操作是讀取一個集合,比如 GET /articles(讀取所有的文章),這裏明顯應該用複數。爲了統一起見,建議都是用複數URL,比如 GET /articles/2 更好於 GET /article/2 。
五、避免多級URL
常見的情況是,資源需要多級分類,因此很容易寫出多級的URL,比如獲取某個作者的某一類文章。
GET /authors/12/categories/2
這種URL不利於擴展,語義也不明確,往往要想一會才能明白其中的含義。更好的做法是除了第一級,其他級別都用查詢字符串表達。
GET /authors/12?categories=2
下面是另一個例子,查詢已發佈的文章,你可能會設計成下面的URL
GET /articles/published
使用查詢字符串會顯得更好
GET /articles?published=true
六、URL規範
GET https://damain.com/api/{模塊名}/{?菜單名}/{接口名}/:param
- 不能使用大寫,用中橫線- 不用下劃線_;
- 使用名詞表示資源集合,使用複數形式(爲確保所有的URL保持一致),不能使用動詞;
- 每個資源都至少有一個標識它的URL,同時應該遵循一個可預測的層次結構來提高可理解性,從而提高可用性;
- 無需網URL中增加版本號,通過HTTP請求頭信息的字段進行區分(或者在URL包含主版本信息,同時請求頭包含子版本信息)。
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0
後臺的String註解的使用
- @RequestMapping(method = RequestMethod.GET)
- @RequestMapping(method = RequestMethod.POST)
- @RequestMapping(method = RequestMethod.PUT)
- @RequestMapping(method = RequestMethod.DELETE)
StringBoot 很好的支持了RESTful 風格,使用起來更方便
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
1、前端頁面ajax調用也比較方便只需要在 type 設置對應的 "GET"、"POST"、"PUT"、"DELETE" 即可。
2、from表單只支持GET/POST提交 該怎麼解決?
添加HiddenHttpMethodFilter過濾器,可以將POST請求轉位PUT或DELETE。
<!--1.form表單添加隱藏域標籤,name="_method",value="PUT/DELETE”。-->
<form action="httpPut" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="修改"/>
</form>
<!--2.web.xml中配置HiddenHttpMethodFilter。-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
RESTful介紹到此結束!!!