REST的缺點是什麼?

幾年前,Ganesh Prasad問道,Internet比REST更基本嗎?這些年,他不斷圍繞REST SOA、以及更時新的雲計算提出相關討論,並且鍾情於REST的指導原則。然而,最近有人在LinkedIn REST架構師討論組中的一片帖子中問道,“REST的缺點是什麼?”Ganesh對此做了回覆,然後又在其個人博客中重申了自己的觀點

我不能說REST有“缺點”。它說到的都做到了,而且做得很好。但是,請記住REST架構的實現唯一使用的協議是HTTP。我們可以肯定地想象REST在另一種傳輸協議上的實現,而且其中還包含諸多方面的增強。

接着,他談到了四個可能改進的方面。值得一提的是,Ganesh和許多人一樣,將REST等同於REST/HTTP,即基於HTTP的REST:

  1. "HTTP是一個同步的請求響應式協議。這意味着它不能天然地支持服務端發起的通知(點對點),但這又是經常需要的。這就解釋了爲什麼REST風格的應用程序中的回調需要使用應用層的設計模式,如Webhooks。現在,我們有了WebSockets這樣的雙向傳輸協議,也許工業界應該考慮在其之上根據REST原則設計一款新的應用協議。" 這一點非常有意思,因爲就在差不多一年之前,我們看到有些人甚至在探討WebSockets和REST是否能夠兼容的問題。
  2. Ganesh認爲,REST社區從Web Service協議棧中至少能夠學到一些東西:"這些協議都是基於核心的SOAP和WS-Addressing消息機制能力之上的端到端的協議"。過去,也有人提到過類似的建議。Ganesh接着做了一個類比,他說Web Service之於WS-Addressing、WS-ReliableMessaging、WS-SecureConversation和WS-Policy好比Internet之於TCP、IP和IPSec等。Ganesh認爲,REST的應用冪等性可以更好地實現可靠性(儘管並沒有提到如何更好),而且可以找到REST事務的替代方案,但是他仍然留下了一個問題:
剩下的問題是安全。WS-SecureConversation和WS-Security是可路由的,它們不同於SSL/TLS,而後者卻是REST唯一的安全機制。有了WS-Sec*,就可以對消息進行部分加密,留下一些明文用於基於內容的路由和分支切換。這是REST缺乏對應的優秀方案的地方。SSL是點對點的,不受代理檢測,並且違反了REST原則。REST對此只能忍受。

這一說法也非常有意思,我們也看到了有的人提出了一些想法,如Resteasy的Bill Burke,他提議,REST需要更好地實現安全的方法

Ganesh繼續談到了REST對一般性QoS的問題:

REST不能支持這些一般性QoS背後的原因是,它們都需要維護“會話狀態”。有狀態(statefulness)存在明顯的缺陷(如,影響可伸縮性和錯誤恢復),但是隨着Redis之類的宣稱常數時間(即O(1))和高性能的NoSQL存儲的出現,就有可能將會話狀態從內存中轉移到這樣的存儲中,因而可支持在多個節點間共享會話,進而可以滿足QoS的需要。

回到Ganesh談到的另外兩點:

  1. 他認爲,HTTP的動詞太少,尤其對於需要做點對點交互的場景。他建議:"INCLUDE(將資源加入到某個資源集合中並返回服務端設定的URI)、PLACE(使用客戶端指定的URI向資源集合中添加資源)、REPLACE(全部替換)、FORCE(PLACE或REPLACE)、AMEND(部分更新,它是一個容器動詞,爲一個資源子集指定一個或多個動詞)、MERGE(通過提供的表述合併部分資源)、RETIRE(比DELETE更好)和SOLICIT(替換GET,它也是一個容器動詞,用於告知響應端對發起方的資源做些什麼,因爲現在是點對點的場景了)"
  2. "HTTP合併了應用層和傳輸層的狀態碼(如,304 Not Modified[未修改]和400 Bad Request[無效請求];407 Proxy Authentication Required[需要代理認證]和502 Bad Gateway[無效網關])。 REST在另一個協議上的實現應該更清晰地隔離應用層協議和傳輸層協議。HTTP承擔了雙份工作,因此其結果也往往不盡完美。"

參照一下HTTP 2.0的初始草案,就能發現它不可能完全採納Ganesh的建議。然而,Ganesh本人在過去5年裏好像一直致力於提出一個新規約:

我正在編寫一個稱作Internet Draft的新應用協議,它可以綁定任何傳輸(發佈/訂閱、異步點對點或同步請求/響應)。該協議是被我稱爲ROMA(面向資源/表述的消息傳輸架構)的新型分佈式計算架構的一部分,它不僅包含數據模型和消息傳輸API,還包含更高級的功能(QoS、描述和流程協作)

該規約發佈之後,如何解決這些已知的問題?是否能夠獲得REST社區的積極響應?將是很有意思的看點。


查看英文原文:What Are The Drawbacks Of REST?

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