rest风格使用两个变量_为什么要用Rest风格,接口应该怎么定义,除了Rest还可用什么方式写接口的?...
這里是修真院后端小課堂,每篇分享文從
深度思考中的知識點——為什么要用Rest風格,如果不用Rest的話,接口應該怎么定義,在使用Rest風格之前,大家都是用什么方式寫接口的?
1.背景介紹
REST(Representational State Transfer)指的是一種架構設計風格,而滿足這種設計風格的應用程序或設計就被認為是RESTful架構風格。
這也是目前互聯網中最流行的一種軟件架構風格,它結構清晰、符合標準、易于理解,越來越多的應用服務開始使用RESTful這種架構風格,尤其是那些基于HTTP協議的網絡服務。
而常常提及的rest的web服務,是rest作為在web領域的一種實現方式
2.知識剖析
所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。
它可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在。你可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的URI。
要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符。
表現層(Representation)
"資源"是一種信息實體,它可以有多種外在表現形式。我們把"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。
URI只代表資源的實體,不代表它的形式。
嚴格地說,有些網址最后的".html"后綴名是不必要的,因為這個后綴名表示格式,屬于"表現層"范疇,而URI應該只代表"資源"的位置。
它的具體表現形式,應該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個字段才是對"表現層"的描述。
狀態轉化(State Transfer)
訪問一個網站,就代表了客戶端和服務器的一個互動過程。在這個過程中,勢必涉及到數據和狀態的變化。
互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都保存在服務器端。
客戶端用到的手段,只能是HTTP協議。具體來說,就是HTTP協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。
它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。
Rest風格總結
1. REST描述的是在網絡中client和server的一種交互形式;REST本身不實用,實用的是如何設計 RESTful API(REST風格的網絡接口);
2. Server提供的RESTful API中,URL中只使用名詞來指定資源,原則上不使用動詞。“資源”是REST架構或者說整個網絡處理的核心,表示一個網絡實體,代表一個資源;它對應唯一的一個資源,是資源的地址。
3. 用HTTP協議里的動詞來實現資源的添加,修改,刪除等操作。
4. Server和Client之間傳遞某資源的一個表現形式
5. 用 HTTP Status Code傳遞Server的狀態信息。
3.常見問題
1.@pathvariable @requestparam共同點
答:用于從request中接收請求的,兩個都可以接收參數
2@pathvariable @requestparam區別
答: RequestParam? 漢語意思就是: 請求參數 顧名思義 就是獲取參數的
PathVariable 漢語意思是:路徑變量,顧名思義,就是要獲取一個url 地址中的一部分值
4.編碼實戰
5.擴展思考
什么是冪等操作?冪等性為什么重要?
等冪性(Idempotence)
, 等冪性簡單點說就是一次請求和多次請求,資源的狀態是一樣。
比如GET和HEAD,不論你請求多少次,資源還是在那里。
請注意,DELETE和PUT也是等冪的,以為對同一個資源刪除一次或者多次,結果是一樣的,就是資源被刪除了,不存在了。
為什么說PUT也是等冪的?當你PUT一個新資源的時候,資源被創建,再次PUT這個URI的時候,資源還是沒變。
當你PUT一個存在的資源時,更新了資源,再次PUT的時候,還是更新成這個樣子。
在PUT更新的時候,不能做相對的更新(依賴資源現在的狀態),比如每次對一個數加1,這樣資源狀態就會變化。
應該每次更新成某個數,比如把某個數變成4,則無論多少次PUT,值都是4,這樣就是等冪了。
我們設計Restful WS的時候,GET,HEAD, PUT, DELETE一定要設計成等冪的。
由于網絡是不可靠的,安全性和等冪性就顯得特別重要。
如果一次請求,服務器收到處理以后,客戶端沒有收到相應,客戶端會再次請求,如果沒有等冪性保障,就會發生意想不到的問題。
POST是不安全也不等冪的,還是拿weblog的例子,如果兩次POST相同的博文,則會產生兩個資源,URI可能是這樣/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2,盡管他們的內容是一摸一樣的。
6.參考文獻
https://blog.csdn.net/xinjianwuhen1991/article/details/50095021
http://www.ruanyifeng.com/blog/2011/09/restful.html
7.更多討論
1,為什么要用RESTful結構呢?
答:近年來移動互聯網的發展,各種類型的Client層出不窮,RESTful可以通過一套統一的接口為 Web,iOS和Android提供服務。
有了RESTful結構,不管是電腦端還是手機端,或者是APP,按照REST的接口來進行數據交互,完全不用關心后端實現,也就是說,前端和后端真正的實現了完全的分離設計。
2.在使用rest之前,是怎么寫接口的
答:URL該怎么寫就怎么寫,但是沒有PUT,GET,POST,DELETE方法
3.1. 重定向和轉發的區別?
答:redirect和forward。重定向可以帶數據過去,轉發不能。轉發是服務器行為,重定向是客戶端行為。
分享到此結束
總結
以上是生活随笔為你收集整理的rest风格使用两个变量_为什么要用Rest风格,接口应该怎么定义,除了Rest还可用什么方式写接口的?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天线座和连接器SMA、U.FL、IPX、
- 下一篇: Linux主机名那点事儿