Onvif協定學習:3、了解web services
文章目錄
- Onvif協定學習:3、了解web services
- 1、遠端調用
- 2、遠端調用原理
- 3、Web Services的簡單了解
- 4、Web Services舉例
- (1)、天氣預報WEB服務
- (2)、手機号歸屬地查詢WEB服務
- 5、Web Services常用的幾種架構
- 6、SOAP簡介
- (1)、 在TCP/IP四層模型中展示SOAP
- (2)、如此了解SOAP
- (3)、SOAP的局限性
- (4)、SOAP協定看起來長這樣
- (5)、WSDL文檔
- 7、總結
ONVIF規範中裝置管理和控制部分所定義的接口均以Web Services的形式提供。要了解什麼是ONVIF,就必須先知道什麼是Web Services。是以,在專欄開始介紹ONVIF之前,我單獨整理了一篇文章來介紹Web Services。
本文僅是簡要的介紹了「什麼是Web Services」,旨在讓你對Web Services有個感性的認識。
是以本文隻适合那些「沒學過Web Services」的朋友,如果你已經懂得什麼是Web Services,那麼可以移步了。
Web Services初學者,往往會被諸如WSDL、SOAP、HTTP、XML等概念搞得暈頭轉向。往往也會發出這樣的疑問:要勝任ONVIF協定網絡錄影機(IPC)用戶端程式開發,對Web Services的掌握要到什麼程度?我現在就消除你的疑惑,你隻要知道皮毛就夠了,這得益于諸如gSOAP這樣現成的工具,避免了我們「自己造輪子」。跟着我的專欄一步步學習,你就會體會到這點。
不多說,進入本文的主題。
1、遠端調用
函數接口調用方式分為:
本地調用(Local Procedure Call,簡稱LPC)。
遠端調用(Remote Procedure Call,簡稱RPC)。
- 本地調用:通常,在我們的代碼中調用一個函數,這個函數要麼是系統API,要麼是我們自己實作的本地代碼,一起編譯,一起釋出,也在同一個程序中一起執行,這就是本地調用!
- 遠端調用:被調用方法的具體實作不在同一個程序,而是在别程序,甚至别的電腦上。RPC一個重要思想就是,使遠端調用看起來像本地調用一樣,調用者無需知道被調用接口具體在哪台機器上執行。
2、遠端調用原理
比如 A (client) 調用 B (server) 提供的remoteAdd方法:
- 1、首先A與B之間建立連接配接(通常是TCP,但還有其他的,如HTTP、管道等);
- 2、然後A把需要調用的方法名(這裡是remoteAdd)以及方法參數(10, 20)序列化成位元組流發送出去;
- 3、B接受A發送過來的位元組流,然後反序列化得到方法名,方法參數,接着執行相應的方法調用并把結果30傳回;
- 4、A接受遠端調用結果,輸出30。
通過上面的簡單闡述,遠端調用與socket通訊好像啊,都是遠端通訊,都是C/S模式。他兩者到底有啥差別?
- 1、RPC在提供強大的遠端調用能力的同時,不損失本地調用的語義簡潔性。RPC一個重要思想就是:使遠端調用看起來像本地調用一樣。
- 2、socket是RPC經常采用的通信手段之一,除了Socket,RPC還有其他的通信方法,比如:http、作業系統自帶的管道等。
用HTTP協定實作的遠端調用,熟悉的人一下子就想到了Web Service。
3、Web Services的簡單了解
我們可以這樣來了解什麼是Web Services,它即是一種網絡服務。當你的系統完成一個通用的功能以後,如果你想讓别人使用你的功能的話,那麼你就可以釋出成為Web Services服務,别人就可以通過網絡遠端調用到你的服務接口(即通過輸入url可以通路,我們還可以像函數一樣傳遞參數通過url傳遞)。
Web Services能夠讓各個系統之間的對接變得:快捷、友善、廉價。
4、Web Services舉例
免費的Web Services服務:http://www.webxml.com.cn/zh_cn/index.aspx
這個網址提供了很多免費的Web Services服務,而且在網頁上提供了各個遠端調用接口的「測試」功能,這個「測試」功能有助于大家了解Web Services服務的遠端調用接口,大家可以去體驗下,我拿其中的「天氣預報」和「手機号歸屬地查詢」舉個例子。
(1)、天氣預報WEB服務
Web Services服務位址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
看主要接口getWeather,輸入城市名稱調用該接口,Web Services就會傳回該城市的天氣預報資料,如下圖所示。
(2)、手機号歸屬地查詢WEB服務
Web Services服務位址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
看接口getMobileCodeInfo,輸入手機号碼,就能獲得手機号碼歸屬地省份、地區和手機卡類型資訊。如下圖所示:
5、Web Services常用的幾種架構
實作Web Services的幾種方式:
實作Web Services常用的架構有:REST、SOAP、JavaScript、XML-PRC等。這些看不懂,沒關系,大家知道一個事情即可:實作Web Services的方式有好幾種。
我們的主角ONVIF标準中的Web Service采用的是SOAP方式,接下來我們來了解下SOAP。
6、SOAP簡介
(1)、 在TCP/IP四層模型中展示SOAP
SOAP(Simple Object Access Protoco,簡單對象通路協定),是TCP/IP協定體系中的一個應用層協定,它是在HTTP基礎之上實作的。
(2)、如此了解SOAP
淺談 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/
這篇IBM的文章「淺談 SOAP」寫的很好,值得參考。
以下這張圖是我對SOAP的了解:
SOAP協定 = RPC機制 + HTTP傳輸協定 + XML資料格式
SOAP的兩個主要設計目标是「簡單性」和「可擴充性」,SOAP的設計正是圍繞這兩點展開的。
SOAP使用RPC機制,展現了「簡單性」。讓用戶端調用Web Service的接口看起來像本地調用一樣,确實很簡單。
SOAP 使用 HTTP 傳送 XML,展現了「可擴充性」。盡管HTTP 不是有效率的通訊協定,而且 XML 還需要額外的檔案解析(parse),兩者使得交易的速度大大低于其它方案。但是XML 是一個開放、健全、有語義的訊息機制,而 HTTP 成熟、穩定、又能避免許多關于防火牆的問題,進而使SOAP得到了廣泛的應用。
套用一副對聯加以概括:
上聯: 社群活躍架構多
下聯: 簡單易懂不出錯
橫批: 省時省力
(3)、SOAP的局限性
SOAP也有一些局限性,以下場景就不适合 SOAP:
-
實時資料推送
HTTP是短連接配接的,都是用戶端請求,服務端應答,這種模式導緻服務端無法實時推送資料給用戶端,隻有像Socket那樣的長連接配接才能保證明時通訊。
-
省流量、高傳輸效率的應用
HTTP有標頭,而且XML全部用文本檔案來傳輸資料,效率會比較低,如果你對流量、傳輸效率要求極高,那麼你應該多考慮其它的方式,而不要用 SOAP。
(4)、SOAP協定看起來長這樣
這個一個股票Web Services服務系統,其中GetStockPrice接口适用于查詢股票目前價格,圖中查詢了IBM的股票價格,Web Services傳回股票價格為34.5
(5)、WSDL文檔
對于一個Web Services,我們如何知道它對外提供了多少個接口,以及每個接口是如何調用的,這就涉及到WSDL(Web Services Description Language,網絡服務描述語言)。
注意:隻有SOAP方式實作的Web Services才有WSDL文檔,其他方式實作的Web Services并沒有WSDL文檔。
我們可以這麼了解WSDL:WSDL是一個使用XML語言書寫的文檔,這個文檔描述了Web Services對外提供了哪些接口,就像動态庫的.h檔案一樣。每個Web Services都有對應的WSDL文檔。
什麼是WSDL
如果将WSDL語言轉化成C語言,它看起來應該是這樣子:
我們可以看看完整的WSDL文檔長什麼樣子的:
- 天氣預報WEB服務的接口說明(WSDL文檔)
- 手機号歸屬地查詢WEB服務的接口說明(WSDL文檔)
- ONVIF标準的WEB服務的接口說明(WSDL文檔)
如果你是第一次接觸WSDL文檔,前兩個的WSDL文檔估計你是看不懂(排版亂糟糟),而ONVIF的WSDL文檔興許你還能看懂(ONVIF官網的WSDL之是以這麼工整,是因為插入排版的語句)。
7、總結
回顧下本文的重點:
Web Services是一種網絡服務,它對外提供了一系列遠端調用接口(RPC),你可以像本地調用一樣去調用這些遠端調用接口。列舉了幾個免費的WEB服務供大家體驗。
Web Services常用的架構有多種,ONVIF标準中的Web Service采用的是SOAP方式。