Web Service 消息格式

简介:

原文链接译文链接,译者:朱张锁,校对:郭蕾

当客户端和Web Service服务器进行通信时,他们交换消息。客户端发送请求消息到Web Service服务器。 Web Service服务器响应并返回消息。这就像普通的HTTP,浏览器发送一个HTTP请求到Web服务器, Web服务器会提供一个HTTP响应。

最初唯一可用的Web Service消息格式是SOAP,后来出现了REST式的Web Service,它采用纯XML和HTTP。随着REST的兴起,出现了很多人使用JSON(JavaScript对象符号)作为消息格式。另外一个很简单的远程协议被称为XML-RPC(XML远程过程调用)。 对最常见的是SOAP协议我不会在这里详述消息格式细节,因为在后续的教程中会提到。在这里,我只是简单提一下。

web-service-overview-1

客户端发送请求到web服务,并且接收web服务的响应

SOAP

SOAP(简单对象访问协议)是基于XML的消息格式。下面是一个简单的SOAP消息:


<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

    <soap:Header>
    </soap:Header>

    <soap:Body>

        ... message data ...

        <soap:Fault>
        </soap:Fault>

    </soap:Body>

</soap:Envelope>


正如你可以看到一个SOAP消息包括:

  • Envelope
  • Header
  • Body
    • Message Data
    • Fault (optional)

相同的SOAP消息结构用于客户端和Web Service服务器之间的请求和响应。

Body内的Fault元素是可选的。只有Web服务中发生内部错误里才返回。否则,返回正常信息数据。

SOAP不指定一个消息从客户端如何获取到Web Service,但最常见的情况是通过HTTP。

REST + XML

REST(具象状态传输)Web服务与SOAP Web服务有一点不同。一个REST请求就像一个普通的浏览器发送一个简单的HTTP请求到Web服务器。一般情况不发送XML请求。一个REST响应通常在一个普通的HTTP响应中发送回一个XML文档,就像浏览器请求一样。

在REST中,你不用太多关注“服务”方面,而是在“资源”。一个资源有一个给定的URL,就像在一个网站的HTML页面。比如社交应用中一个用户的基本信息资源,可能是下面的网址:


http://social.jenkov.com/profiles/jakobjenkov

这个URL可能会返回一个XML文档(资源)描述了我。 返回的XML文件会是下面这样:


<profile>
    <firstName>Jakob</firstName>
    <lastName>Jenkov</lastName>
    <address>
        <street>The Road 123</street>
        <zip>12345</zip>
        <city>Copenhagen</city>
    </address>
</profile>


REST也自然地支持资源的集合。举例来说,这个URL可能代表所有的公共用户配置文件的列表:


http://social.jenkov.com/profiles/

下面是这样的XML配置文件列表的一个例子:
<profiles>
    <profile>...</profile>
    <profile>...</profile>
    <profile>...</profile>
</profiles>


上面这两个网址只能读取一个资源或资源集合。如果您需要修改REST中的资源,您需要发送不同的HTTP请求到服务器。当你读一个资源要发送HTTP GET请求。如果你需要写一个资源,就需要发送一个HTTP PUT来代替。如果你需要删除一个资源,需要发送一个HTTP DELETE等。

REST + JSON

REST+ JSON跟REST + XML基本上是一样的,只不过传输的数据是JSON(JavaScript对象符号)格式的。JSON的基于XML的优点是Web浏览器能够自然地解析JSON结构并且转换成JavaScript对象,不需要自己在浏览器中转换。这使得许多使用AJAX的应用程序变得简单。

下面是一个json的例子:


{
    firstName : "Jakob",
    lastName  : "Jenkov",
    address   : {
       street : "The Road 123",
       zip    : "12345",
       city   : "Copenhagen"
    }
}


 

XML RPC

相比REST,XML RPC更类似于SOAP,XML RPC的请求和响应都是一样的格式,相比SOAP ,XML RPC是一种较为简单的协议,它很接近标准过程调用的建模。有些人声称,XML RPC现在已死或过时。

下面是一个XML RPC的请求示例:


POST /RPC2 HTTP/1.0
User-Agent: My XML-RPC API/1.0.0 (Win7)
Host: jenkov.com
Content-Type: text/xml
Content-length: 200

<?xml version="1.0"?>
<methodCall>
    <methodName>getProfile</methodName>
    <params>
        <param>
            <value><string>Jakob Jenkov</string></value>
        </param>
    </params>
</methodCall>


标注:这个HTTP请求的Content-Length头没有正确设置,它应该是XML请求的字节数。

下面是一个XML RPC响应示例:


HTTP/1.1 200 OK
Connection: close
Content-Length: 213
Content-Type: text/xml
Date: Wed, 03 Feb 2010 20:00:00 GMT+1
Server: jenkov.com
    
<?xml version="1.0"?>
<methodResponse>
    <params>
        <param>
            <struct>
                <member>
                    <name>firstName</name>
                    <value>Jakob</value>
                </member>
                <member>
                    <name>lastName</name>
                    <value>Jenkov</value>
                </member>
                <member>
                    <name>address</name>
                    <value>
                        <struct>...</struct>
                    </value>
                </member>
            </struct>
        </param>
    </params> 
</methodResponse>


目录
相关文章
|
6月前
|
JSON 安全 API
使用 ABAP sproxy 事务码生成的 Proxy 消费 Web Service
使用 ABAP sproxy 事务码生成的 Proxy 消费 Web Service
54 0
|
12月前
|
JSON Serverless 对象存储
使用web service函数
使用web service函数
59 0
|
程序员 数据格式 XML
Web Service 与WebAPI 的区别
Web Servise: web service 是一种跨编程语言和跨操作系统平台的远程调用技术。 所谓跨编程语言和跨操作系统平台,就是说服务器端程序采用Java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务器端程序和客户端程序可以在不同的操作系统上运行。
2940 0
|
数据格式 XML Windows
|
Java
Web service 客户端 应用
试了好多方法(如axis2、xfire),一直报错,后来才知道用java的基础包就可以。汗~~ 来贴上代码吧   1 import javax.jws.WebMethod; 2 import javax.
1055 0