帶你揭開WebSerivce的面紗

  • 2021 年 12 月 10 日
  • 筆記

最近在工作中遇到這樣的一個項目(暫且定為項目A),項目A本身是用PHP開發的,但是其數據是來自於另一個使用java開發的項目(暫且定為項目B),項目A不能操作項目B的資料庫,它有其自己的一套資料庫,只是有些地方需要用到項目B中的內容。所以在這裡就需要一種通訊方式,可以使B中的數據可以傳到A中。很當然的就選擇了Webservice,我使用PHP在項目A中搭建了Webservice服務,向B提供了我需要實現的介面,只要B調用相應的介面,按照介面要求的數據格式將數據傳輸到A中,這就大功告成了。

那Webservice究竟是個什麼東西呢,剛開始使用的時候我在網上也查了很多的資料,下面就我自己對Webservice的理解向大家分享一下。

Webservice可以看做不同設備之間通訊的一種標準,和具體的某種語言沒有關係,如果非要說有關係的話,那就是每種語言都按照這個webservice標準來開發相應的函數以實現此標準。就向我上面說的項目B向項目A傳輸數據,需要按照這個Webservice標準來傳輸才可以成功。

當然對於上述案例如果說是項目A需要在本地存一份項目B中的部分數據,但是對於業務邏輯是和B沒有關係的,那麼就需要A來提供webservice服務,由B來調用介面發送數據,接下來就沒有B什麼事兒了,僅當B中相應數據有更新的時候,再次調用A提供的webservice介面更新A中的數據就可以了。但是如果業務是這樣的,項目A不需要存B中的數據,它只是用B中的部分數據做展示,那我們就需要在B中搭建Webservice服務,提供相應的介面,由A調用B提供的Webservice介面以此取出B中的數據,那這樣當B中數據有更新的時候,A調用的數據也是最新的。

上面說了這麼多,無非就是一句話

Webservice是被定義用來使不同應用之間通過網路傳輸數據的一種標準,此標準和具體的語言無關,至於哪種語言提供介面,哪種語言來調用要看項目的需要。

既然是一種標準,那就需要有相應的技術來支援這個標準的實現。下面就出現了Webservice中的四種技術——XML、WSDL、SOAP、UDDI。在一套完整的Webservice服務中,這四種技術各有其自己的實現價值,下面分別來介紹一下各自的用途

1.XML 

XML 是用來標記數據的(對於XML標籤詳細介紹,可以點擊鏈接 //www.jiyik.com/w/xml/xml-intro),因為上面我們說過,webservice不依賴於某一門特定的程式語言。而不同的系統可能是使用不同的程式語言來開發,(如上:項目A使用PHP開發,項目B使用Java開發)所以說就需要一種方式來交換數據,這種方式同樣不依賴於某種程式語言,大多數軟體都集成了XML標籤,因此使用XML格式的數據來實現數據的交換。

2.SOAP 

SOAP是一種特殊的協議,用來傳輸數據。當調用方一旦發現提供Webservice介面的地址,它將會使用SOAP協議和提供Webservice的系統進行連接。

3.WSDL

WSDL 用來描述客戶端可以調用的介面的規則,所有這些規則定義在WSDL文件中,當有客戶端發起調用的時候,Webservice提供方會參考這個WSDL規則來驗證數據請求的合法性。

4.UDDI

UDDI列出了那些服務是可以被訪問的。當一個系統需要數據的時候,首先它會先查找UDDI,找出從除了自己之外的那些可以獲取到自己需要的數據的服務,然後進行鏈接獲取數據。這一點有點類似於DNS的功能。

以上分別介紹了這四項技術在整個Webservice架構中的角色,下面我們將這四項連起來,看一下整個Webservice的架構是如何實現的。

首先,Webservice的提供方會在WSDL文件中新建一些介面的規則,然後將WSDL文件發送給UDDI進行報道註冊。服務請求方(也就是調用Webservice介面的一方)會先連接UDDI來查詢哪一個提供方有自己需要的數據,找到以後然後連接這個服務提供方,此時和提供方使用SOAP協議進行交互。當服務方收到請求以後,首先會對這個請求進行驗證,驗證的依據就是先前新建的WSDL規則。驗證通過以後服務方會向請求方發送XML格式的數據,此時同樣是使用SOAP協議進行交互。當請求方收到XML數據以後,請求方會使用XSD來驗證此XML數據的合法性。驗證通過以後再進行數據的處理。

整個過程可以用下圖反映

 

 

以上就是整個Webservice的實現過程。看此過程總感覺和WEB應用的流程有些類似,首先需要將域名和ip地址綁定,在DNS中報道註冊。當用戶訪問的時候,首先會帶著域名去訪問DNS伺服器,DNS會解析域名到對應的ip地址,並將此資訊返回給用戶,用戶得到ip以後,會根據ip去訪問對應的網站服務,此時用戶和WEB服務之間使用的是HTTP協議。

以上就是我對Webservice的理解,至於Webservice在什麼情況下使用合適,我也不好說,我只能說這個得根據實際情況來定。我做的項目有限,雖說在網上看到過Webservice的使用場景,但是有些情況我並沒有接觸過,使用Webservice的益處和弊端也不好下結論。如果以後有幸接觸到使用Webservice的其他的項目,我會再進行補充,更新此文章。當然如果大家有什麼好的建議,歡迎在下面留言,大家共同探討,共同進步。