REST學習

RPC架構與REST架構

RPC:RPC將服務器看作一些列動作的集合(需要做某件事)

REST:將服務器看作分布式對象集合,客戶端通過調用這些對象上的方法來執行特定的任務,組件交互的可伸縮性、接口的通用性、組件的獨立部署、以及用來減少交互延遲、增強安全性、封裝遺留系統的中間組件

即對服務的思考,RPC是對面向過程的方式進行思考,REST是面向對象方式進行思考,

分布式服務,兩個思維集群方式發生改變

?

?

REST學習

(1)?REST架構的實現唯一使用的協議是HTTP

(2)?WS-Security是可路由,是REST唯一的安全機制(WS-SecureConversation和WS-Security)

(3)?REST事務

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

?

REST的主要優勢到底是什么?

對于基于網絡的應用來說,你怎么樣看待服務器,就會產生什么樣的架構風格,隨之產生與該架構風格相關的交互模式。

RPC架構風格將服務器看作是由一些過程組成,客戶端調用這些過程來執行特定的任務。SOAP就是RPC風格的一種架構。過程是動詞性的(做某件事),因此RPC建模是以動詞為中心的。

分布式對象架構風格認為服務器是由一些對象和對象上的方法組成,客戶端通過調用這些對象上的方法來執行特定的任務。并且客戶端調用這些對象上的方法應該就像是調用本地對象上的方法一樣,這樣開發就可以完全按照統一的面向對象方法來做。但是很可惜,這樣的抽象并不是很有效,因為分布式對象與本地對象存在著巨大的本質差別,想要掩蓋這些差別很多時候甚至是有害無益的。

REST架構風格并沒有試圖掩蓋這些差別,而是將服務器抽象為一組離散資源的集合。資源是一個抽象的概念,而不是代表某個具體的東西。注意:要真正理解REST,就一定要增強自己的抽象思維能力,充分理解到資源是抽象的。如果完全不具有抽象思維的能力,一定要將資源與數據庫中的一張表或服務器端的一個文件(HTML、Servlet、JSP、etc.)一一掛起鉤來,就無法真正理解REST了。資源是名詞性的,因此REST建模是以名詞為中心的。

上述是目前基于網絡的應用的主要的三種抽象方式。這三種不同的抽象方式會嚴重影響客戶端與服務器的交互模式,而不同交互模式的交互效率差別相當大。分布式對象的交互模式很多時候效率很低,因為掩蓋了分布式對象與本地對象的差別,很多時候都會導致細粒度的API(需要一再強調才能讓一些不明就里的架構初哥按照正確的方式來做設計)。實踐已經證明,與RPC和分布式對象相比,REST是一種對于服務器更加有效的抽象方式,將會帶來粒度更大和更有效率的交互模式。這樣的效果與Fielding設計REST的初衷是吻合的,REST就是專門為交互的性能和可伸縮性進行過優化的一種架構風格。而SOAP在設計的時候優先考慮的從來不是性能和可伸縮性,而是互操作性。除非出現奇跡,否則你種什么,就應該長出來什么。你種的是瓜,長出來的就是瓜;你種的是豆,長出來的就是豆。

Fielding寫到:“REST提供了一組架構約束,當作為一個整體來應用時,強調組件交互的可伸縮性、接口的通用性、組件的獨立部署、以及用來減少交互延遲、增強安全性、封裝遺留系統的中間組件。”

有人認為REST不是面向對象的,其實REST雖然沒有分布式對象那么面向對象,在我看來至少比RPC更加面向對象。按照《企業應用架構模式》,以動詞為中心建模是什么?是不是就是事務腳本?以名詞為中心建模是什么?是不是就是領域模型?這就扯遠了,網絡通信是否一定需要實現為面向對象的形式,我認為是不需要的。

“REST的主要優勢在我看來其實在于它是一種對于服務器的更加有效的抽象方式。”
這句話等于是,我先把一個骨架放在這里,還沒有用血肉來充實它,也就是還沒有舉出具體的實例來。具體的實例以后我們還需要來詳細討論。REST是非常簡練的,同時又是一種非常強大的抽象方式,在我看來就是從根本上簡化Web開發的一味良藥。

?

轉載于:https://www.cnblogs.com/rainy-shurun/p/5342492.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458112.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HI3559A和AI深度學習框架caffe

from:http://blog.sina.com.cn/s/blog_156e567660102ygdf.html 1、HI3559A支持深度學習框架caffe。其中的NNIE神經網絡加速單元是主要的屬性。 2、caffe是一種快速深度學習框架和TensorFlow一樣是一組標準深度學習開源框架。 3、對應想嘗試AI深度學習的朋友可以按照網上的流…

UValive4195 Heroes of Money and Magic

斜率優化 想罵人了,馬格吉最后調了半小時 TMD造數據的人是SB吧? 我寫 while(scanf("%d%d",&n,&m)!EOF&&n) 然后就TMD無限WA...WA...WA... 尼瑪 改成while(scanf("%d%d",&n,&m),n) 就過了,就過了…

Google Protocol Buffer 的使用和原理

from: https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 簡介 什么是 Google Protocol Buffer? 假如您在網上搜索,應該會得到類似這樣的文字介紹: Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內部的混合語言…

Electron

跨平臺桌面app開發 Appjs hex nwjs electron 官網:http://electron.atom.io/ 中文文檔:https://github.com/atom/electron/tree/master/docs-translations/zh-CN zcbenz: https://github.com/zcbenz https://github.com/atom/electron simple…

