什么是RESTFUL?REST的請求方法有哪些,有什么區別?


這里是修真院前端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】

八個方面深度解析前端知識/技能,本篇分享的是:

【什么是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(刪除))

錯誤寫法示例

clipboard.png

 

錯誤寫法

該網絡API接口URL中使用了動詞,並沒有做到只標識和定位資源

正確寫法示例

clipboard.png

正確寫法

該網絡API接口URL僅標識和定位資源,通過Http方法Post表明是一個添加資源的處理器

REST請求方法解析

 

GET

get方法在Rest中主要用於獲取資源,能夠發送參數,不過有限制,且參數都會以?開頭的形 式附加在URL尾部

 

clipboard.png

 

 

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與大家一起討論交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM