最近在工作中遇到這樣的一個項目(暫且定為項目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标簽詳細介紹,可以點選連結 https://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的其他的項目,我會再進行補充,更新此文章。當然如果大家有什麼好的建議,歡迎在下面留言,大家共同探讨,共同進步。
分享個人工作和學習過程中的一些心得