日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 架構(gòu)師社區(qū)
[導(dǎo)讀]RESTful想必大家都耳熟能詳,但為什么要有RESTful?RESTful 到底是什么意思?為什么稱(chēng)之為 RESTful 架構(gòu)?我不用 RESTful 不行嗎?什么樣才叫真正的 RESTful?

RESTful 想必大家都耳熟能詳。

但是為什么要有 RESTful,RESTful 到底是什么意思。

為什么稱(chēng)之為 RESTful 架構(gòu)?

我不用 RESTful 不行嗎?

什么樣才叫真正的 RESTful ?

其實(shí)網(wǎng)上 RESTful 的文章有挺多的,不過(guò)有些講的糊里糊涂的,而且很大部分都忽略了 HATEOAS。

在之前的面試中面試官就問(wèn)過(guò)我,你怎么理解 RESTful 的,英文全稱(chēng)是啥?為什么叫這個(gè)名字?

當(dāng)時(shí)我人都傻了。

面試官不講武德,針對(duì)我這個(gè)剛出社會(huì)的小伙子。

其實(shí)有很多人也稀里糊涂的,也包括我自己。

就面向資源唄,不加動(dòng)詞咯,還能咋滴,我加動(dòng)詞不也能用嗎?

而且我之前還特不能理解,為啥這叫架構(gòu)?

我特意搜索了下架構(gòu)的解釋。

軟件架構(gòu)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。

整體結(jié)構(gòu)與組件的抽象描述

RESTful 哪有什么組件和結(jié)構(gòu)之間的玩意?

所以就至今我寫(xiě)下這篇文章的時(shí)候我也理解不了為什么叫 RESTful 架構(gòu)

可能是我對(duì)架構(gòu)的理解太狹隘,還不到火候。

我個(gè)人只能理解成 RESTful 風(fēng)格的 API 設(shè)計(jì),也就是說(shuō) RESTful 只是一種指導(dǎo)風(fēng)格,就像我們 Java 要用駝峰命名法。

那不用駝峰命名法代碼就不能跑了嗎?

當(dāng)然能跑,這只是一種希望大家都能遵循的規(guī)范。

對(duì) RESTful 而言我覺(jué)得算不上規(guī)范,只能說(shuō)指導(dǎo)風(fēng)格。

來(lái)讓我們正式的進(jìn)入對(duì) RESTful 的剖析。

REST

REST 不是一個(gè)單詞,是 Representational State Transfer 的縮寫(xiě)。

直譯過(guò)來(lái)就是表述性狀態(tài)轉(zhuǎn)移。

我對(duì)這個(gè)名字蒙了一年多,就不能說(shuō)點(diǎn)能聽(tīng)得懂的嘛。

從提出 REST 的論文中我翻了翻,沒(méi)有明說(shuō)但是表達(dá)的意思是其實(shí)它還有個(gè)主語(yǔ) Resource 。

所以是資源的表述性狀態(tài)轉(zhuǎn)移。

稍微可以理解一點(diǎn)了。

我們先不管什么狀態(tài)轉(zhuǎn)移,大致先有點(diǎn)感覺(jué)。

知道 REST 之后 RESTful 就不難解釋了,加 ful 就是變形容詞了,比如 wonderful girl。

這次我讓你徹底弄懂RESTful

至此對(duì)名字稍微解釋了一下,疑惑還在沒(méi)事,咱們慢慢理。

REST 的核心

核心就是資源,用 URL 定位資源,用 HTTP 動(dòng)詞來(lái)描述所要做的操作。

HTTP的提供了很多動(dòng)詞:GET、PUT、POST、DELETE......

這些動(dòng)詞都是有含義的。

比如 GET 就是獲取資源,是查詢(xún)請(qǐng)求。

PUT 指的是修改資源,是冪等的。

POST 也是修改(新增也是一種修改),指的是不冪等的操作。

所以根據(jù)這些規(guī)范我們都能得知這次交互的一些動(dòng)作,所以 RESTful 風(fēng)格正確的使用姿勢(shì)如下:

比如獲取一個(gè) user。

錯(cuò)誤姿勢(shì):GET /getUserById?userId=1

正確姿勢(shì):GET /users/1。

再比如新增 user。

錯(cuò)誤姿勢(shì):POST /addUser (省略body)。

正確姿勢(shì):POST /users (省略body)。

可以看到 HTTP 的動(dòng)詞其實(shí)就能指代你要對(duì)資源做的操作,所以不需要在 URL 上做一些東西,就把 URL 表明的東西看作一個(gè)資源即可。

這里注意要用對(duì) HTTP 動(dòng)詞,比如一個(gè)獲取資源的請(qǐng)求用 PUT,用了也能獲取資源但是這不合適。

其實(shí)更深一步的理解是 ?HTTP 是一個(gè)協(xié)議。

協(xié)議其實(shí)就是約定好的一個(gè)東西,協(xié)議就規(guī)定 GET 是獲取資源,那你非得在 URL 上再重復(fù)一遍或者所有請(qǐng)求不論增刪改都用 GET 這個(gè)動(dòng)作,這其實(shí)就是沒(méi)有完全遵循這個(gè)協(xié)議。

可以說(shuō)只是把 HTTP 當(dāng)成一個(gè)傳輸管道,而不是約定好的協(xié)議。

這其實(shí)是對(duì) HTTP 更深一層的認(rèn)識(shí),我認(rèn)為也是 RESTful 被推出的原因。

當(dāng)然理想很豐滿(mǎn),現(xiàn)實(shí)很骨感,還是有很多人就 getUserById。

