RESTful規範

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介紹到此結束!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章