淺談RESTful API設計風格

關於RESTful API

相關資料:java

RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可使用XML格式定義或JSON格式定義。RESTFUL適用於移動互聯網廠商做爲業務使能接口的場景,實現第三方OTT調用移動網絡資源的功能,動做類型爲新增、變動、刪除所調用資源。後端

值得注意的是REST並無一個明確的標準,而更像是一種設計的風格。瀏覽器

重點:RESTful是一種URL的設計風格。網絡

解讀:RESTful並無嚴格的語法約定,不存在「必須知足什麼條件纔算是RESTful」,也並非「不知足什麼條件就必定不是RESTful」。一般,使用RESTful風格的API,響應給客戶端的數據是XML或JSON格式的,也就是「響應正文」,是使用了先後端分離的開發方式。架構

在RESTful架構中,瀏覽器使用POST,DELETE,PUT和GET四種請求方式分別對指定的URL資源進行增刪改查操做。所以,RESTful是經過URI實現對資源的管理及訪問,具備擴展性強、結構清晰的特色。app

解讀:RESTful建議針對不一樣操做,使用不一樣的請求類型,例如「註冊」的核心是插入用戶數據,應該使用POST類型的請求方式,而「修改密碼」的核心是更新數據,應該使用PUT類型的操做,等等。可是,基於開發人員的使用習慣,甚至某些複雜的業務可能包含增刪改查中的多種數據操做,沒法準確的定義這究竟是哪種操做,因此,常規作法依然只使用POSTGET這2種請求方式,並不使用PUTDELETE方式。框架

例如:如下URL就能夠視爲RESTful風格的:前後端分離

https://blog.csdn.net/x541211190/article/details/81141459
https://blog.csdn.net/wl_1013/article/details/81049691
複製代碼

其實,RESTful風格有一個很是典型的特徵:將核心參數直接做爲URL的一部分,而不是做爲參數來傳遞!ide

若是不採起RESTful風格,以上的URL可能須要設計爲:網站

https://blog.csdn.net/article/details/?username=x541211190&id=81141459
https://blog.csdn.net/article/details/?username=wl_1013&id=81049691
複製代碼

使用RESTful風格,可使得URL更加簡潔,更加易於閱讀或理解!

以上示例只是csdn是這樣設計的,把URL中域名以後的第1級固定爲「用戶名」,在details以後的固定爲id值,並不表明其它網站都必須這樣設計,甚至其它幾乎都不是這麼設計的,因此,到底怎麼設計URL,取決於開發人員對URL的理解,RESTful自己並無做爲相關約定!

若是沒有明確的約定,能夠採起如下風格:

/resources/id/command
複製代碼

/resouces/id/property/command
複製代碼

以上設計風格中:

  • resources:資源,也就是須要訪問的是哪一種數據;
  • id:數據的惟一標識,若是須要訪問的數據只有1條,且id須要公開,則添加;
  • property:要訪問的某條數據的哪一個屬性;
  • command:須要將某條數據或某條數據的屬性執行哪一種操做。

例如,能夠設計爲:

/users/password/change
/addresses/10/set_default
複製代碼

注意:若是將某參數值放在URL中,該參數必定是具備「惟一」特性的,不然,就不該該將該參數值放在URL中。

SpringMVC框架是支持RESTful風格的!在設計請求路徑時,若是請求路徑中包含某個可變的參數值,使用{}框住自定義的名稱便可,例如設計爲:

@RequestMapping("{aid}/set_default")
複製代碼

在處理請求的方法的參數列表中,經過@PathVariable註解便可獲取到URL中佔位符對應的值:

@RequestMapping("{aid}/set_default")
public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid) {
}
複製代碼
相關文章
相關標籤/搜索