不過(guò)我個(gè)人覺(jué)得問(wèn)題不大,公司統(tǒng)一就行。

HATEOAS

即 Hypermedia as the Engine of Application State 的縮寫(xiě),翻譯過(guò)來(lái)就是作為應(yīng)用狀態(tài)引擎的超媒體。

這也是 REST 提出的設(shè)計(jì)。

是不是理解不了?其實(shí)很簡(jiǎn)單。

例子我就不自己編了,抄一下 stackoverflow 回答上的例子。

比如你請(qǐng)求獲取用戶(hù)列表:

GET?/users
Accept:?application/json+userdb

此時(shí)的返回應(yīng)該是:

200?OK
Content-Type:?application/json+userdb

{
????"users":?[
????????{
????????????"id":?1,
????????????"name":?"Emil",
????????????"country:?"Sweden",
????????????"
links":?[
????????????????{
????????????????????"
href":?"/user/1",
????????????????????"
rel":?"self",
????????????????????"
method":?"GET"
????????????????},
????????????????{
????????????????????"
href":?"/user/1",
????????????????????"
rel":?"edit",
????????????????????"
method":?"PUT"
????????????????},
????????????????{
????????????????????"
href":?"/user/1",
????????????????????"
rel":?"delete",
????????????????????"
method":?"DELETE"
????????????????}
????????????]
????????},
????????{
????????????"
id":?2,
???????????....省略.....
????????}
????],
????"
links":?[
????????{
????????????"
href":?"/user",
????????????"
rel":?"create",
????????????"
method":?"POST"
????????}
????]
}

重點(diǎn)就是這個(gè) links,結(jié)果會(huì)返回你能對(duì)這個(gè)資源所做的操作。

比如對(duì)于 userId 是 1 的,你調(diào)用PUT /user/1就是做修改這個(gè)用戶(hù),DELETE /user/1就是刪除這個(gè)用戶(hù)。

最外層的 links 告訴你用 POST /user 就能再創(chuàng)建一個(gè)用戶(hù)。

這里還有個(gè)隱藏信息,可以看到外層的 links 沒(méi)有返回 DELETE 的信息,說(shuō)明此時(shí)客戶(hù)端無(wú)法刪除用戶(hù)!

所以說(shuō) RESTful API 還需要再返回此時(shí)能對(duì)資源做的操作,這樣客戶(hù)端就知道它能做什么。

它也不需要管具體怎么做,反正返回里面會(huì)告訴它 DELETE 就這樣這樣,POST 就這樣這樣。

沒(méi)告訴它的就是不能做的。

然后這個(gè)時(shí)候再去理解下資源的表述性狀態(tài)轉(zhuǎn)移,是不是感覺(jué)來(lái)了?

如果說(shuō)上一 part 提到用 HTTP 的動(dòng)詞來(lái)指代動(dòng)作, URL 僅表示資源的現(xiàn)實(shí)是骨感的。

那么 HATEOAS 的現(xiàn)實(shí)就是骨灰。

基本上沒(méi)幾家公司會(huì)這么做。

就我個(gè)人而言這玩意沒(méi)啥用。

它的出發(fā)點(diǎn)是讓客戶(hù)端從響應(yīng)就能得知對(duì)資源操作的入口,并且通過(guò)響應(yīng)得知哪些動(dòng)作能執(zhí)行。

聽(tīng)起來(lái)好像有點(diǎn)用,但是就我目前的功力,我只能看到響應(yīng)變得十分冗余。

這次我讓你徹底弄懂RESTful

最后

這篇文章關(guān)于 RESTful API 具體的寫(xiě)法我就提到一些,還有挺多的就自己查資料吧。

文章的目的是為了讓你理解 RESTful API,我再總結(jié)一下重點(diǎn)。

HTTP 是協(xié)議,不是傳輸通道。(對(duì)協(xié)議不理解的看我之前的 HTTP 分析)

所以協(xié)議約定了很多東西,推薦我們按照協(xié)議的用法進(jìn)行客戶(hù)端和服務(wù)端的交互。

也就是 RESTful 表明的面向資源,通過(guò) HTTP 動(dòng)作 + URL 上的資源。

RESTful 還提到了 HATEOAS,雖說(shuō)基本上沒(méi)什么公司會(huì)這樣使用,但是它能讓你更好的理解 REST 這個(gè)名字的含義。

RESTful 是一種風(fēng)格,你是否采用這種風(fēng)格對(duì)你的程序運(yùn)行沒(méi)有影響,類(lèi)比駝峰命名來(lái)思考。

簡(jiǎn)而言之,RESTful?就是不要在 URL 上表現(xiàn)出動(dòng)作,用 HTTP 動(dòng)詞代表動(dòng)作,URL 上只做資源。

僅此而已。

至于要不要嚴(yán)格遵循 RESTful 風(fēng)格,我個(gè)人的看法是公司內(nèi)部保持一致就行。

那種工作遇到很細(xì)節(jié)的場(chǎng)景的還是別了,這種問(wèn)你上司比較合適。

參考:

https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2

http://www.ruanyifeng.com/blog/2011/09/restful.html

https://stackoverflow.com/questions/671118/what-exactly-is-restful-programming/3950863#3950863

https://en.wikipedia.org/wiki/HATEOAS

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

這次我讓你徹底弄懂RESTful

這次我讓你徹底弄懂RESTful

這次我讓你徹底弄懂RESTful

長(zhǎng)按訂閱更多精彩▼

這次我讓你徹底弄懂RESTful

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀(guān)點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