首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

REST Service 的最佳实践,第 3 部分 把 SOAP 服务转化为 REST 服务-1

REST Service 的最佳实践,第 3 部分 把 SOAP 服务转化为 REST 服务-1

基于 SOAP 的 Web 服务和 REST 服务的描述在本系列的前两篇文章中,作者系统的介绍了 REST 服务的核心概念以及 REST 和 SOAP 服务的实现机理。接下来,我们以获取股价的 Web 服务为例,来看看基于 SOAP 的 Web 服务和 REST 服务的描述、发送请求的方式和响应的格式的不同。
清单 1 所示是一个获取股价的基于 SOAP 协议的 Web 服务。如果不熟悉 WSDL 规范的朋友请参考文献,我们这里不再详述。描述文件看起来很复杂,其实就是两个服务端点,在 service 元素里面描述的两个:StockQuoteSoap、StockQuoteHttpGet。StockQuoteSoap 说明这个服务端点接受 SOAP 协议的的请求并在 SOAP body 里面返回服务的结果。StockQuoteHttpGet 是以 SOAP over HTTP 的方式提供服务。另外还有对端口类型、绑定、消息、输入参数、输出参数的描述,有点像对一个函数签名的详细描述。
清单 1.WSDL 描述的获取股价的 Web 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.webserviceX.NET/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://www.webserviceX.NET/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
   <s:schema elementFormDefault="qualified"
   targetNamespace="http://www.webserviceX.NET/">
     <s:element name="GetQuote">
       <s:complexType>
         <s:sequence>
           <s:element minOccurs="0" maxOccurs="1"
           name="symbol" type="s:string" />
         </s:sequence>
       </s:complexType>
     </s:element>
     <s:element name="GetQuoteResponse">
       <s:complexType>
         <s:sequence>
           <s:element minOccurs="0" maxOccurs="1"
            name="GetQuoteResult" type="s:string" />
         </s:sequence>
       </s:complexType>
     </s:element>
     <s:element name="string" nillable="true" type="s:string" />
   </s:schema>
</wsdl:types>
<wsdl:message name="GetQuoteSoapIn">
   <wsdl:part name="parameters" element="tns:GetQuote" />
</wsdl:message>
<wsdl:message name="GetQuoteSoapOut">
   <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
</wsdl:message>
<wsdl:message name="GetQuoteHttpGetIn">
   <wsdl:part name="symbol" type="s:string" />
</wsdl:message>
<wsdl:message name="GetQuoteHttpGetOut">
   <wsdl:part name="Body" element="tns:string" />
</wsdl:message>
<wsdl:portType name="StockQuoteSoap">
   <wsdlperation name="GetQuote">
     <documentation xmlns
     ="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol
     </documentation>
     <wsdl:input message="tns:GetQuoteSoapIn" />
     <wsdlutput message="tns:GetQuoteSoapOut" />
   </wsdlperation>
</wsdl:portType>
<wsdl:portType name="StockQuoteHttpGet">
   <wsdlperation name="GetQuote">
     <documentation xmlns
     ="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol
     </documentation>
     <wsdl:input message="tns:GetQuoteHttpGetIn" />
     <wsdlutput message="tns:GetQuoteHttpGetOut" />
   </wsdlperation>
</wsdl:portType>
<wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
    style="document" />
   <wsdlperation name="GetQuote">
     <soapperation soapAction="http://www.webserviceX.NET/GetQuote"
     style="document" />
     <wsdl:input>
       <soap:body use="literal" />
     </wsdl:input>
     <wsdlutput>
       <soap:body use="literal" />
     </wsdlutput>
   </wsdl:operation>
</wsdl:binding>
<wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
   <http:binding verb="GET" />
   <wsdl:operation name="GetQuote">
     <http:operation location="/GetQuote" />
     <wsdl:input>
       <http:urlEncoded />
     </wsdl:input>
     <wsdl:output>
       <mime:mimeXml part="Body" />
     </wsdl:output>
   </wsdl:operation>
</wsdl:binding>
<wsdl:service name="StockQuote">
   <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
     <soap:address location="http://www.webservicex.net/stockquote.asmx" />
   </wsdl:port>
   <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
     <http:address location="http://www.webservicex.net/stockquote.asmx" />
   </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

返回列表