WebService的两种方式SOAP和REST比较
從目前的兩種技術發展來看,兩種方法都是webservice( RPC ) 的實現,調用一個接口,然后取得一些參數,進行跨系統的通信。
從標準上看,REST是一種思想,在http(s)上套了一些操作守則;而SOAP是帶有強規范 WS-(X) 的標準。
所以,SOAP肯定會有相應的軟件組件來構建、驗證監測webservice,而REST的實現就五花八門了,其實現在很多大公司的OPEN API ,很多都像是在SOAP的基礎上改造的,不大符合REST的思想。
?
Flickr:?
?????? 請求消息:???????
http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value ? ? ??
這里就可以很明顯看出它所定制的REST請求其實和RPC沒有什么太大的區別。?
???????
?????? 消息返回:?
正確處理返回?
<?xml version="1.0" encoding="utf-8" ?>?
<rsp stat="ok">?
???????? [xml-payload-here]?
</rsp>?
錯誤處理返回?
<?xml version="1.0" encoding="utf-8" ?>?
<rsp stat="fail">?
???????? <err code="[error-code]" msg="[error-message]" />?
</rsp>?
?????? 根據返回可以看出已經違背了REST的思想,還是把Http協議作為傳輸承載協議,并沒有真正意義上使用Http協議作為資源訪問和操作協議。?
?????? 總的來說,只是形式上去模仿REST,自己搞了一套私有協議。?
Yahoo Maps:?
?????? 請求消息:?
???????? ? ? ?采用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的精簡xml返回,其他信息,例如出錯碼等信息由Http協議頭來承載。?
YouTube:?
請求消息:?
可以看到對于資源操作的URI定義也是參數的一部分。?
返回消息:?
<?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>?
?????? 自定義的類SOAP消息。?
Amazon:?
?????? 請求消息:?
?????? 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]?
????? ¶meter1=[Value of the API parameter1] ¶meter2=[Value of the API parameter2]?
????? &...[API parameters and their values]?
?????? 返回消息:?
?????? 類似于SOAP的自有協議,消息體中包含了消息狀態等附加信息。?
總結:?
1. 基本符合REST標準方式:資源URI定義(資源.操作)+參數。這類設計如果濫用get去處理其他類型的操作,那么和2無異。?
2. REST風格非REST思想:資源URI定義+參數(包含操作方法名)。其實就是RPC的REST跟風。?
3. 類似于SOAP消息,自定義協議,以xml作為承載。(可擴展,例如鑒權,訪問控制等),不過那就好比自己定義了一套SOAP和SOAP extends。大型的有實力的網站有的采取此種做法。?
?
總結
以上是生活随笔為你收集整理的WebService的两种方式SOAP和REST比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一步步
- 下一篇: android手势滑动——左右滑动效果实