任務二:restful是什么?

大家好昧谊,我是IT修真院深圳分院java第4期學員刽虹,一枚正直善良的java程序員。今天給大家分享一下呢诬,修真院官網(wǎng)java任務二關于restful自己的一點理解涌哲。

1.背景介紹

restful風格,就是一種面向資源服務的API設計方式尚镰,它不是規(guī)范阀圾,不是標準,它一種設計模式狗唉。

REST -- REpresentational State Transfer 直接翻譯:表現(xiàn)層狀態(tài)轉(zhuǎn)移初烘。

用一句話來描述就是:

URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。

2.知識剖析

REST是一種軟件架構(gòu)模式肾筐。核心概念包括:

資源(Resource):在REST中哆料,資源可以簡單的理解為URI,表示一個網(wǎng)絡實體吗铐。

比如东亦,/users/1/name,對應id=1的用戶的屬性name抓歼。

表現(xiàn)(Representation):是資源呈現(xiàn)出來的形式讥此,比如上述URI返回的HTML或JSON,包括HTTP Header等谣妻;

既然資源是URI萄喳,就會具有以下特征:名詞,代表一個資源蹋半;它對應唯一的一個資源他巨,是資源的地址。

為什么使用rest减江?

我們平時搞系統(tǒng)是這樣的:

1.有新建用戶功能

2.新建用戶需要一個URL

3.往這個URL發(fā)送的數(shù)據(jù)要定義好

4.開始寫后端和前端

這是以操作為第一位的設計方法染突,首先我們確認了一個操作,然后圍繞這個操作把

周邊需要的東西建設好辈灼,這種方式當然可以架構(gòu)出一個系統(tǒng)份企,甚至是一個好系統(tǒng)。

出現(xiàn)的問題:

1.操作之間是會有關聯(lián)巡莹,你的設計容易變成“第2個操作要求第1個操作進行過”司志,這種關系多起來你的系統(tǒng)就亂了

2.你的URL設計會缺乏一致性

3.操作通常被認為是有副作用(Side Effect)的,所以很少有人基于操作去設計緩存之類的東西

基于這些問題降宅,我們的另一種方法是基于資源的角度來搞:

1.各個資源雖然可能有關聯(lián)骂远,但依舊是能夠簡單地切掉這些關聯(lián)導致相互獨立的,所以不會有非常亂的耦合性

2.對資源的操作就這么幾種腰根,所以很容易設計一致的URL

3.我們明白對資源的讀操作是無副作用的激才,所以能玩緩存

rest的優(yōu)勢和優(yōu)點:

首先,REST規(guī)范:

1.強調(diào)HTTP應當以資源為中心额嘿,并且規(guī)范了資源URI的風格瘸恼;

2.規(guī)范了HTTP請求動作(PUT,POST等)的使用岩睁,具有對應的語義钞脂;

遵循REST規(guī)范的Web應用將會獲得下面好處:

1.URL具有很強可讀性的,具有自描述性捕儒;

2.資源描述與視圖的松耦合冰啃;

3.可提供OpenAPI邓夕,便于第三方系統(tǒng)集成,提高互操作性阎毅;

4.如果提供無狀態(tài)的服務接口焚刚,可提高應用的水平擴展性;

get扇调、put矿咕、post、delete含義與區(qū)別:

1狼钮、GET請求會向數(shù)據(jù)庫發(fā)索取數(shù)據(jù)的請求碳柱,從而來獲取信息,該請求就像數(shù)據(jù)庫的select操作一樣熬芜,

只是用來查詢一下數(shù)據(jù)莲镣,不會修改、增加數(shù)據(jù)涎拉,不會影響資源的內(nèi)容瑞侮,即該請求不會產(chǎn)生副作用。

無論進行多少次操作鼓拧,結(jié)果都是一樣的半火。

2、與GET不同的是季俩,PUT請求是向服務器端發(fā)送數(shù)據(jù)的钮糖,從而改變信息,該請求就像數(shù)據(jù)庫的update

操作一樣酌住,用來修改數(shù)據(jù)的內(nèi)容藐鹤,但是不會增加數(shù)據(jù)的種類等,也就是說無論進行多少次PUT操作赂韵,其結(jié)果并沒有不同。

3挠蛉、POST請求同PUT請求類似祭示,都是向服務器端發(fā)送數(shù)據(jù)的,但是該請求會改變數(shù)據(jù)的種類等資源谴古,

就像數(shù)據(jù)庫的insert操作一樣质涛,會創(chuàng)建新的內(nèi)容。幾乎目前所有的提交操作都是用POST請求的掰担。

4汇陆、DELETE請求顧名思義,就是用來刪除某一個資源的带饱,該請求就像數(shù)據(jù)庫的delete操作。

3.常見問題

html表單form中轧叽,method沒有put枯途、delete?

4.解決方案

1.在 web.xml 中配置 HiddenHttpMethodFilter 過濾器

2.編寫表單模擬 PUT 和 DELETE

方式提交說明: PUT 和 DELETE 方式 捏鱼,在寫表單提交的時候還是發(fā)送 post 請求,

