Web篇--java編寫接口爲外部提供服務技術選擇

 

在java中,開發數據接口爲外部提供服務是很正常的事情,可是在選擇技術上犯了難。

我瞭解的編寫接口的方式有:

  1. socket編程
  2. servlet
  3. webservice
  4. http+json

對於上面的四種方式,基本上都能實現我目前的項目需求,可是我就是想知道用哪一個最合適,因此根據查閱資料以及自己的理解記錄下自己的看法。

一.Socket編程

    對於大多數web開發者來說,socket應該是比較陌生的(雖然作爲java基礎),java對於網絡編程是非常支持的一門語言,許多人說socket其實就是作爲java針對網絡編程的利劍。其所屬網絡七層協議的傳輸層,主要有TCP/UDP協議。其實我對於網絡這個什麼什麼協議是不太懂的,自己理解“協議”就是一種規範,就像規定我這個傳輸就得使用xml文件,頭部第一字母就是什麼樣的這種。

       至於TCP建立連接進行三次握手四次揮手的這種東西這裏就不重複講解,提示下了解一下TCP中的滑動窗口比較有用。

       我知道Socket編程是比較底層,他通過寫入流和輸出流來獲取傳輸數據,傳輸數據爲字節級,傳輸數據可自定義。我在開發過程中,最明顯的感覺就是越底層的東西就越需要我們的水平高一些。例如像在開發webservice時,只需要幾個註解服務就發出去了。而Socket編程我們首先需要指定服務的地址以及端口號,然後服務端監聽指定端口,在接收請求後我們還需要考慮請求的併發問題以及何時關閉連接和返回數據問題。客戶端同樣有這些端口地址問題,因此開發過程中還是比較複雜。所謂傳輸層,定義了底層數據傳輸的要求和約定,而剩下的那三種方式則是基於HTTP協議,HTTP協議是簡單的文本傳輸協議,在這一點上我們就知道複雜程度肯定降低。

最後總結下Socket編程的有點和適用場景:

  1. 傳輸數據爲字節級,傳輸數據可自定義,數據量小。相應的移動端開發,手機費用低
  2. 傳輸數據時間短,性能高
  3. 適合C/S之間信息實時交互
  4. 可以加密,數據安全性高
  5. Socket適用場景:網絡遊戲,銀行交互,支付。
  6. 注意Socket是跨語言的

二.HTTP協議

下面這三種方式都是採用HTTP方式,而HTTP協議是基於TCP協議的。而HTTP是在應用層的,所謂應用層就是爲我們做的一些事情提供方便。例如我們使用http協議請求,我們通過互聯網請求服務器部署的項目,只需要地址就能拿到我們想要的數據或者html頁面。而HTTP協議中定義的Get/Put/Post/Delete都是爲了方便我們這種請求而添加在協議中的內容,在TCP中是沒有這些的,但是最終的傳世都是離不開傳輸層TCP協議的最底層的部分,就像GET請求,也許http協議將這樣的請求規定將地址和數據寫在一起。說到這裏可能有些明白了,其實頂層協議許多都是底層協議的優化,添加了我們日常的需求或者大量應用的東西。

這個時候我們知道了HTTP的相關資料,它封裝了一些請求方法以及返回數據類型格式。同時也規範了請求頭等信息,下面針對該類特徵進行下面三種方式講解。

三.servlet

servlet首先是java獨有的技術,其次使用servlet必須使用web容器。就像運行java需要JVM一樣,使用Servlet需要java中間件,例如tomcat/weblogic/jboss等。

Servlet是Java對於Web開發而產生的一項技術,可以說Servlet技術是Java專有的,它是服務器端的技術,客戶端通常是瀏覽器,Servlet提供了請求/響應模式,是JAVA的一種規範,只能使用於Java上,用來替代早期使用的難懂的CGI,是一種無狀態的請求響應,客戶端訪問一個服務器的url,只需要發送簡單的httprequest即可。規定了四個範圍:pageContext、request、session、application。一定依賴於各種Servlet容器,但Servlet只能接受一個簡單的http請求。

Servlet使用Http協議傳輸數據,如果你用Servlet返回XML,那個XML的描述框架就是你定的,必須告知使用者具體的說明,沒有統一標準。我們常常使用servlet在前端後端在一起的項目裏,前端請求,後端可以跳轉頁面,返回各種格式字符串或者頁面等。典型就是springmvc這種封裝了servlet的框架。

總的來說:Servlet定義的是一套服務於Java Web開發接口,目的是實現Java Web的動態訪問。並且因爲依賴java語言,所以不具備跨語言特性。但是足以滿足java應用的數據接口調用。

四.webservice

這個比較重量了,他是使用基於http協議的soap協議進行傳輸的,可能有人要說了,怎麼又來新協議了,我也不想啊,因爲新協議可能就意味着定義了新功能,所以又要遵循了。那麼soap協議主要約定什麼了呢?首先就是webservice傳輸數據使用xml進行數據傳輸,你前面那個使用字符串啊、字節啊等等這些在這都不行了,只能xml傳輸,而且返回也是xml,至於這個xml中寫了什麼,沒錯就是服務端發佈的接口信息啊,參數信息啊,你請求的信息啊,請求的數據複雜不復雜啊這些東西。而且這個xml文件有個英文名:WSDL:webservice 描述語言。他是跨語言的,就是說各種語言都可以使用客戶請求這個服務接口,畢竟你什麼語言都用xml吧,

Webservice使用固定的XML格式封裝成soap消息,可以使用Http作爲底層數據傳輸,但並不侷限於Http協議,方法返回消息是有標準的。 Web Service的優點在於可以傳遞對象(其實是結構化的數據),從而對異構系統來說更有優勢。

現在大多數系統可能編寫接口都是用這個技術了,隨着技術的發展現在也使用restful風格的webservice了,可以通過註解就實現許多繁瑣的編寫了,因此該方式適合穩定.跨語言的接口服務。缺點也很明顯,你想想服務端接口信息啥的都放xml裏面了,數據夠大了吧,然後還有雙方都要解析,時間更多了吧,對於不是即時通訊,此種方法還是推薦。

因爲WebService要經過兩次序列化,所以導致其傳輸速度慢,適用於沒有性能要求且數據傳輸量小的場景,推薦在公開接口上使用WebService。

五.http+json

此種方式和servlet方式比較相似,都是使用http進行請求,然後返回指定的json格式字符串,該種方式貌似不支持跨域,只適合內網之間的數據調用,因此該種接口侷限性很大。

總結:

socket使用的話你的編程水平要牛逼,而且這玩意傳輸快,傳輸量大,廢話不多而且跨語言

servlet不跨語言,只是java使用,傳輸數據格式多樣,適合本地前端後端交互(項目是不分離的)

webservice:跨語言,適用於對外部發布服務,對性能要求不高的項目適合。可以傳輸複雜數據(對象等),不易讀,需要客戶端解析xml

http+json:簡單明瞭,格式易讀,同樣有不跨域無法跨語言的特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章