天天看點

RESTful_基礎知識

目錄

前言

本篇主要是RESTful的基礎知識整理,主要是為了将要開始的Openstack架構主題做知識積累。了解好RESTful的設計思想無論是對學習Openstack架構還是Openstack Dashboard實作都是一件事半功倍的事情。

RESTful

REST(Representational State Transfer):是一種軟體架構的設計風格,而不是一種标準。主要用于C/S架構的軟體設計,也能很好的支援B/S架構,為軟體設計提供了一組原則和限制條件,但這是原則和限制的條件均不具有标準性。

是以也可以将REST了解為是一組沒有嚴格标準的架構限制條件和設計原則。能夠使設計出來的軟體簡潔、可擴充、安全可靠、更有層次、更易于實作緩存機制。REST的軟體設計傾向于簡單輕量的方法設計和實作,以及REST具有通過HTTP直接傳輸資料的特性。

注意:REST并沒有一個明确的标準,更像是一種設計的風格。

RESTful:即滿足REST限制條件和原則的應用程式或設計,就是RESTful

REST原則

無狀态原則:

在Web應用程式中,最重要的REST原則是:Client和Server間的互動請求是無狀态的。在REST中,每一個對象都是通過URL來表示,對象使用者負責将狀态資訊打包進每一條資訊内,保證對象的處理總是無狀态的。

互動原則:

而且從Client到Serser的每一個請求都必須包含了解請求所需要的資訊,如果Server在Client的請求過程中重新開機了,Client不會得到Server的響應通知。但是,無狀态的請求可以由任何可用Server來響應。使用REST架構設計的系統,可以擴充到大量的Client中,并且降低了Client與Server之間的互動延遲。這十分合适雲計算的環境。用戶端也可以緩存資料來改進其性能。

資源:

在Server端中的應用程式狀态和功能都可以抽象為一種資源,如:應用程式對象、資料庫記錄、算法等,這些資源以URI(Universal Resource Identifier)的方式向Client公開。每一個資源映射到一個URI,URI作為資源的唯一辨別。

HTTP标準方法:

因為所有的資源又都共享統一的接口,便于Client和Server之間使用标準的HTTP方法(GET、PUT、POST、DELETE)來傳輸資訊。

分層系統:

為了使得系統中的元件無法了解除了與它自身互動的中間件之外的任何元件。通過将不同的元件分别限制在各自的層面上,可以限制整個系統的複雜性,促進了底層的獨立性。并且使用統一的Dashboard可以簡化整個系統的後端架構,改進子系統之間互動的可見性。即:簡化了Client和Server的實作。

中間件:

中間件是一種獨立的系統軟體或服務程式,能夠連接配接兩個獨立軟體或系統。分布式應用軟體借助于中間件能夠在不同的技術之間共享資源。即:中間件使得若幹個互相獨立的系統,在各自都擁有着不同的接口的情況下,仍然能通過中間件來實作通信。執行中間件的一個關鍵途徑是資訊的傳遞。通過中間件,應用程式可以工作在多個平台及OS環境中。簡而言之,中間件即橋梁。

RESTful的實作

在了解RESTful的Web服務之前,首先來了解了解與之相似的另外一種實作方法—— RPC樣式 Web服務

SOA(面向服務的體系結構):是一個元件模型,它通過在應用程式中不同的服務(功能單元)之間定義良好的接口和契約,使得不同的服務之間可以聯系起來。這些接口是采用中立的方式進行定義的,接口獨立于實作服務的硬體平台、OS和程式設計語言。

SOA能夠讓這些建構在各種系統中的服務可以使用一種統一和通用的方式進行互動。

SOA可以根據需求通過網絡對松耦合的粗粒度應用元件進行分布式部署、組合和使用。服務之間通過簡單、精确定義的接口進行通信,不需要了解底層程式設計接口和通信模型。服務層是SOA的基礎,可以直接被應用程式調用,進而有效的控制系統中與軟體代理互動的人為依賴性。

SOA能夠讓軟體工程師們站在一個新的高度去了解企業級架構中的各種元件的開發、部署形式,它将有利于企業系統架構師更迅速、可靠、更具重用性的架構整個業務系統。

RPC(Remote Procedure Call Protocol 遠端過程調用協定),是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。RPC協定假定某些傳輸協定(TCP/UDP)的存在,為程式的通信攜帶資訊資料。

RPC采用C/S架構,Client請求服務,Server提供服務。Client的調用程序發送一個有程序參數的信封(包含參數的調用資訊)到Server的服務程序,然後等待回應。Server的服務程序會保持睡眠狀态來等待Client發送的調用資訊,當一個調用資訊到達Server後,Server的服務程式就會獲得參數、并将執行後的結果響應給Client,然後傳回睡眠狀态等待下一個調用資訊。最後Client調用程序接收到響應資訊後,得以繼續執行程式。

SOAP(簡單對象通路協定):是交換資料的一種協定規範,是一種輕量級的、簡單的、基于XML的協定,SOAP被設計成在Web上交換結構化和固化的資訊。與WADL(Web Services Descruption Language)、UDDI(Universal Description Discovery and Integration)并稱為Web Servicve三要素。SOAP可以和HTTP(超文本傳輸協定)、SMTP(簡單郵件傳輸協定)等,現存的許多Internat協定和格式結合使用。而且還支援從消息系統到RPC(遠端過程調用)等應用程式。SOAP使用了基于XML的資料結構和HTTP(超文本傳輸協定)的組合來定義一個标準的方法,并以這種方法來使用Internat上各種不同操作環境中的分布式對象。

WADL:描述如何通路具體的接口

UDDI:管理、分發、查詢Web Services

