***
rest(表述性狀態轉移)是最近幾年討論的最為熱烈的話題之一,其起源於roy.t.fielding博士的**《軟體架構風格和基於網路的軟體架構設計》。roy博士在他的**裡從架構風格角度闡述了網路應用程式中最佳架構風格rest。
首先,rest是乙個架構風格而不是乙個架構,所謂架構風格就是凌駕於架構之上的一組約束。
其次,rest對立面是rpc,而不是webservices或者soap,最近一些年關於rest和rpc的爭論一直不斷
再次,一般的網際網路服務呼叫存在兩種user agent,一種是普通瀏覽器,另一種是client程式,rest主要針對是第二者,系統整合時候各個系統之間的服務呼叫
rest強調的是盡可能多的用http協議本身的語義來傳達資訊,這樣能減少服務雙方關於語義共識的需要
在我看來,rest是標準的網際網路技術,在企業內網應用價值大打折扣,因為在網際網路中,隨時有新的服務**商產生,你永遠也不知道將來可能要呼叫誰的服務,也永遠不知道將來誰會把服務改掉,所以使用傳統rpc服務使用者和服務**者之間的溝通的協調難度非常大。而在企業內網雖然系統也很龐大,但是再龐大的系統也被認為是封閉的,可估算的,你很容易地知道要呼叫哪些服務。
martinfowler在最近的一篇文章裡描述了逐步實現rest的四個級別:
0級:傳統的rpc,基於soap的ws,呼叫的服務名,引數放在http協議的body裡面,同時必須以post方式提交,問題在於你必須清楚的知道所有服務,子服務,及其引數的資訊,並且需要知道各種服務的不同點。
1級:利用resource概念,把所有服務都抽取成resource概念,從body中提取到header裡,這樣做的好處就是如果你知道乙個服務位址,你可能無需知道具體服務是什麼,依照資源的慣例就訪問到服務,比如/books/1。
2級:利用http動詞,http定義了4種動詞,get獲取伺服器資源,post在伺服器上建立新資源,put更改伺服器上資源,delete刪除伺服器上資源,任何操作都可以看成增刪改查,所以利用標準的http verb加上resource(/book/1)就能準確地操作資源,當你不知道服務具體是什麼的時候也可以輕易按照慣例訪問到服務,然而服務**商更改服務也需要遵循慣例,不會像rpc那樣輕易更改服務介面。
3級:最高端別,超**既應用狀態引擎。這個意思是說,對於任何服務都存在很多子服務,你只需要知道第乙個服務的入口,便可以依據服務返回結構的自描述性得到下乙個服務的入口,這樣在服務**商修改服務的時候,不會影響到客戶端的呼叫。
事物的四個特性和四個隔離級別
事物是一條或者多條sql語句組成的執行序列,這個序列中的所有語句都屬於同乙個工作單元,要麼同時完成,其中如果有乙個失敗,則其他操作都要回滾。事物是乙個不可分割的資料庫邏輯工作單位,要麼全部完成,要不失敗回滾。事務執行的結果必須使資料庫從乙個一致性狀態變到另乙個一致性狀態。乙個事物的執行不能被別的併發...
事務的四個標準特性和隔離性的四個級別
乙個資料庫事務是 乙個被視為單一的工作單元的操作序列 乙個良好的事務處理系統,必須具備四個標準特性 原子性 atomicity 乙個事務必須被視為乙個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於乙個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性。一...
事物的四個特性和隔離級別
一 什麼是事務 事務是應用程式中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務具有原子性,乙個事務中的一系列的操作要麼全部成功,要麼乙個都不做。事務的結束有兩種,當事務中的所以步驟全部成功執行時,事務提交。如果其中乙個步驟失敗,將發生回滾操作,撤消撤消之...