(一)RESTful架構風格特點
1、統一接口風格
http://服務器地址:端口號[/項目名稱/版本/資源]
http://
:為我們HTTP協議的訪問頭標准。服務器地址
:為我們項目服務器IP地址。端口號
:為我們服務器內項目訪問的指定編號。[/項目名稱/版本]
:可選 。資源
:互聯網-圖片、音樂、視頻、文本、數據。
2、規范的HTTP請求方法
GET
:從服務器取出資源(一項或多項)。POST
:在服務器新建一個資源。(單條或多條)PUT
:在服務器更新資源。DELETE
:從服務器刪除資源。
3、HTTP響應碼
序號 | 狀態碼 | 動詞 | 說明 |
---|---|---|---|
1 | 200 | GET | 服務器成功返回用戶請求的數據 |
2 | 201 | POST | 用戶新增數據成功 |
3 | 201 | PUT | 用戶修改數據成功 |
4 | 204 | DELETE | 用戶刪除數據 |
5 | 400 | POST/PUT | 用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作 |
6 | 404 | GET | 服務器沒有返回資源. |
4、什么是無狀態
為什么說HTTP協議是無狀態的協議呢?
因為它的每個請求都是完全獨立的,每個請求包含了處理這個請求所需的完整的數據,發送請求不涉及到狀態變更。
而且再次請求也無法判斷他是否之前請求過,如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。
看看下面故事你會有所啟發。
- 無狀態(Stateless)
魔都的老王開了一個會所,一個開會的地方,有大會議室、小會議室、Cosplay情景會議室。
顧客聽說這個會所有特色,於是紛紛前來消費,小明就是其中的一員。
小明上次會議室體驗很棒,盡管有點貴,本周又前來消費。
結賬時,小明以為老王認識自己,和老王套近乎弄個優惠價:"王老板,我上周剛來過,打個折扣唄"!
老王很茫然地瞅着小明:"上周你來過?我好像一點印象也沒有了嘛,很抱歉,無法優惠"!
小明很不爽地付完錢走人... - 有狀態(Stateful)
老王有一個助手叫小王,看到這一幕於是和老板有一番對話:
小王:老板,下次客人來消費,咱們給客人發一張小卡片,來一次打卡一次,凡是打過卡的,都有優惠。來的
次數越多,折扣力度越大,這樣就能有更多的回頭客,您看如何?
老王連說這是好主意,以后就這么干!
小明第一次來領了一張考勤卡,打了卡,夾在錢包里。
第二次來消費埋單時,小明從自己的錢包掏出考勤卡,老王一看原來是回頭客,好說好說,88折優惠,小明和老王都笑的合不攏嘴... - Cookie
后來老王覺得考勤卡上,還應該多記錄一些內容,才能更好地服務客戶,考勤卡上慢慢增加了更多內容。
會員卡片樣例如下:
小明再次來消費時,不僅可以優惠,還可以根據小明的消費習慣,做出最合理的安排。
隨着服務的精細化,小卡片上描述客戶的信息越來越多,卡片越做越大,由於小卡片受4K字節的限制,每次客戶前來消費都要攜帶大大的卡片,這很誇張! - Session
小王尋思着,小卡片一直都是客戶攜帶,為何不在公司的電腦上弄個數據庫,記錄客戶的消費習慣,每個客戶有一個數據庫明細。
客戶明細如下:
給小明的小卡片上只要有一個客戶代號"08029snne3e0kekllojeis007"就可以了,查詢電腦就可以知道是小明消費信息和消費習慣,消費完還可以從賬戶余額內扣除。
這個客戶代號就是SessionlD,通常保存在客戶端瀏覽器的Cookie里。
總結:
上文故事中的"Stateless"、"Stateful"、"Cookie"、"SessionID"以及"Session"與HTTP協議中這些關鍵詞具有相類似的意思。
HTTP最初的設計是無狀態的(stateless),但是無狀態的HTTP無法滿足互聯網日益發展的需求,於是業界擴展了HTTP協議,增加了有狀態(stateful)協議頭,使之變成一個有狀態協議。
這個有狀態的協議頭,就是依靠Cookie來實現的,Cookie是維系客戶端與服務器之間狀態同步的紐帶。
無論什么類型的Cookie,都是由服務器來一手創建,最終解釋權歸服務器,只有服務器才理解這些Cookie所代表的真正涵義;客戶只負責攜帶,不需要理解Cookie的真正意義!
(二)JSON數據格式說明
restful風格接口的數據返回格式一般為:JSON數據格式。
1、什么是JSON
JSON 指的是 JavaScript 對象表示法(Java Script Object Notation)。
JSON 是輕量級的文本數據交換格式。
JSON 具有自我描述性,更易理解。
2、JSON格式的特點
JSON 是純文本,具有"自我描述性"和“層級結構性”。
讀寫的速度更快,消耗流量少。
3、JSON語法
- 格式1
JSON對象:{"鍵1":"值1","鍵2":"值2"}
- 格式2
JSON數組:[值1,值2,值3.....]
- 格式3
對象+數組:{"name":"葫蘆娃","age":"8","技能":[" "," "," "]}
- 格式4
數組+對象:[{"name":"葫蘆娃","age":"8"},{"name":"葫蘆娃","age":"8"}]
參考:https://www.zhihu.com/question/23202402,解釋的很精彩。