這是實作SOA最常用的方法,RPC樣式的Web服務Client将一個包含了資料(方法、參數資訊)的信封通過HTTP協定發送到Server,Server将信封打開并接收傳入的參數、執行指定的方法,然後将方法執行後的結果再次打包成一個信封傳回到Client。最後Client接收到來自Server的響應。在PRC樣式的架構中,每一個對象都有自己獨特的方法,且僅會公開一個URI來辨別。

注意:RPC架構忽略了HTTP大部分特性且僅支援POST方法。

RESTful Web服務通常可以通過自動用戶端或代表使用者的應用程式直接通路,在REST樣式的Web服務中,每個資源都有一個位址URI(統一資源表示符)。而資源的本身就是方法調用的目标,方法清單對所有的資源都是一樣的,這些方法都是标準方法,包括HTTP GET、PUT、POST、DELETE、HEADER、OPTIONS。

自動用戶端:

自動化使得應用程式能夠對在另一個應用程式中實作的對象進行操作,或者會将對象公開以便可以對其進行操作。自動用戶端是可以對屬于另一個應用程式公開的對象進行操作的應用程式。而公開對象的應用程式也被稱之為自動伺服器。自動用戶端通過通路自動伺服器中對象的屬性和方法對這些對象進行操作。有下面兩種類型:

1. 運作時:動态的擷取相關服務屬性和操作資訊的Client

2. 編譯時:擁有指定伺服器屬性個操作的靜态資訊的Client

在RPC樣式的Web服務中關注的是方法,而在RESTRful樣式的Web服務中關注的是資源。

REST-RPC混合樣式Web服務不使用信封來包裝方法、參數、資料,是通過直接的HTTP傳輸資料,這一點與REST樣式的Web服務是類似的。但這種混合樣式不使用标準的HTTP方法來操作資源,它在HTTP請求的URI中就已經存儲了方法資訊。

RESTful Web服務的多層架構

RESTful Web服務的多層架構與動态Web應用程式的多層架構在許多方面上是類似的。參照下面的多層架構圖。Web服務與Web應用程式的不同在于用戶端的本質(自動化/GUI)和表示層(Presentation layer)處理程式。Web服務讓業務邏輯(Business logic layer)和資料可以由自動用戶端(由自動化腳本支援的WebServicesClient)和GUI用戶端(BrowserClient)共享。

從資料通路中分離業務邏輯可以實作資料庫的獨立性,并且能夠為各種類型的資料存儲提供插件能力。

在自動化用戶端(Web服務的用戶端)中,包括了Python、Java等語言編寫的腳本,它們代表使用者以自動化樣式來運作。自動化用戶端在Web層向Resource Request Handler(資源請求處理程式,使用Jersey或Restlet架構實作)發送HTTP請求。自動用戶端的無狀态請求在頭部包含了方法資訊,即POST、GET、PUT、DELETE等方法的資訊,這又将映射到Resource Request Handler中資源的相應操作。每個無狀态請求都包含了了解請求所需要的資訊,包括Resource Request Handler用來處理請求的憑據。從Web服務的用戶端接收到請求後,Resource Request Handler會從業務邏輯層請求服務。Resource Request Handler會确定所有概念性的實體,系統将這些實體作為資源公開出去的同時為每一個資源配置設定唯一的一個URI。但是,概念性的實體在表示層是不存在的,它存在于業務邏輯層。Resource Request Handler使用Jersey或Restlet架構來實作,是以它是輕量級的,會将大量的工作委托給業務邏輯層。

Web浏覽器用戶端(GUI用戶端),使用表示層中的Browser Request Handler(浏覽器請求處理程式)生成的HTML來提供顯示功能。Browser Request Handler可以使用MVC、MTV模型。它從浏覽器接受請求,從業務邏輯層請求服務,再生成表示視圖并對浏覽器做出響應,表示視圖提供給使用者在浏覽器中顯示。表示視圖不僅包含了内容,而且還包含了顯示的屬性,如HTML、CSS。在浏覽器中運作且作為RESTful Web服務消費者的角色的Ajax、Flash等等都屬于Web服務的用戶端。Ajax和RESTful Web服務本質上是互補的,而且RESTful Web服務為Ajax提供了非常簡單的API來處理伺服器上資源之間互動。

業務邏輯層充當着資料通路層(Data access layer)和表示層之間資料交換的中間層,資料經過業務邏輯層的處理後以域對象或值對象的形式提供給表示層。從業務邏輯層中解耦Browser Request Handler和Resource Request Handler有助于促進代碼的重用,并能實作靈活和可擴充的架構。

資料通路層提供了與資料存儲層(Data store layer)的互動,資料通路層可以使用DAO設計模式或對象-關系映射解決方案來實作。資料通路層的作用在于針對不用的資料存儲技術,都能夠從業務邏輯層中分離資料通路代碼。資料通路層還可以作為連接配接其他系統的內建點,可以成為其他Web服務的用戶端。

DAO(Data Access Object):資料通路對象。是一個面對對象的資料通路接口(API),即連接配接資料庫的接口。夾在業務邏輯層和資料庫資源中間。

資料存儲層包括了資料庫系統、LDAP伺服器、檔案系統和企業資訊系統。使用該架構,你可以看到RESTful Web服務能夠靈活的成為任何企業資料存儲統一的API,進而向以使用者為中心的Web應用程式公開垂直資料,并部署自動化批量報告腳本。

RESTful_基礎知識

最後

可能對于剛開始接觸RESTful的小夥伴們不能太了解上面的内容,不過大可以放心本篇是作為一個概括性的文章,以後還會反複的對其中的内容做出擴充。

繼續閱讀