但是要附加一個隱藏的文本域酪耕,name 的值固定為 “_method”导梆,value 寫 “PUT” 或者 “DELETE”。

3.編寫控制器

5.編碼實戰(zhàn)

迂烁。看尼。。

6.擴展思考

對于用戶登錄和用戶退出這兩個業(yè)務需求盟步,REST指導下的架構(gòu)和設計如何滿足藏斩?

a.把“登錄”作為一個資源,所以登錄是POST /logins址芯,退出是DELETE /logins灾茁。

b.對應于Authentication的POST和DELETE,一般在移動端也就是Token的POST和DELETE

c.至于Login和Logout到底是資源還是操作谷炸?我認為是User這個資源的狀態(tài)的變更北专。

當然,『登錄』這個概念已經(jīng)是一個歷史名詞了旬陡,現(xiàn)代的用戶系統(tǒng)拓颓,都只有『申請/發(fā)放令牌』的操作。讓用戶通過令牌來完成驗證和鑒權(quán)描孟,而非通過『登錄』來改變系統(tǒng)中的用戶狀態(tài)驶睦。

7.參考文獻

參考一:http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架構(gòu)

參考二:http://blog.csdn.net/programmer_sir/article/details/51592433 Restful風格到底是什么?怎么應用到我們的項目中匿醒?

8.更多討論


1.hidenhttpmethodfilter有什么特性场航?

瀏覽器form表單只支持GET與POST請求,而DELETE廉羔、PUT等method并不支持溉痢,spring3.0添加了一個過濾器,可以將這些請求轉(zhuǎn)換為標準的http方法憋他,使得支持GET孩饼、POST、PUT與DELETE請求竹挡,該過濾器為HiddenHttpMethodFilter镀娶。

2.設計rest風格的api的時候,盡可能使用http協(xié)議中已有的東西來實現(xiàn)揪罕,這樣做的目的是什么梯码?

對資源的操作就這么幾種宝泵,所以很容易設計一致的URL。

對uri進行了限制忍些,只用于定義資源鲁猩。這樣看起來比較容易理解。

尤其是對簡單的對象的增刪改查罢坝,很好理解廓握。

3.restful中如果delete多個數(shù)據(jù)的時候怎么組織uri?

簡單的說嘁酿,下面幾種都不錯:

GET /ec2/instance/batch?id=aa,bb,cc:簡約的設計

GET /ec2/instance?batch={"ids":["aa","bb","cc"]}:健壯的設計

GET /ec2/instance?batch=[{"method":"DELETE","id":"aa"},{"method":"DELETE","id":"bb"},{"method":"DELETE","id":"cc"}]:facebook的設計

PPT鏈接:戳這里

騰訊視頻:戳這里

今天的分享就到這里啦隙券,歡迎大家點贊、轉(zhuǎn)發(fā)闹司、留言娱仔、拍磚~

技能樹。IT修真學院

“我們相信人人都可以成為一個工程師游桩,現(xiàn)在開始牲迫,找個師兄,帶你入門借卧,掌控自己學習的節(jié)奏盹憎,學習的路上不再迷茫”铐刘。

這里是技能樹.IT修真院陪每,成千上萬的師兄在這里找到了自己的學習路線,學習透明化镰吵,成長可見化檩禾,師兄1對1免費指導“碳溃快來與我一起學習吧~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盼产,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勺馆,更是在濱河造成了極大的恐慌辆飘,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓传,死亡現(xiàn)場離奇詭異,居然都是意外死亡芹关,警方通過查閱死者的電腦和手機续挟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侥衬,“玉大人诗祸,你說我怎么就攤上這事跑芳。” “怎么了直颅?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵博个,是天一觀的道長。 經(jīng)常有香客問我功偿,道長盆佣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任械荷,我火速辦了婚禮共耍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吨瞎。我一直安慰自己痹兜,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布颤诀。 她就那樣靜靜地躺著字旭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崖叫。 梳的紋絲不亂的頭發(fā)上遗淳,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音归露,去河邊找鬼洲脂。 笑死,一個胖子當著我的面吹牛剧包,可吹牛的內(nèi)容都是我干的恐锦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼疆液,長吁一口氣:“原來是場噩夢啊……” “哼一铅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堕油,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤潘飘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掉缺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卜录,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年眶明,在試婚紗的時候發(fā)現(xiàn)自己被綠了艰毒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡搜囱,死狀恐怖丑瞧,靈堂內(nèi)的尸體忽然破棺而出柑土,到底是詐尸還是另有隱情,我是刑警寧澤绊汹,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布稽屏,位于F島的核電站,受9級特大地震影響西乖,放射性物質(zhì)發(fā)生泄漏狐榔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一浴栽、第九天 我趴在偏房一處隱蔽的房頂上張望荒叼。 院中可真熱鬧,春花似錦典鸡、人聲如沸被廓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫁乘。三九已至,卻和暖如春球碉,著一層夾襖步出監(jiān)牢的瞬間蜓斧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工睁冬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挎春,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓豆拨,卻偏偏與公主長得像直奋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子施禾,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容