這里是修真院前端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】
八個方面深度解析前端知識/技能,本篇分享的是:
【什么是RESTFUL?REST的請求方法有哪些,有什么區別?】
1.背景介紹
restFul是符合rest架構風格的網絡API接口,完全承認Http是用於標識資源。restFul URL是面向資源的,可以唯一標識和定位資源。 對於該URL標識的資源做何種操作是由Http方法決定的。 rest請求方法有4種,包括get,post,put,delete.分別對應獲取資源,添加資源,更新資源及刪除資源.
2.知識剖析
如何編寫符合rest架構風格的restful?
1.URL中不可出現動詞
2.URL能夠唯一地標識單個或一類資源
3.通過Http動詞去操作URL標識的資源(get(獲取),pst(添加),put(更新),delete(刪除))
錯誤寫法示例
錯誤寫法
該網絡API接口URL中使用了動詞,並沒有做到只標識和定位資源
正確寫法示例
正確寫法
該網絡API接口URL僅標識和定位資源,通過Http方法Post表明是一個添加資源的處理器
REST請求方法解析
GET
get方法在Rest中主要用於獲取資源,能夠發送參數,不過有限制,且參數都會以?開頭的形 式附加在URL尾部
get參數
因為參數信息會完全暴露,因此是不推薦發送重要信息的。get方法產生一個tcp數據報一次發送完畢。
規范的get方法處理器應該是冪等的,也就是說對一個資源不論發送多少次get請求都不會更改數據或造成破壞。
應該在編寫處理器的時候保證冪等從而提高安全性
POST
post方法在Rest請求中主要用於添加資源,參數信息存放在請求報文的消息體中相對安全,且可發送較大信息
post因為參數信息存在方消息體中相對安全,一般用於發送重要數據,且post產生兩個tcp數據報需要發送兩次完成
對於get和post的本質區別該博客寫的非常好
規范化的post方法處理器是不冪等的,因此如果用戶重復對一個資源進行post應該在處理器中做出限制和處理保證對數據不造成破壞和更改 從而提高安全性.get和post本質區別
PUT
put方法在Rest中主要用於更新資源,因為大多數瀏覽器不支持put和delete,會自動將put和delete請求轉化為get和post. 因此為了使用put和delete方法,需要以post發送請求,在表單中使用隱藏域發送真正的請求。
put方法的參數是同post一樣是存放在消息中的,同樣具有安全性,可發送較大信息。
put方法是冪等的,對同一URL資源做出的同一數據的任意次put請求其對數據的改變都是一致的。比如更新/student/2的name值為bobdylan
不論提交該請求多少次,/student/2資源的name值會於提交一次請求無異
DELETE
Delete在Rest請求中主要用於刪除資源,因為大多數瀏覽器不支持put和delete,會自動將put和delete請求轉化為get和post.因此為了使用put和delete方法,需要以post發送請求,在表單中使用隱藏域發送真正的請求。
Delete方法的參數同post一樣存放在消息體中,具有安全性,可發送較大信息 Delete方法是冪等的,不論對同一個資源進行多少次delete請求都不會破壞數據
3.常見問題
瀏覽器自動轉化PUT和DELETE為GET和POST,容器找不到對應的處理器報錯
rest風格規定URL標識資源,使用Http的四個方法對資源進行操作。但在瀏覽器發送請求時會自動將put和post 轉化為get和post.這樣rest風格就成了雞肋,且發送請求會報錯說找不到get方法或post方法。
為什么不支持delete和put方法是因為html4官方在表單中僅支持get和post方法,忽略了Put和Delete以及其他Http方法. 盡管在html5和一些新的瀏覽器支持所有的http方法,但不可能所有用戶都使用最新的瀏覽器。
4.解決方案
1.首先第一種是前端人員通過ajax發送,因為不懂前端所以不詳述
2.通過在form表單中使用隱藏域在服務器端配置過濾器來發送真實請求
3.使用Spring的sf:form表單來提交
第一種就不詳述了
第二種在編碼實戰中進行演示
第三種方法因為資料不全,是在Spring實戰這本書中看到的,自己嘗試實現失敗了。見Spring實戰這本書305頁
5.編碼實戰
PPT地址:PPT
視頻地址:視頻
6.擴展思考
7.參考文獻
參考一: get和post的本質區別
參考二: SpringMvc中發送put和Delete請求
參考三: Spring實戰第11章305頁《提交RestFul表單》
8.更多討論
今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~
技能樹.IT修真院“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧~我的邀請碼:15568671,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/...
“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,學習的路上不再迷茫。
這里是技能樹.IT修真院:http://www.jnshu.com,初學者轉行到互聯網行業的聚集地。"
歡迎加IT交流群565734203與大家一起討論交流