RESTful架構(gòu)和RESTful API設(shè)計(jì)總結(jié)
上一篇:支付寶系統(tǒng)架構(gòu)(內(nèi)部架構(gòu)圖)
作者:智明書
鏈接:https://www.jianshu.com/p/955eb2faa354
Resource 資源
.html后綴名是不必要的,因?yàn)檫@個(gè)后綴名表示格式,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置。xml格式,html格式,json格式,甚至是二進(jìn)制格式,圖片可以有PNG格式,JPEG格式等。資源的一個(gè)具體表現(xiàn)形式,應(yīng)該在HTTP請(qǐng)求的頭信息中用Accept和Content-Type字段指定,這兩個(gè)字段才是對(duì)"表現(xiàn)層"的描述。State Transfer 狀態(tài)轉(zhuǎn)移
通過http動(dòng)詞來實(shí)現(xiàn)資源的狀態(tài)轉(zhuǎn)移,用GET來請(qǐng)求資源,用POST來新建資源,用PUT來更新資源,用DELETE來刪除資源。
簡(jiǎn)明扼要的總結(jié)REST:
RESTful API設(shè)計(jì)總結(jié)
隨著近年來移動(dòng)互聯(lián)網(wǎng)的發(fā)展,各種客戶端出不窮:Web,IOS,Android。因此需要一種機(jī)制使得各種客戶端能夠和服務(wù)端進(jìn)行通訊,這就使得RESTful API的架構(gòu)流行起來。另外,搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù)“面試”,獲取一份驚喜禮包。RESTful是REST(表現(xiàn)層狀態(tài)轉(zhuǎn)化)的形容詞形式,因此RESTful API就可以理解成“符合REST風(fēng)格的API”。
格式規(guī)范
-?來隔斷單詞,而不是使用?_。這主要是因?yàn)椋瑸g覽器中超鏈接顯示的默認(rèn)效果是文字并附帶下劃線,如果API以_隔斷單詞,二者會(huì)重疊,影響可讀性。/api/featured-post/?????#?GOOD
/api/featured_post/?????#?WRONG
協(xié)議
域名
https://api.example.com/v1。也可以簡(jiǎn)單地把版本放在URL中,比如https://www.example.com/api/v1版本
API的版本號(hào)應(yīng)該放在URL中:
https://api.example.com/v1/
名詞應(yīng)該使用復(fù)數(shù)
https://api.example.com/v1/students
https://api.example.com/v1/schools
https://api.example.com/v1/employees
URL中不能使用動(dòng)詞
不符合CRUD的情況
http://api.xxx.com/apiv3/search?timestamp=123213218&user_id=4192121&keyword=2134789。再例如創(chuàng)建了博客網(wǎng)站,如果想要發(fā)布一個(gè)博客,可以使用POST /articles/{:id}/publish用HTTP動(dòng)詞表示對(duì)資源的操作
GET:從服務(wù)器獲取資源 POST:在服務(wù)器新建一個(gè)資源 PUT:在服務(wù)器更新資源(客戶端提供改變后的完整資源) PATCH:在服務(wù)器更新資源(客戶端提供改變的屬性)
GET?????https://api.example.com/v1/schools??????????????????#?列出所有學(xué)校
POST????https://api.example.com/v1/schools??????????????????#?新建一個(gè)學(xué)校
GET?????https://api.example.com/v1/schools/ID???????????????#?列出指定學(xué)校的信息
DELETE??https://api.example.com/v1/schools/ID???????????????#?刪除指定學(xué)校
GET?????https://api.example.com/v1/schools/ID/students??????#?列出指定學(xué)校的所有學(xué)生
DELETE??https://api.example.com/v1/schools/ID/students/ID???#?刪除指定學(xué)校的指定學(xué)生
HTTP狀態(tài)碼
200 OK - [GET]:服務(wù)器成功返回用戶請(qǐng)求的數(shù)據(jù) 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功 204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發(fā)出的請(qǐng)求有錯(cuò)誤,服務(wù)器沒有進(jìn)行新建或修改數(shù)據(jù)的操作 另外,搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù)“面試”,獲取一份驚喜禮包。 401 UNAUTHORIZED:表示用戶沒有權(quán)限(令牌、用戶名、密碼錯(cuò)誤) 404 NOT FOUND:用戶發(fā)出的請(qǐng)求針對(duì)的是不存在的記錄,服務(wù)器沒有進(jìn)行操作 500 INTERNAL SERVER ERROR:服務(wù)器發(fā)生錯(cuò)誤,用戶將無法判斷發(fā)出的請(qǐng)求是否成功
其它
服務(wù)器返回的數(shù)據(jù)格式,應(yīng)該盡量使用JSON,避免使用XML。JSON有可讀性強(qiáng),結(jié)構(gòu)緊湊,支持的語言種類多的特點(diǎn),因此JSON是RESTful API最常用的返回格式。

PS:如果覺得我的分享不錯(cuò),歡迎大家隨手點(diǎn)贊、轉(zhuǎn)發(fā)、在看。
評(píng)論
圖片
表情
