<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    放翁(文初)的一畝三分地

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評(píng)論 :: 0 Trackbacks
           SOA的基礎(chǔ)技術(shù)實(shí)現(xiàn)方式中WebService占據(jù)了很重要的地位,通常我們提到WebService第一想法就是SOAP消息在各種傳輸協(xié)議上交互。近幾年REST的思想伴隨著SOA逐漸被大家接受,同時(shí)各大網(wǎng)站不斷開(kāi)放API提供給開(kāi)發(fā)者,也激起了REST風(fēng)格WebService的熱潮。

           在收到新需求Email之前,我對(duì)REST的理解僅僅是通過(guò)半懂不懂的看了FieldingREST博士論文,說(shuō)實(shí)話當(dāng)時(shí)也就是希望了解這么一個(gè)新概念,對(duì)于其內(nèi)部的思想只是很膚淺的了解了一下。

           ASF的最新需求就是可能需要實(shí)現(xiàn)REST風(fēng)格的WebService集成,因此不得不好好的去看看REST的真正思想含義以及當(dāng)前各大網(wǎng)站的設(shè)計(jì)方式。后面所要表述的也是我這個(gè)初學(xué)者的一些看法和觀點(diǎn),拋磚引玉,希望在我將REST融入到ASF之前能夠獲得更多的反饋和意見(jiàn)。

    SOAP

           什么是SOAP,我想不用多說(shuō),google一把滿眼都是。其實(shí)SOAP最早是針對(duì)RPC的一種解決方案,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,很輕量,同時(shí)作為應(yīng)用協(xié)議可以基于多種傳輸協(xié)議來(lái)傳遞消息(Http,SMTP等)。但是隨著SOAP作為WebService的廣泛應(yīng)用,不斷地增加附加的內(nèi)容,使得現(xiàn)在開(kāi)發(fā)人員覺(jué)得SOAP很重,使用門(mén)檻很高。在SOAP后續(xù)的發(fā)展過(guò)程中,WS-*一系列協(xié)議的制定,增加了SOAP的成熟度,也給SOAP增加了負(fù)擔(dān)。

    REST

           REST其實(shí)并不是什么協(xié)議也不是什么標(biāo)準(zhǔn),而是將Http協(xié)議的設(shè)計(jì)初衷作了詮釋?zhuān)?/span>Http協(xié)議被廣泛利用的今天,越來(lái)越多的是將其作為傳輸協(xié)議,而非原先設(shè)計(jì)者所考慮的應(yīng)用協(xié)議。SOAP類(lèi)型的WebService就是最好的例子,SOAP消息完全就是將Http協(xié)議作為消息承載,以至于對(duì)于Http協(xié)議中的各種參數(shù)(例如編碼,錯(cuò)誤碼等)都置之不顧。其實(shí),最輕量級(jí)的應(yīng)用協(xié)議就是Http協(xié)議。Http協(xié)議所抽象的get,post,put,delete就好比數(shù)據(jù)庫(kù)中最基本的增刪改查,而互聯(lián)網(wǎng)上的各種資源就好比數(shù)據(jù)庫(kù)中的記錄(可能這么比喻不是很好),對(duì)于各種資源的操作最后總是能抽象成為這四種基本操作,在定義了定位資源的規(guī)則以后,對(duì)于資源的操作通過(guò)標(biāo)準(zhǔn)的Http協(xié)議就可以實(shí)現(xiàn),開(kāi)發(fā)者也會(huì)受益于這種輕量級(jí)的協(xié)議。

           自己理解的將REST的思想歸結(jié)以下有如下幾個(gè)關(guān)鍵點(diǎn):

    1.面向資源的接口設(shè)計(jì)

    所有的接口設(shè)計(jì)都是針對(duì)資源來(lái)設(shè)計(jì)的,也就很類(lèi)似于我們的面向?qū)ο蠛兔嫦蜻^(guò)程的設(shè)計(jì)區(qū)別,只不過(guò)現(xiàn)在將網(wǎng)絡(luò)上的操作實(shí)體都作為資源來(lái)看待,同時(shí)URI的設(shè)計(jì)也是體現(xiàn)了對(duì)于資源的定位設(shè)計(jì)。后面會(huì)提到有一些網(wǎng)站的API設(shè)計(jì)說(shuō)是REST設(shè)計(jì),其實(shí)是RPC-REST的混合體,并非是REST的思想。

           2.抽象操作為基礎(chǔ)的CRUD

           這點(diǎn)很簡(jiǎn)單,Http中的get,put,post,delete分別對(duì)應(yīng)了read,update,create,delete四種操作,如果僅僅是作為對(duì)于資源的操作,抽象成為這四種已經(jīng)足夠了,但是對(duì)于現(xiàn)在的一些復(fù)雜的業(yè)務(wù)服務(wù)接口設(shè)計(jì),可能這樣的抽象未必能夠滿足。其實(shí)這也在后面的幾個(gè)網(wǎng)站的API設(shè)計(jì)中暴露了這樣的問(wèn)題,如果要完全按照REST的思想來(lái)設(shè)計(jì),那么適用的環(huán)境將會(huì)有限制,而非放之四海皆準(zhǔn)的。      

           3Http是應(yīng)用協(xié)議而非傳輸協(xié)議

           這點(diǎn)在后面各大網(wǎng)站的API分析中有很明顯的體現(xiàn),其實(shí)有些網(wǎng)站已經(jīng)走到了SOAP的老路上,說(shuō)是REST的理念設(shè)計(jì),其實(shí)是作了一套私有的SOAP協(xié)議,因此稱(chēng)之為REST風(fēng)格的自定義SOAP協(xié)議。

    4.無(wú)狀態(tài),自包含

    這點(diǎn)其實(shí)不僅僅是對(duì)于REST來(lái)說(shuō)的,作為接口設(shè)計(jì)都需要能夠做到這點(diǎn),也是作為可擴(kuò)展和高效性的最基本的保證,就算是使用SOAPWebService也是一樣。

    REST vs SOAP

    成熟度:

    SOAP雖然發(fā)展到現(xiàn)在已經(jīng)脫離了初衷,但是對(duì)于異構(gòu)環(huán)境服務(wù)發(fā)布和調(diào)用,以及廠商的支持都已經(jīng)達(dá)到了較為成熟的情況。不同平臺(tái),開(kāi)發(fā)語(yǔ)言之間通過(guò)SOAP來(lái)交互的web service都能夠較好的互通(在部分復(fù)雜和特殊的參數(shù)和返回對(duì)象解析上,協(xié)議沒(méi)有作很細(xì)致的規(guī)定,導(dǎo)致還是需要作部分修正)

    REST國(guó)外很多大網(wǎng)站都發(fā)布了自己的開(kāi)發(fā)API,很多都提供了SOAPREST兩種Web Service,根據(jù)調(diào)查部分網(wǎng)站的REST風(fēng)格的使用情況要高于SOAP。但是由于REST只是一種基于Http協(xié)議實(shí)現(xiàn)資源操作的思想,因此各個(gè)網(wǎng)站的REST實(shí)現(xiàn)都自有一套,在后面會(huì)講訴各個(gè)大網(wǎng)站的REST API的風(fēng)格。也正是因?yàn)檫@種各自實(shí)現(xiàn)的情況,在性能和可用性上會(huì)大大高于SOAP發(fā)布的web service,但統(tǒng)一通用方面遠(yuǎn)遠(yuǎn)不及SOAP。由于這些大網(wǎng)站的SP往往專(zhuān)注于此網(wǎng)站的API開(kāi)發(fā),因此通用性要求不高。

    ASF上考慮發(fā)布REST風(fēng)格的Web Service,可以參考幾大網(wǎng)站的設(shè)計(jì)(兄弟公司的方案就是參考了類(lèi)似于flickr的設(shè)計(jì)模式),但是由于沒(méi)有類(lèi)似于SOAP的權(quán)威性協(xié)議作為規(guī)范,REST實(shí)現(xiàn)的各種協(xié)議僅僅只能算是私有協(xié)議,當(dāng)然需要遵循REST的思想,但是這樣細(xì)節(jié)方面有太多沒(méi)有約束的地方。REST日后的發(fā)展所走向規(guī)范也會(huì)直接影響到這部分的設(shè)計(jì)是否能夠有很好的生命力。

    總的來(lái)說(shuō)SOAP在成熟度上優(yōu)于REST

    效率和易用性:

           SOAP協(xié)議對(duì)于消息體和消息頭都有定義,同時(shí)消息頭的可擴(kuò)展性為各種互聯(lián)網(wǎng)的標(biāo)準(zhǔn)提供了擴(kuò)展的基礎(chǔ),WS-*系列就是較為成功的規(guī)范。但是也由于SOAP由于各種需求不斷擴(kuò)充其本身協(xié)議的內(nèi)容,導(dǎo)致在SOAP處理方面的性能有所下降。同時(shí)在易用性方面以及學(xué)習(xí)成本上也有所增加。

           REST被人們的重視,其實(shí)很大一方面也是因?yàn)槠涓咝б约昂?jiǎn)潔易用的特性。這種高效一方面源于其面向資源接口設(shè)計(jì)以及操作抽象簡(jiǎn)化了開(kāi)發(fā)者的不良設(shè)計(jì),同時(shí)也最大限度的利用了Http最初的應(yīng)用協(xié)議設(shè)計(jì)理念。同時(shí),在我看來(lái)REST還有一個(gè)很吸引開(kāi)發(fā)者的就是能夠很好的融合當(dāng)前Web2.0的很多前端技術(shù)來(lái)提高開(kāi)發(fā)效率。例如很多大型網(wǎng)站開(kāi)放的REST風(fēng)格的API都會(huì)有多種返回形式,除了傳統(tǒng)的xml作為數(shù)據(jù)承載,還有(JSON,RSS,ATOM)等形式,這對(duì)很多網(wǎng)站前端開(kāi)發(fā)人員來(lái)說(shuō)就能夠很好的mashup各種資源信息。

           因此在效率和易用性上來(lái)說(shuō),REST更勝一籌。

    安全性:

           這點(diǎn)其實(shí)可以放入到成熟度中,不過(guò)在當(dāng)前的互聯(lián)網(wǎng)應(yīng)用和平臺(tái)開(kāi)發(fā)設(shè)計(jì)過(guò)程中,安全已經(jīng)被提到了很高的高度,特別是作為外部接口給第三方調(diào)用,安全性可能會(huì)高過(guò)業(yè)務(wù)邏輯本身。

           SOAP在安全方面是通過(guò)使用XML-SecurityXML-Signature兩個(gè)規(guī)范組成了WS-Security來(lái)實(shí)現(xiàn)安全控制的,當(dāng)前已經(jīng)得到了各個(gè)廠商的支持,.net php java 都已經(jīng)對(duì)其有了很好的支持(雖然在一些細(xì)節(jié)上還是有不兼容的問(wèn)題,但是互通基本上是可以的)。

           REST沒(méi)有任何規(guī)范對(duì)于安全方面作說(shuō)明,同時(shí)現(xiàn)在開(kāi)放REST風(fēng)格API的網(wǎng)站主要分成兩種,一種是自定義了安全信息封裝在消息中(其實(shí)這和SOAP沒(méi)有什么區(qū)別),另外一種就是靠硬件SSL來(lái)保障,但是這只能夠保證點(diǎn)到點(diǎn)的安全,如果是需要多點(diǎn)傳輸?shù)脑?/span>SSL就無(wú)能為力了。安全這塊其實(shí)也是一個(gè)很大的問(wèn)題,今年在BEA峰會(huì)上看到有演示采用SAML2實(shí)現(xiàn)的網(wǎng)站間SSO,其實(shí)是直接采用了XML-SecurityXML-Signature,效率看起來(lái)也不是很高。未來(lái)REST規(guī)范化和通用化過(guò)程中的安全是否也會(huì)采用這兩種規(guī)范,是未知的,但是加入的越多,REST失去它高效性的優(yōu)勢(shì)越多。

    應(yīng)用設(shè)計(jì)與改造:

           我們的系統(tǒng)要么就是已經(jīng)有了那些需要被發(fā)布出去的服務(wù),要么就是剛剛設(shè)計(jì)好的服務(wù),但是開(kāi)發(fā)人員的傳統(tǒng)設(shè)計(jì)思想讓REST的形式被接受還需要一點(diǎn)時(shí)間。同時(shí)在資源型數(shù)據(jù)服務(wù)接口設(shè)計(jì)上來(lái)說(shuō)按照REST的思想來(lái)設(shè)計(jì)相對(duì)來(lái)說(shuō)要容易一些,而對(duì)于一些復(fù)雜的服務(wù)接口來(lái)說(shuō),可能強(qiáng)要去按照REST的風(fēng)格來(lái)設(shè)計(jì)會(huì)有些牽強(qiáng)。這一點(diǎn)其實(shí)可以看看各大網(wǎng)站的接口就可以知道,很多網(wǎng)站還要傳入function的名稱(chēng)作為參數(shù),這就明顯已經(jīng)違背了REST本身的設(shè)計(jì)思路。

           SOAP本身就是面向RPC來(lái)設(shè)計(jì)的,開(kāi)發(fā)人員十分容易接受,所以不存在什么適應(yīng)的過(guò)程。

    總的來(lái)說(shuō),其實(shí)還是一個(gè)老觀念,適合的才是最好的

           技術(shù)沒(méi)有好壞,只有是不是合適,一種好的技術(shù)和思想被誤用了,那么就會(huì)得到反效果。RESTSOAP各自都有自己的優(yōu)點(diǎn),同時(shí)如果在一些場(chǎng)景下如果去改造REST,其實(shí)就會(huì)走向SOAP(例如安全)。

           REST對(duì)于資源型服務(wù)接口來(lái)說(shuō)很合適,同時(shí)特別適合對(duì)于效率要求很高,但是對(duì)于安全要求不高的場(chǎng)景。而SOAP的成熟性可以給需要提供給多開(kāi)發(fā)語(yǔ)言的,對(duì)于安全性要求較高的接口設(shè)計(jì)帶來(lái)便利。所以我覺(jué)得純粹說(shuō)什么設(shè)計(jì)模式將會(huì)占據(jù)主導(dǎo)地位沒(méi)有什么意義,關(guān)鍵還是看應(yīng)用場(chǎng)景。

           同時(shí)很重要一點(diǎn)就是不要扭曲了REST現(xiàn)在很多網(wǎng)站都跟風(fēng)去開(kāi)發(fā)REST風(fēng)格的接口,其實(shí)都是在學(xué)其形,不知其心,最后弄得不倫不類(lèi),性能上不去,安全又保證不了,徒有一個(gè)看似象摸象樣的皮囊。

    REST設(shè)計(jì)的幾種形式

    參看了幾個(gè)大型網(wǎng)站的REST風(fēng)格的API設(shè)計(jì),這里做一下大致的說(shuō)明:

    FaceBook:

    請(qǐng)求消息:

           URI設(shè)計(jì)上采取了類(lèi)似于REST的風(fēng)格。例如對(duì)于friends的獲取,就定義為friends.get,前面部分作為資源定義,后面是具體的操作,其他的API也是類(lèi)似,資源+操作,因此就算使用httpget方法都可能作了update的操作,其實(shí)已經(jīng)違背了REST的思想,但是說(shuō)到,其實(shí)那么復(fù)雜的業(yè)務(wù)接口設(shè)計(jì)下,要通過(guò)RUCD來(lái)抽象所有的接口基本是不實(shí)際的。在URI定義好以后,還有詳細(xì)的參數(shù)定義,包括類(lèi)型以及是否必選。

    響應(yīng)消息:

           有多種方式,XML,JSONXMLXSD作為參考。有點(diǎn)類(lèi)似于沒(méi)有HeadSOAP,只不過(guò)這里將原來(lái)可以定義在WSDL中的XSD抽取出來(lái)了。

    Flickr:

           請(qǐng)求消息:

           http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value

           這里就可以很明顯看出它所定制的REST請(qǐng)求其實(shí)和RPC沒(méi)有什么太大的區(qū)別。

           消息返回:

    正確處理返回

    <?xml version="1.0" encoding="utf-8" ?>

    <rsp stat="ok">

             [xml-payload-here]

    </rsp>

    錯(cuò)誤處理返回

    <?xml version="1.0" encoding="utf-8" ?>

    <rsp stat="fail">

             <err code="[error-code]" msg="[error-message]" />

    </rsp>

           根據(jù)返回可以看出已經(jīng)違背了REST的思想,還是把Http協(xié)議作為傳輸承載協(xié)議,并沒(méi)有真正意義上使用Http協(xié)議作為資源訪問(wèn)和操作協(xié)議。

           總的來(lái)說(shuō),只是形式上去模仿REST,自己搞了一套私有協(xié)議。

    Ebay

           請(qǐng)求消息:

           采用xml作為承載,類(lèi)似于SOAP,不過(guò)去除SOAP消息的封裝和包頭,同時(shí)在請(qǐng)求中附加了認(rèn)證和警告級(jí)別等附加信息。

           消息返回:

           類(lèi)似于SOAP消息,不過(guò)刪除了SOAP的封裝和包頭,同時(shí)在返回結(jié)構(gòu)中增加了消息處理結(jié)果以及版本等附加信息。

           這個(gè)很類(lèi)似于當(dāng)前Axis2框架的做法,將SOAP精簡(jiǎn),同時(shí)根據(jù)自身需求豐富了安全,事務(wù)等協(xié)議內(nèi)容。

    Yahoo Maps

           請(qǐng)求消息:

           http://local.yahooapis.com/MapsService/V1/geocode?appid=YahooDemo&street=701+First+Ave&city=Sunnyvale&state=CA

           采用REST推薦的方式,URI+Parameters

           返回消息:

    <?xml version="1.0" encoding="UTF-8"?>

    <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns="urn:yahoo:maps"

    xsi:schemaLocation="urn:yahoo:maps http://local.yahooapis.com/MapsService/V1/GeocodeResponse.xsd">

     <Result precision="address">

        <Latitude>37.416384</Latitude>

        <Longitude>-122.024853</Longitude>

        <Address>701 FIRST AVE</Address>

        <City>SUNNYVALE</City>

        <State>CA</State>

        <Zip>94089-1019</Zip>

        <Country>US</Country>

     </Result>

    </ResultSet>

    SOAP的精簡(jiǎn)xml返回,其他信息,例如出錯(cuò)碼等信息由Http協(xié)議頭來(lái)承載。

    YouTube

    請(qǐng)求消息:

    http://www.youtube.com/api2_rest?method=youtube.users.get_profile&dev_id=YOUR_DEV_ID&user=YOUTUBE_USER_NAME

    可以看到對(duì)于資源操作的URI定義也是參數(shù)的一部分。

    返回消息:

    <?xml version="1.0" encoding="utf-8"?>

    <ut_response status="ok">

        <user_profile>

            <first_name>YouTube</first_name>

            <last_name>User</last_name>

            <about_me>YouTube rocks!!</about_me>

            <age>30</age>

            <video_upload_count>7</video_upload_count>

        </user_profile>

    </ut_response>

           自定義的類(lèi)SOAP消息。

    Amazon

           請(qǐng)求消息:

           https://Amazon FPS web service end point/?AWSAccessKeyId=Your AWSAccessKeyId

          &Timestamp=[Current timestamp] &Signature=[Signature calculated from hash of Action and Timestamp]

          &SignatureVersion=[Signature calculated from hash of Action and Timestamp]

          &Version=[Version of the WSDL specified in YYYY-MM-DD format] &Action=[Name of the API]

          &parameter1=[Value of the API parameter1] &parameter2=[Value of the API parameter2]

          &...[API parameters and their values]

           返回消息:

           類(lèi)似于SOAP的自有協(xié)議,消息體中包含了消息狀態(tài)等附加信息。

    總結(jié):

           看了上面那么多網(wǎng)站的設(shè)計(jì),總結(jié)一下主要有這么幾種設(shè)計(jì)方式。

    請(qǐng)求消息設(shè)計(jì):

    1. 基本符合REST標(biāo)準(zhǔn)方式:資源URI定義(資源操作)+參數(shù)。這類(lèi)設(shè)計(jì)如果濫用get去處理其他類(lèi)型的操作,那么和2無(wú)異。

    2. REST風(fēng)格非REST思想:資源URI定義+參數(shù)(包含操作方法名)。其實(shí)就是RPCREST跟風(fēng)。

    3. 類(lèi)似于SOAP消息,自定義協(xié)議,以xml作為承載。(可擴(kuò)展,例如鑒權(quán),訪問(wèn)控制等),不過(guò)那就好比自己定義了一套SOAPSOAP extends。大型的有實(shí)力的網(wǎng)站有的采取此種做法。

    響應(yīng)消息設(shè)計(jì):

    1.       REST標(biāo)準(zhǔn)方式,將Resource State傳輸返回給客戶端,Http消息作為應(yīng)用協(xié)議而非傳輸協(xié)議

    2.       XML作為消息承載體,Http作為消息傳輸協(xié)議,處理狀態(tài)自包含。

    3.       自定義消息格式,類(lèi)似于SOAP,提供可擴(kuò)展部分。

    作為遵循REST的理念來(lái)看我的選擇是響應(yīng)1和請(qǐng)求1的設(shè)計(jì)。

    RESTASF的集成

    ASF要集成REST就現(xiàn)在來(lái)看有兩種比較合適的方法。

    一.就是采用Axis2REST實(shí)現(xiàn),這種方式的好處就是開(kāi)發(fā)周期短,容易集成,但是請(qǐng)求和響應(yīng)的格式無(wú)法改變,資源URI設(shè)計(jì)受限,Axis2REST其實(shí)就是將SOAP消息精簡(jiǎn),請(qǐng)求的時(shí)候刪除了SOAP的頭,響應(yīng)的時(shí)候僅僅返回資源信息,如果提供xsd就可以被各種客戶端所解析。并非真正的REST

    二.就是采用Restlet開(kāi)源框架,將Restlet開(kāi)源框架集成到ASF中,由于Restlet本身就是可內(nèi)嵌的應(yīng)用框架,因此集成不成問(wèn)題,同時(shí)Restlet框架只是API結(jié)構(gòu)框架,因此實(shí)現(xiàn)和定義完全分開(kāi),集成Restlet以后可以自己實(shí)現(xiàn)其中的解析引擎也可以采用默認(rèn)提供的引擎,同時(shí)對(duì)于內(nèi)嵌Jetty等多種開(kāi)源項(xiàng)目的支持,將更多優(yōu)勢(shì)融入到了Rest中。看了一下國(guó)內(nèi)也有很多朋友已經(jīng)關(guān)注Restlet開(kāi)源項(xiàng)目,看了它的架構(gòu)設(shè)計(jì),個(gè)人覺(jué)得還是比較靈活和緊湊的。

    題外話

           在寫(xiě)這篇文章以前寫(xiě)了一篇調(diào)研報(bào)告群發(fā)給各個(gè)架構(gòu)師們參考,期待反饋。下午正好和我們的首席架構(gòu)師聊了一會(huì)兒。其實(shí)我和他的感覺(jué)是一樣的,REST是否真的在我們現(xiàn)有的服務(wù)框架中需要集成,理解了REST的思想再去看應(yīng)用場(chǎng)景,那么可以發(fā)現(xiàn)如果要完全遵循REST的設(shè)計(jì)理念來(lái)設(shè)計(jì)接口的話,那么強(qiáng)要去改變現(xiàn)有已經(jīng)存在的或者還未開(kāi)發(fā)的接口就會(huì)落入為了技術(shù)而技術(shù),為了潮流而跟風(fēng)的近地。當(dāng)然并不否認(rèn)REST的好,其實(shí)我們兄弟公司的一些業(yè)務(wù)場(chǎng)景有部分的接口十分合適這類(lèi)設(shè)計(jì),面向資源,高效,簡(jiǎn)潔,易用都能夠體現(xiàn)出它的價(jià)值。我們將會(huì)和我們的兄弟公司合作,也會(huì)參考他們的設(shè)計(jì)理念,在參考當(dāng)前各個(gè)網(wǎng)站的實(shí)現(xiàn)情況下,部分的采用這類(lèi)形式的發(fā)布,提供給第三方的ISV,無(wú)疑是我現(xiàn)在把REST融入到ASF中最好的理由。

           有了需求去做才不會(huì)陷入為了技術(shù)而技術(shù),畢竟技術(shù)是由商業(yè)價(jià)值驅(qū)動(dòng)的,同樣社會(huì)上充斥著各種技術(shù)的鼓吹,如果稍不留神就會(huì)陷入跟風(fēng)的潮流中。

    歡迎訪問(wèn)我csdn的blog:http://blog.csdn.net/cenwenchu79/,也歡迎和我做交流,msn:cenwenchu_1979@hotmail.com,關(guān)于SOA,REST,SAAS。

    posted on 2008-02-22 08:45 岑文初 閱讀(4290) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: Style of WebService: REST vs. SOAP[未登錄](méi) 2008-06-10 16:56 清風(fēng)
    拜讀!
    總算搞明白R(shí)EST Web服務(wù)與SOAP Web服務(wù)的差異了。
    很同意“適合才是最好的”。
    不過(guò),很關(guān)注REST未來(lái)的發(fā)展和應(yīng)用。
      回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲福利视频导航| 亚洲国产aⅴ成人精品无吗| 亚洲日本va一区二区三区| 午夜免费1000部| 亚洲男人都懂得羞羞网站| 男人都懂www深夜免费网站| 亚洲综合图色40p| 中文精品人人永久免费| 亚洲av日韩综合一区在线观看| a级毛片视频免费观看| 亚洲精品少妇30p| 国产免费AV片在线观看| 久久精品国产亚洲av高清漫画| 在线a免费观看最新网站| 国产精品亚洲自在线播放页码 | 国产大陆亚洲精品国产| vvvv99日韩精品亚洲| jizz免费在线影视观看网站| 在线观看亚洲精品国产| 99视频免费播放| 亚洲 欧洲 自拍 另类 校园| 免费观看国产小粉嫩喷水| 国产99久久久久久免费看| 99精品免费视品| 国产精品亚洲精品观看不卡| 中文字幕亚洲综合久久综合| 久久久亚洲裙底偷窥综合| 国产av天堂亚洲国产av天堂| 国产高清不卡免费在线| 亚洲AV无码男人的天堂| 国产亚洲欧洲Aⅴ综合一区 | 处破痛哭A√18成年片免费| 国产亚洲精品免费| 亚洲午夜国产精品无码老牛影视| 在线成人爽a毛片免费软件| 亚洲国产欧美日韩精品一区二区三区| 中文字幕久久亚洲一区| 一个人免费观看视频www| 一区二区视频在线免费观看| 亚洲蜜芽在线精品一区| 又粗又黄又猛又爽大片免费 |