David: 他們客戶端用C#,服務器端用Java,準備用RIA+REST+Java的架構。C#也有類似XMLHttpRequest的對象。
Allen: 爲啥是這麼怪異的結構,都用.net得了~
David: 那是不可能的,企業應用服務器端主要還是用Java。
Allen: 那就都用java
David: C#與Java通信,主要有兩種方式:基於SOAP或者基於HTTP。基於HTTP就是REST了。
David: 如果基於SOAP,肯定會影響開發效率。另外性能也會差很多。
Allen: 無論什麼方法,性能都要比單一使用一種平臺慢的
David: 不會的,REST只用到了HTTP。
David: 單個平臺,客戶服務器間走二進制的通信協議,性能也許比REST要好,那就與HTTP無關了。不過這樣做不夠靈活,客戶端與服務器耦合太緊。
Allen: 怎麼不會呢?rest也沒有直接用servlet快啊。
David: REST當然可以直接用Servlet提供服務
David: 但是你基於Servlet,很多日常事務的處理都要自己做,例如URI到處理器的映射。所以最好是有一個框架幫助你做這些事情。
Allen: 一種是通過xml或者json,一種是直接序列化的參數,性能還是不一樣吧
David: REST沒有說一定要用XML或者一定要用JSON格式,任何基於文本的格式都是允許的。
Allen: 但是肯定不是序列化的
David: 你說的序列化是什麼意思呢?
Allen: 我的意思是C#和java通信,走的肯定是語言外的通道,使用rest也是通過語言外的通道傳輸數據。如果是一個平臺,那麼就可以走語言內的通道,這個和rest沒關係了。
David: 這只是一種猜測。所謂的語言內的通道,對於Java來說,只有RMI,連SOAP都不算。
Allen: 嗯,我也是空想,實際做出來最有說服力。到時候你可以把資訊的經驗和我分享一下。
David: RMI是RPC的風格,中間傳輸二進制數據,性能應該比HTTP的純文本稍微高一些,但是這樣做有很多的代價。
David: 那篇論文將來我們都需要反覆多看幾次,實際上REST是權衡很多種架構風格之後的結果,已經能夠得到最佳的性能了。
David: 性能不單純取決於傳輸數據是二進制還是純文本。我告訴你爲什麼。
David: 因爲二進制數據的語義對於中間組件是不可見的,它就無法做有效的緩存,當然也無法確定此數據是否會對安全構成威脅。
David: REST強調通信語義對於中間組件的可見性,這樣可以改善性能和可伸縮性。
David: 所謂的中間組件,瀏覽器就是一種。瀏覽器可以根據通信的語義來確定數據有沒有發生改變,從而進行有效的緩存。
David: RMI傳輸數據再有效,它的數據也無法做有效的緩存。因此RMI的性能未必比REST好,況且不能緩存會帶來嚴重的可伸縮性問題。
David: 這些思想其實在論文中都有很詳細的描述,你再看一遍就全明白了。
Allen: 這麼說也有道理,等有實現rest的經驗後,就一切都明白了