RESTful API
-
產(chǎn)生背景
- 前后端分離后,前端調(diào)用指定API獲取到后端的數(shù)據(jù),再展示出來扒腕,而隨著前端設備的多樣性(手機,平板萤悴,桌面電腦瘾腰,其他專用設備等等),需要一種統(tǒng)一的機制覆履,方便前后端通信蹋盆,所以RESTful就是這樣一種API設計理念,可以通過一套統(tǒng)一的接口為web硝全,ios等提供服務栖雾。
-
REST
- REST 即:Representational State Transfer的縮寫,“表現(xiàn)層狀態(tài)轉(zhuǎn)化”伟众。
- 理解:
- 1.url定位資源
- 2.客戶端和服務端之間傳遞這種資源的表現(xiàn)層
- 3.客戶端通過HTTP動詞(get,post,delete,put,patch)對服務端資源進行操作析藕,實現(xiàn)變現(xiàn)層狀態(tài)轉(zhuǎn)化
-
RESTful 六大原則
-
C-S架構(gòu)
- 數(shù)據(jù)存儲在Server端,Client端只需要使用凳厢。前后端分離使得Client端的代碼可移植性增強账胧,Server端擴展性增強,兩端單獨開發(fā)先紫,互相不干擾治泥。
-
無狀態(tài)
- http請求本身就是無狀態(tài)的,基于C-S架構(gòu)遍愿,客戶端每一次請求都要帶著充分的信息讓服務端識別富玷。服務端根據(jù)請求的參數(shù)荆忍,無需保存客戶端的狀態(tài),將響應正確的返回給客戶端准脂,大大提高了效率和性能。
- 缺點就是客戶端的每一次請求都需要帶上相同重復的信息表明自己的身份和狀態(tài)眼俊,會造成傳輸?shù)娜唠s意狠,但這些對于性能和使用來說,可以忽略不計疮胖。
-
統(tǒng)一的接口
- REST架構(gòu)的核心內(nèi)容环戈,統(tǒng)一的接口對于RESTful服務來說非常必要,前端只需要關注接口澎灸,接口的可讀性增加院塞,使用人員方便調(diào)用
- REST接口約束為:
- 資源識別:通過url標識你要操作的資源
- 請求動作:通過請求動作(post,put,get等)標識執(zhí)行的操作
- 響應信息:通過返回的狀態(tài)碼來表示這次請求的執(zhí)行結(jié)果
-
一致的數(shù)據(jù)格式
服務端返回的數(shù)據(jù)要么是XML,要么是json性昭,要么是狀態(tài)碼
比如請求一條微博信息拦止,服務端響應信息應該包含這個微博相關的其他URL,客戶端就可以進一步利用這些URL發(fā)起請求獲取感興趣的信息,就像分頁,第一頁里可以獲取下一頁的URL就是這個原理
下面以返回數(shù)據(jù)json格式為例簡單講一下數(shù)據(jù)格式
-
返回數(shù)據(jù)通常含有一些字段:
code
-----HTTP響應狀態(tài)碼汹族,status
------包含文本“success”(其他) |'fail ‘ (狀態(tài)碼5××) |'error'(狀態(tài)碼4××)message
-----狀態(tài)值為’fail‘和’error‘時生效萧求,顯示錯誤信息data
-----包含響應的數(shù)據(jù),狀態(tài)值為fail或者error顶瞒,data僅包含錯誤原因或者異常名稱或者null也可以夸政。比如下面就是一個響應成功的json格式
{ "code": 200, "message": "success", "data": { "userName": "123456", "age": 16, "address": "beijing" } }
-
可緩存
- 在萬維網(wǎng)上,客戶端是可以緩存頁面的響應內(nèi)容榴徐,因此響應都應該顯式或隱示的定義為可緩存守问,如果不可以緩存也要避免客戶端拿舊數(shù)據(jù)或者臟數(shù)據(jù)來響應,緩存得當可以減少客戶端和服務端的交互坑资,進一步的優(yōu)化性能耗帕。
-
按需編碼,可定制代碼
- 服務端可選擇臨時給客戶端下發(fā)一些功能代碼讓客戶端來執(zhí)行袱贮,從而定制和擴展客戶端的某些功能仿便。比如服務端可以返回一些 Javascript 代碼讓客戶端執(zhí)行,去實現(xiàn)某些特定的功能字柠。提示:REST架構(gòu)中的設計準則中探越,只有按需編碼為可選項。如果某個服務違反了其他任意一項準則窑业,嚴格意思上不能稱之為RESTful風格钦幔。
-
-
HTTP動詞
- GET:從服務器取出資源
- POST:在服務器新建一個資源
- PUT: 在服務器更新資源(客戶端提供改變后的完整資源)
- PATCH:在服務器更新資源(客戶端提供改變的屬性)
- DELETE:從服務器刪除資源
-
HTTP狀態(tài)碼
- 1××:不常用,表示請求未成功
- 2××:成功
- 3××:重定向常柄,原有文件永久搬走或者臨時出走
- 4××: 客戶端的請求可能出錯了
- 5××: 服務端內(nèi)部出錯了