RESTful 是什么?
RESTful本質(zhì)是一種軟件架構(gòu)風(fēng)格, 面向資源來(lái)設(shè)計(jì)API
解決的問(wèn)題
- 降低了開(kāi)發(fā)的復(fù)雜度
- 提高系統(tǒng)的可伸縮性能
設(shè)計(jì)概念和準(zhǔn)則
- 網(wǎng)絡(luò)上的所有事物都可以抽象為資源笼沥。
- 每一個(gè)資源都有唯一的資源標(biāo)志爬舰, 對(duì)資源的操作不會(huì)改變這些標(biāo)識(shí)抄罕。
- 所有的操作都是無(wú)狀態(tài)的。
資源
什么是資源?
所謂的 "資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體迟几,或者說(shuō)是網(wǎng)絡(luò)上的一個(gè)具體信息消请。
HTTP協(xié)議-URL
HTTP協(xié)議是一個(gè)屬于應(yīng)用層的協(xié)議, 特點(diǎn)是簡(jiǎn)潔瘤旨,快速梯啤。
schema://host[:port]/path[?query-string][#anchor]
- schema 指定底層使用的協(xié)議(例如: http, https, ftp)
- host 服務(wù)器的IP地址 或 域名
- port 服務(wù)器端口,默認(rèn)80
- path 訪問(wèn)資源的路徑
- query-string 發(fā)送給HTTP服務(wù)器的數(shù)據(jù)
- anchor 錨
HTTP協(xié)議-請(qǐng)求
組成格式:請(qǐng)求行, 消息報(bào)頭, 請(qǐng)求正文
請(qǐng)求行
格式: Method Request-URI HTTP-Version CRLF
舉例
GET / HTTP/1.1 CRLF
請(qǐng)求方法
- GET 請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源
- POST 在Request-URI 所標(biāo)識(shí)的資源后附加的數(shù)據(jù)
- HEAD 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭
- PUT 請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源存哲, 并用Request-URI作為其標(biāo)識(shí)
- DELETE 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源
- OPTIONS 請(qǐng)求查詢服務(wù)器的性能因宇, 或者查詢與資源相關(guān)的選項(xiàng)和需求
HTTP協(xié)議-響應(yīng)
組成格式: 狀態(tài)行, 消息報(bào)頭祟偷, 響應(yīng)正文
狀態(tài)行
HTTP-Version Status-Code Reason-phrase CRLF
HTTP/1.1 200 OK
常用狀態(tài)碼
- 200 OK 客戶端請(qǐng)求成功
- 400 Bad Request 客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤察滑,不能被服務(wù)器所理解
- 401 Unauthorized 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
- 404 Not Found 請(qǐng)求資源不存在
- 500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
- 503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求
RESTful架構(gòu)與 其他架構(gòu)的區(qū)別
SOAP WebService
WebService 是一種跨編程語(yǔ)言和操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)修肠。
WebService 通過(guò)HTTP協(xié)議發(fā)送請(qǐng)求和接受結(jié)果時(shí)采用XML格式封裝贺辰,并增加了一些特定的HTTP消息頭,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議嵌施。
效率和易用性
SOAP由于各種需求不斷擴(kuò)充其本身協(xié)議的內(nèi)容饲化,導(dǎo)致在SOAP處理方面的性能有所下降。同時(shí)在易用性方面以及學(xué)習(xí)成本上也有所增加吗伤。
RESTful由于其面向資源接口設(shè)計(jì)以及操作抽象簡(jiǎn)化了開(kāi)發(fā)者的不良設(shè)計(jì)吃靠,同時(shí)也最大限度的利用了HTTP最初的應(yīng)用協(xié)議設(shè)計(jì)理念。
安全性(還需探索)
RESTful 對(duì)于資源型服務(wù)接口來(lái)說(shuō)很合適足淆,同時(shí)特別適合對(duì)于效率要求很高巢块,但是對(duì)于安全要求不高的場(chǎng)景。(安全性應(yīng)該可以提升)
SOAP的成熟性可以給需要提供多開(kāi)發(fā)語(yǔ)言的巧号,對(duì)于安全性要求較高的接口設(shè)計(jì)帶來(lái)便利族奢。所以單純從設(shè)計(jì)模式來(lái)看誰(shuí)會(huì)占據(jù)主導(dǎo)地位沒(méi)有什么意義,關(guān)鍵還是要看應(yīng)用場(chǎng)景丹鸿。