更新時(shí)間:2022-05-23 09:03:43 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1801次
REST全稱是Representational State Transfer
RESTful是一種定義Web API接口的設(shè)計(jì)風(fēng)格,尤其適用于前后端分離的應(yīng)用模式中。
這種風(fēng)格的理念認(rèn)為后端開發(fā)任務(wù)就是提供數(shù)據(jù)的,對(duì)外提供的是數(shù)據(jù)資源的訪問(wèn)接口,所以在定義接口時(shí),客戶端訪問(wèn)的URL路徑就表示這種要操作的數(shù)據(jù)資源。
事實(shí)上,我們可以使用任何一個(gè)框架都可以實(shí)現(xiàn)符合restful規(guī)范的API接口.
RESTful作為目前最流行的 API 設(shè)計(jì)規(guī)范,一定有著它獨(dú)有的魅力:強(qiáng)大、簡(jiǎn)介、易上手.
(1)數(shù)據(jù)的安全保障:
url鏈接一般都采用https協(xié)議進(jìn)行傳輸 注:采用https協(xié)議,可以提高數(shù)據(jù)交互過(guò)程中的安全性
(2)接口特征表現(xiàn),一看就知道是個(gè)api接口
- 用api關(guān)鍵字標(biāo)識(shí)接口url:
- [https://api.baidu.com](https://api.baidu.com/)
- https://www.baidu.com/api
注:看到api字眼,就代表該請(qǐng)求url鏈接是完成前后臺(tái)數(shù)據(jù)交互的
-路飛的接口:https://api.luffycity.com/api/v1/course/free/
(3)多數(shù)據(jù)版本共存
- 在url鏈接中標(biāo)識(shí)數(shù)據(jù)版本
- https://api.baidu.com/v1
- https://api.baidu.com/v2
注:url鏈接中的v1、v2就是不同數(shù)據(jù)版本的體現(xiàn)(只有在一種數(shù)據(jù)資源有多版本情況下:例如在原有版本上增加接口,類似改版,也需要保證老版本可以使用)
(4)數(shù)據(jù)即資源(均使用名詞)
接口一般都是完成前后臺(tái)數(shù)據(jù)的交互,交互的數(shù)據(jù)我們稱之為資源
https://api.baidu.com/users
https://api.baidu.com/books
https://api.baidu.com/book
注:一般提倡用資源的復(fù)數(shù)形式,在url鏈接中獎(jiǎng)勵(lì)不要出現(xiàn)操作資源的動(dòng)詞,錯(cuò)誤示范:https://api.baidu.com/delete-user
特殊的接口可以出現(xiàn)動(dòng)詞,因?yàn)檫@些接口一般沒(méi)有一個(gè)明確的資源,或是動(dòng)詞就是接口的核心含義
https://api.baidu.com/place/search
https://api.baidu.com/login
(5)資源操作由請(qǐng)求方式?jīng)Q定(method)
- 操作資源一般都會(huì)涉及到增刪改查,我們提供請(qǐng)求方式來(lái)標(biāo)識(shí)增刪改查動(dòng)作
- https://api.baidu.com/books - get請(qǐng)求:獲取所有書
- https://api.baidu.com/books/1 - get請(qǐng)求:獲取主鍵為1的書
- https://api.baidu.com/books - post請(qǐng)求:新增一本書書
- https://api.baidu.com/books/1 - put請(qǐng)求:整體修改主鍵為1的書
- https://api.baidu.com/books/1 - patch請(qǐng)求:局部修改主鍵為1的書
- https://api.baidu.com/books/1 - delete請(qǐng)求:刪除主鍵為1的書
(6)過(guò)濾,通過(guò)在url上傳參的形式傳遞搜索條件
- https://api.example.com/v1/zoos?limit=10:指定返回記錄的數(shù)量
- https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
- https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁(yè),以及每頁(yè)的記錄數(shù)
- https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結(jié)果按照哪個(gè)屬性排序,以及排序順序
- https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
(7)響應(yīng)狀態(tài)碼
1)正常響應(yīng)
- 響應(yīng)狀態(tài)碼2xx
- 200:常規(guī)請(qǐng)求
- 201:創(chuàng)建成功
2)重定向響應(yīng)
- 響應(yīng)狀態(tài)碼3xx
- 301:永久重定向
- 302:暫時(shí)重定向
3)客戶端異常
- 響應(yīng)狀態(tài)碼4xx
- 403:請(qǐng)求無(wú)權(quán)限
- 404:請(qǐng)求路徑不存在
- 405:請(qǐng)求方法不存在
4)服務(wù)器異常
- 響應(yīng)狀態(tài)碼5xx
- 500:服務(wù)器異常
(8)錯(cuò)誤處理,應(yīng)返回錯(cuò)誤信息,error當(dāng)做key
{
error: "無(wú)權(quán)限操作"
}
(9)返回結(jié)果,針對(duì)不同操作,服務(wù)器向用戶返回的結(jié)果應(yīng)該符合以下規(guī)范
GET /collection:返回資源對(duì)象的列表(數(shù)組)
GET /collection/resource:返回單個(gè)資源對(duì)象
POST /collection:返回新生成的資源對(duì)象
PUT /collection/resource:返回完整的資源對(duì)象
PATCH /collection/resource:返回完整的資源對(duì)象
DELETE /collection/resource:返回一個(gè)空文檔
(10)需要url請(qǐng)求的資源:需要訪問(wèn)資源的請(qǐng)求鏈接
# Hypermedia API,RESTful API最好做到Hypermedia,即返回結(jié)果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應(yīng)該做什么
{
"status": 0,
"msg": "ok",
"results":[
{
"name":"肯德基(羅餐廳)",
"img": "https://image.baidu.com/kfc/001.png"
}
...
]
}
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)