簡單restful風格理解

簡單理解REST接口

大家好,我是我是深圳分院第十期java學員,一枚正直純潔善良的Java程序員。

1.背景介紹

2.知識剖析

3.常見問題

4.解決方案

5.擴展思考

6.參考文獻

7.更多討論

1.基本介紹

REST是什麼?

REST(Representational State Transfer)

官方解釋:表述性狀態傳遞

通俗來講:資源在網絡中以某種表現形式進行狀態轉移。

RESTful架構風格最初由Roy T. Fielding(HTTP/1.1協議專家組負責人)在其2000年的博士學位論文中提出。HTTP就是該架構風格的一個典型應用。

爲什麼會使用RESTful結構呢?

在移動端盛行之前,網頁前後端聯繫很緊密,比如當時的PHP,JSP。在當時來看這是問題不大,各種不同的客戶端(手機,平板等)。這樣的情況之下,RESTful出現了。

RESTful可以通過一套統一的接口爲 Web,iOS和Android提供服務。

2.知識剖析

REST最大的幾個特點爲:資源、統一接口、URI和無狀態。

資源:就是網絡上的一個實體,或者說是網絡上的一個具體信息。

資源總是以某種Representation爲載體顯示的,即序列化的信息

常用的Representation是json(推薦)或者xml(不推薦)等

Representation 是REST架構的表現層

統一接口:

RESTful架構風格規定,數據的元操作,即CRUD操作,分別對應於HTTP方法:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源,這樣就統一了數據操作的接口,僅通過HTTP方法,就可以完成對數據的所有增刪查改工作。

GET(SELECT):從服務器取出資源(一項或多項)。

POST(CREATE):在服務器新建一個資源。

PUT(UPDATE):在服務器更新資源(客戶端提供完整資源數據)。

DELETE(DELETE):從服務器刪除資源。

URI

可以用一個URI(統一資源定位符)指向資源,即每個URI都對應一個特定的資源。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或識別符。

一般的,每個資源至少有一個URI與之對應,最典型的URI即URL。

無狀態

所謂無狀態的,即所有的資源,都可以通過URI定位,而且這個定位與其他資源無關,也不會因爲其他資源的變化而改變。有狀態和無狀態的區別,舉個簡單的例子說明一下。如查詢員工的工資,如果查詢工資是需要登錄系統,進入查詢工資的頁面,執行相關操作後,獲取工資的多少,則這種情況是有狀態的,因爲查詢工資的每一步操作都依賴於前一步操作,只要前置操作不成功,後續操作就無法執行;如果輸入一個url即可得到指定員工的工資,則這種情況是無狀態的,因爲獲取工資不依賴於其他資源或狀態,且這種情況下,員工工資是一個資源,由一個url與之對應,可以通過HTTP中的GET方法得到資源,這是典型的RESTful風格。

具體規範

URI命名規範

文檔(資源的單一形式,可理解爲一個對象)類型的資源用名詞(短語)單數命名

集合(容器,相當於資源的集合)類型的資源用名詞(短語)複數命名

倉庫(資源庫)類型的資源用名詞(短語)複數命名

URI都爲小寫,如果有連着的單詞就用“/”分隔,分配到下一級

URI中有些字段可以是變量,在實際使用中可以按需替換

3.常見問題

1.HTTP常見的響應狀態碼有哪些,分別代表什麼?

4.解決方案

200 (“OK”) 用於一般性的成功返回

201 (“Created”) 資源被創建

204 (“No Content”) 此狀態可能會出現在PUT、POST、DELETE的請求中,一般表示資源存在,但消息體中不會返回任何資源相關的狀態或信息。

301 (“Moved Permanently”) 資源的URI被轉移,需要使用新的URI訪問

400 (“Bad Request”) 用於客戶端一般性錯誤返回, 在其它4xx錯誤以外的錯誤,也可以使用400

404 (“Not Found”) 找不到URI對應的資源

500 (“Internal Server Error”) 服務器端的接口錯誤,此錯誤於客戶端無關

5.擴展思考

Rest請求方法解析

Get

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

因爲參數信息會完全暴露,因此是不推薦發送重要信息的。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請求都不會破壞數據

5.參考文獻

http://blog.csdn.net/zghwaicsdn/article/details/53788535#t16

6.更多討論

鳴謝

感謝觀看,如有出錯,懇請指正

q:restful有什麼請求

a:get,put,post,delete四種

q:怎麼請求put,delete

a:在前段或者form表單中使用影藏域put,delete請求

q:restful接口優點

a:表示無狀態,表示資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章