WCF技術剖析之十八:消息契約(Message Contract)和基于消息契約的序列化

在本篇文章中,我們將討論WCF四大契約(服務契約、數據契約、消息契約和錯誤契約)之一的消息契約(Message Contract)。服務契約關注于對服務操作的描述,數據契約關注于對于數據結構和格式的描述,而…

【深度學習數據集】常用公開圖片數據集下載

1.MNIST MNIST是一個手寫數字數據庫,它有60000個訓練樣本集和10000個測試樣本集,每個樣本圖像的寬高為28*28。此數據集是以二進制存儲的,不能直接以圖像格式查看,不過很容易找到將其轉換成圖像格式的工具。 最早的深度卷積網絡Le…

常用的幾種卷積神經網絡介紹

常用的幾種卷積神經網絡介紹 標簽(空格分隔): 深度學習 這是一篇基礎理論的博客,基本手法是抄、刪、改、查,畢竟介紹這幾個基礎網絡的博文也挺多的,就算是自己的一個筆記吧,以后忘了多看看。主…

計算客 (人人都有極客精神)爆力

人人公司是一家極為鼓舞極客精神的公司,當有重要的項目須要上線但又時間太緊。甚至須要當天上線的時候。往往會掛起海盜旗開啟電子日期顯示。讓大家能夠在對時間有更明白的感知的情況下,同心協力搞定重要的項目。海盜旗下方的電子屏顯示的日期形式為 YYY…

深度學習案例

1. neural-style:利用卷積神經網絡將一幅圖像的內容與另一幅圖像的風格相結合 https://github.com/jcjohnson/neural-style 2.Nerual Doodles:把 2 位的 Doodle 轉成精良的藝術品 https://github.com/alexjc/neural-doodle 3. srez:通過深度…

深度學習圖像標注工具匯總

對于監督學習算法而言,數據決定了任務的上限,而算法只是在不斷逼近這個上限。世界上最遙遠的距離就是我們用同一個模型,但是卻有不同的任務。但是數據標注是個耗時耗力的工作,下面介紹幾個圖像標注工具: Labelme Labe…

UIBarbuttonItem

APPDelegate: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; //創建主界面,導航欄的第一個頁面 FirstViewContr…

深度殘差網絡ResNet解析

ResNet在2015年被提出,在ImageNet比賽classification任務上獲得第一名,因為它“簡單與實用”并存,之后很多方法都建立在ResNet50或者ResNet101的基礎上完成的,檢測,分割,識別等領域都紛紛使用ResNet&#x…

Oracle-一個中文漢字占幾個字節?

Oracle 一個中文漢字占用幾個字節 Oracle 一個中文漢字 占用幾個字節,要根據Oracle中字符集編碼決定!!! 1. 如果定義為VARCHAR2(32 CHAR),那么該列最多就可以存儲32個漢字,如果定義字段為VARCHAR2(32) 或VARCHAR2(32 B…

基于深度學習的目標檢測技術演進:R-CNN、Fast R-CNN、Faster R-CNN

object detection我的理解,就是在給定的圖片中精確找到物體所在位置,并標注出物體的類別。object detection要解決的問題就是物體在哪里,是什么這整個流程的問題。然而,這個問題可不是那么容易解決的,物體的尺寸變化范…

iPhone屏幕尺寸/launch尺寸/icon尺寸

屏幕尺寸 6p/6sp 414 X 7366/6s 375 X 6675/5s 320 X 568 4/4s 320 X 480launch尺寸 6p/6sp 1242 X 2208 3x6/6s 750 X 1334 2x5/5s 640 X 1136 2x4/4s 640 X 960 2x仔細觀察會發現l…

CNN的發展歷史(LeNet,Alexnet,VGGNet,GoogleNet,ReSNet)

歡迎轉載,轉載請注明:本文出自Bin的專欄blog.csdn.net/xbinworld。 關于卷積神經網絡CNN,網絡和文獻中有非常多的資料,我在工作/研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需…

讀取csv格式的數據

1.直接上代碼&#xff0c;關鍵是會用 2.代碼如下&#xff1a; <?php #添加推薦到英文站 $file fopen(code.csv,r); while ($data fgetcsv($file)) { //每次讀取CSV里面的一行內容 //print_r($data); //此為一個數組&#xff0c;要獲得每一個數據&#xff0c;訪問數組下…

如何在VMWare的Ubuntu虛擬機中設置共享文件夾

親測有效&#xff1a;Ubuntu18.04 LTS、虛擬機VMware Workstation 14 Pro 14.1.3 build-9474260、Window7 自己的第一篇博文&#xff0c;由于時&#xff08;shuǐ&#xff09;間&#xff08;png&#xff09;原&#xff08;yǒu&#xff09;因&#xff08;xin&#xff09;&…

容器+AOP實現動態部署(四)

上篇咱們介紹了容器和AOP的結合&#xff0c;結合后怎樣將對象增強服務并沒有過多的說明&#xff0c;這里將詳細說明怎樣將對象 進行增強 &#xff0c;達到一個一對多和多對多的增強方式 先從簡單的方式說起 /** *JDK代理類&#xff0c;實現動態調用對象方法 */ public class JD…

caffe專題五——回歸中——檢測框架

https://blog.csdn.net/runner668/article/details/80436850