深入淺出REST架構

REST架構概述
服務器君一共花費了63.501 ms進行了4次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

何為REST?

REST是英文Representational State Transfer的縮寫,中文翻譯為“表述性狀態轉移”,他是由Roy Thomas Fielding博士在他的論文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一個術語。Rest是設計基于命名資源而非消息的松耦合應用程序,例如:以 Uniform Resource Locators(URL)、Uniform Resource Identifiers(URI)和 Uniform Resource Names(URN)的形式 — 而非消息的松耦合 Web 應用程序的一種風格。

REST巧妙地借助已經驗證過的成功的Web基礎設施 — HTTP。Web上所有的東西(頁面、圖像等)本質上都是資源。而 REST 正是基于命名資源而非消息的,這就限制了底層技術的曝光,從而給應用程序設計中的松耦合提供了便利條件。REST 的魅力在于任何東西都可以成為資源,且表示方法也可以不同。

比如 http://www.snpmgr.live/librarys/veda/articles/888 ,該 URL 表示一個資源 — 文章為888的資源。請求該資源就會調用 HTTP GET 命令。注意該 URL 是基于名詞的。基于動詞的版本(大概類似 http://www.snpmgr.live/librarys/veda/articles?id=888)會違反 REST 原則,因為它以articles的形式嵌套了一條消息。

REST優勢

REST改善了用戶接口跨多個平臺的可移植性,并且通過簡化服務器組件,改善了系統的可伸縮性。最為關鍵的是通過分離用戶接口和數據存儲這兩個關注點,使得不同用戶終端享受相同數據成為了可能。

1. 無狀態性

無狀態性是在客戶-服務器約束的基礎上添加的又一層規范。他要求通信必須在本質上是無狀態的,即從客戶到服務器的每個request都必須包含理解該request所必須的所有信息。這個規范改善了系統的可見性(無狀態性使得客戶端和服務器端不必保存對方的詳細信息,服務器只需要處理當前request,而不必了解所有的request歷史),可靠性(無狀態性減少了服務器從局部錯誤中恢復的任務量),可伸縮性(無狀態性使得服務器端可以很容易的釋放資源,因為服務器端不必在多個request中保存狀態)。同時,這種規范的缺點也是顯而易見得,由于不能將狀態數據保存在服務器上的共享上下文中,因此增加了在一系列request中發送重復數據的開銷,嚴重的降低了效率。

2. 緩存

為了改善無狀態性帶來的網絡的低效性,我們填加了緩存約束。緩存約束允許隱式或顯式地標記一個response中的數據,這樣就賦予了客戶端緩存response數據的功能,這樣就可以為以后的request共用緩存的數據,部分或全部的消除一部分交互,增加了網絡的效率。但是用于客戶端緩存了信息,也就同時增加了客戶端與服務器數據不一致的可能,從而降低了可靠性。

B/S架構的優點是其部署非常方便,但在用戶體驗方面卻不是很理想。為了改善這種情況,我們引入了REST. REST在原有的架構上增加了三個新規范:統一接口,分層系統和按需代碼。

3. 統一接口

REST架構風格的核心特征就是強調組件之間有一個統一的接口,這表現在REST世界里,網絡上所有的事物都被抽象為資源,而REST就是通過通用的鏈接器接口對資源進行操作。這樣設計的好處是保證系統提供的服務都是解耦的,極大的簡化了系統,從而改善了系統的交互性和可重用性。并且REST針對Web的常見情況做了優化,使得REST接口被設計為可以高效的轉移大粒度的超媒體數據,這也就導致了REST接口對其它的架構并不是最優的。

4. 分層系統

分層系統規則的加入提高了各種層次之間的獨立性,為整個系統的復雜性設置了邊界,通過封裝遺留的服務,使新的服務器免受遺留客戶端的影響,這也就提高了系統的可伸縮性。

5. 按需代碼

REST允許對客戶端功能進行擴展。比如,通過下載并執行applet或腳本形式的代碼,來擴展客戶端功能。但這在改善系統可擴展性的同時,也降低了可見性。所以它只是REST的一個可選的約束。

REST規范接口

每個資源都有對應的URI,不同的HTTP Method對應的對資源不同的操作,GET(讀取資源信息)、POST(添加資源)、PUT(更新資源信息)、DELETE(刪除資源)。幾乎所有的計算機語言都可以通過HTTP協議同REST服務器通信。

場景:

  • A:http://www.snpmgr.live/articles
  • B:http://www.snpmgr.live/articles/{id}

A網址:GET方法:顯示全部用戶信息;同時有個POST方法,用來添加用戶; DELTE、PUT方法一般沒提供。

B網址:GET方法:顯示當前用戶信息;PUT方法:更新用戶信息;DELETE方法:刪除該用戶信息。

REST應用

目前國內外流行的Web 2.0應用API接口中,很多都支持REST架構風格。例如:新浪微博開放平臺、人人網API、Google OpenID、Flickr、Twitter、eBay、Facebook、Last.fm、del.icio.us、Yahoo Search、Amazon S3、Amazon EC2、Digg、Microsoft Bing、FriendFeed、PayPal、Foursquare等。

本文地址:http://www.snpmgr.live/librarys/veda/detail/885,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/885

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《編程珠璣(第2版)》 Jon Bentley (作者), 黃倩 (譯者), 錢麗艷 (譯者)

《編程珠璣(第2版)》是計算機科學方面的經典名著。書的內容圍繞程序設計人員面對的一系列實際問題展開。作者Jon Bentley 以其獨有的洞察力和創造力,引導讀者理解這些問題并學會解決方法,而這些正是程序員實際編程生涯中至關重要的。

更多計算機寶庫...

燃烧吧足球登陆