[WS]Web服務系列(一)簡介
Web服務系列計劃由大約十篇帖子組成,目的是介紹各種概念,以及開發Web服務的工具。在這第一篇裡我會簡單介紹一下Web服務的概念,並演示一個Web服務的具體應用場景。文章的篇幅不會太長,因為那樣會看得很累,反正我是個“沒有耐心”的人,呵呵。
Web服務(Web Services)在很多人眼裡還是個十分神祕的概念,究其根源,我想主要是由於Web服務被宣傳得很多,但實際應用卻鮮見,給人一種很複雜和難以理解的感覺。另外,Web服務是基於XML的,不少人對XML本身也缺乏理解,雖然他們可能每天都在寫XML格式的配置檔案。
提到Web服務的起源就一定要先說一說SOA(面向服務的體系結構),和很多具有劃時代意義的軟體技術一樣,SOA的出現根本上也是為了解決軟體危機問題。做過專案的人都有過這種感受,隨著專案推進,模組之間關係越來越緊密,任何一個小的修改都可能引起整個系統的不穩定,而客戶需求偏偏總是在改變,結果是專案以差不多失敗的結果告終。
從(分散式)軟體發展的趨勢來看,C/S->B/S->SOA,模組之間的耦合度是由緊密到鬆散的,鬆散的耦合有利於修改。我們常說的各種設計模式,其中大部分不也是為了降低類之間的耦合度嗎。
這裡我引用一下IBM網站上對SOA的定義:面向服務的體系結構(service-oriented architecture)是一個元件模型,它將應用程式的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯絡起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平臺、作業系統和程式語言。這使得構建在各種這樣的系統中的服務可以以一種統一和通用的方式進行互動。(全文)
說得通俗一點就是,系統中分為三種角色:服務提供者、服務使用者和註冊中心,提供者釋出服務到註冊中心,使用者通過註冊中心發現所需服務,然後與該服務的提供者繫結,並呼叫服務。
那麼Web服務和SOA是什麼關係呢,可以這樣說,Web服務是SOA的一種實現,有點像Tomcat和JSP/Servlet規範的關係。SOA是一個比較虛的概念,例如它只提出定義一些介面和協議,那麼這些東西具體應該怎樣定義呢,Web服務就將它們具體化了:Web服務使用的協議都是基於XML的;SOA只說應該有三種角色,而Web服務裡這三種角色都有具體的實現方式。看到這裡你應該會問,那麼SOA還有哪些實現呢?CORBA、DCOM和J2EE都可以算是,但我認為它們不能算很純粹,至少它們並不都具有中立的協議。
現在該用一個具體的例子來說明一下Web服務了,假設我們的系統中需要一項功能是查詢當地的天氣情況(世界時間、貨幣匯率等等,都一樣),顯然我們不會自己做一個從氣象部門資料庫中查詢資料的程式,這需要很多手續也沒有必要,更要命的是,這樣做會增加我們與氣象部門的耦合度。試想某一天氣象部門的資料庫結構改變了,我們將不得不修改自己的程式碼,如果他們忘記通知我們這一改變,想象一下客戶會看到什麼?
為了利用Web服務,我們從某一註冊中心查詢和天氣有關的服務,在結果中也許我們會選擇收費較低,或者收費稍高但更穩定和準確的服務。從註冊中心我們能夠得到所選服務的完整描述,其中包含了各種資料型別和呼叫方式,利用這些資訊,可以使用工具生成這些必要的類,以及客戶端Stub,利用這個Stub就可以呼叫遠端的Web服務了。在我們的例子中,呼叫後服務提供者會返回一個含有結果的訊息,在我們的系統中可以從這個訊息裡得到所要的結果,並顯示給客戶。這樣就形成一個完整的Web服務呼叫。這種呼叫方式被稱為靜態呼叫,因為在Stub裡服務提供者的地址(被稱為呼叫端點endpoint)是寫定的,還有另外一種方式被稱為動態呼叫,以後會講到。
那麼Web服務和以前的RPC(遠端過程呼叫)有什麼分別呢?RPC通常要求呼叫者和被呼叫者是同構的,即使用同樣的語言編寫,而Web服務沒有這個要求(訣竅在於使用了XML封裝訊息),這就大大增加了靈活程度;另外,Web服務的呼叫除這種類似RPC的方式外,還可以是基於訊息的方式,服務使用者可以只接收訊息,或是隻傳送訊息,在一些應用中這種方式十分有用。
好了,把這次講的內容總結一下就是:Web服務是SOA的實現,Web服務不是RPC。
下次將稍微詳細點說說Web服務的結構和協議棧,第三篇文章開始會陸續講些與Web服務關係非常緊密的幾個概念。本人水平有限,如果存在錯誤歡迎指出,轉載請註明出處。最後推薦一個學習Web服務的好地方,IBM開發者SOA與Web服務專區,適合各種水平的讀者閱讀,同時有很多最新應用,絕對值得一去。在http://www.xmethods.net/有很多Web服務的演示,有興趣也可以看看。
本文轉自部落格園八進位制的部落格,原文連結:[WS]Web服務系列(一) 簡介,如需轉載請自行聯絡原博主。
相關文章
- Salesforce 系列(一):雲服務和 Salesforce 理念簡介Salesforce
- Nginx服務系列——靜態資源web服務NginxWeb
- Spring Cloud系列(一):微服務架構簡介SpringCloud微服務架構
- Unity學習系列一簡介Unity
- web workers簡介(一)基礎使用Web
- [Rust]使用Rocket框架搭建簡單Web服務Rust框架Web
- 移動web——移動web開發簡介,WebStorgae簡介Web
- RxJS 系列之一 – Functional Programming 簡介JSFunction
- Azure Storage 系列(一)入門簡介
- unittest系列(一)unittest簡介和示例
- MDN之學習 Web 開發(一)【Web API簡介】WebAPI
- Python3一行程式碼搭建極簡web服務Python行程Web
- skynet.newservice簡介:服務的啟動
- 【譯】Web Components簡介Web
- Shiro系列教程之一Shiro簡介
- Spring Security系列教程之一簡介Spring
- Linux web服務LinuxWeb
- 服務註冊與發現【Eureka】- Eureka簡介
- LAMP平臺服務簡介、部署及應用LAMP
- 用 GIN 構建一個 WEB 服務Web
- HanLP封裝為web services服務的過程介紹HanLP封裝Web
- Spring系列.Bean簡介SpringBean
- Terraform 系列-Terraform 簡介ORM
- 使用RSocket進行服務通訊的反應性服務簡介 - Rafał Kowalski
- JSON Web Token(JWT) 簡介JSONWebJWT
- 簡要介紹Linux網路服務的種類Linux
- spring cloud alibaba系列(一) 服務註冊SpringCloud
- 搭建 Restful Web 服務RESTWeb
- Jave Web阿里雲簡訊服務傳送驗證碼Web阿里
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- canvas系列教程之簡介Canvas
- Go For Web:一篇文章帶你用 Go 搭建一個最簡單的 Web 服務、瞭解 Golang 執行 web 的原理WebGolang
- Redis系列(一):Redis簡介及環境安裝Redis
- web workers簡介(三)建立subworkerWeb
- Web API的簡史介紹WebAPI
- HTML5 Web Workers簡介HTMLWeb
- Nginx服務系列——代理Nginx
- Web網站服務(二)Web網站
- python如何建立web服務PythonWeb