当客户端和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服务,并且接收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>

Web Service 消息格式的更多相关文章

  1. Web Service(1.8)

      “基于 XMLWeb Service 的 Java API”(JAX-WS)通过使用注释来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发.注释描述如何将 ...

  2. Web Service 元数据注释(JSR 181)

    Web Service 元数据注释(JSR 181) @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值 ...

  3. Web Service进阶(四)WebService注解

    @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值为 Java 类的简单名称 + Service.(字符 ...

  4. 【Java学习笔记】如何写一个简单的Web Service

    本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...

  5. Web Service学习之八:Soap消息详解

    一.区别概念 WSDL是网络服务描述语言,是XML文档:它包含一系列描述某个web service的定义或者说是规则.尤其是定义了传输Sope消息的结构 Soap:简单对象访问协议,是交换数据的一种协 ...

  6. Web Service概念梳理

    计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些 ...

  7. Web Service

    Web Service全称XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP ...

  8. WCF、Web API、WCF REST、Web Service比较

    原文地址:http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and- ...

  9. Web Service和WCF的区别。其实二者不属于一个范畴!!!

    Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展 ...

随机推荐

  1. Git 在webstrom上安装git

    Git下载地址:https://git-scm.com/download/win 用webstorm迁入迁出代码时,首先要先下载git,网址一搜就可以搜到,然后开始配置webstorm,打开webst ...

  2. SpringBoot集成Shiro

    Shiro是一个安全框架,控制登陆,角色权限管理(身份认证.授权.回话管理.加密) Shiro不会去维护用户,维护权限:这些需要通过realm让开发人员自己注入 1.在pom.xml中引入shiro的 ...

  3. 使用sysbench 0.5 对mysql 进行性能、压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.目前sysbench代码托管在launchpad上,项目地址:https://launc ...

  4. bootstrap-table 刷新页面数据

    bom.bootstrapTable('load',msg['object']);//这一步 务必要添加. if(msg['code']==1){ bom.find('tbody').css('dis ...

  5. C++中的继承(1) 继承方式

    1.继承与派生  继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.简单的说,继承是指一个对象直接使用另一对象的属性和方法.继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单 ...

  6. Tensorflow 中的优化器解析

    Tensorflow:1.6.0 优化器(reference:https://blog.csdn.net/weixin_40170902/article/details/80092628) I:  t ...

  7. 51 NOd 1459 迷宫游戏 (最短路径)

    1459 迷宫游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间, ...

  8. python 内建函数

    # # __geratteibute__class Itcast(object): def __init__(self,subject1): self.subject1 = subject1 self ...

  9. dubbo负载均衡策略和集群容错策略都有哪些

    dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...

  10. Select2 多层次赋值时异步赋值的问题

    场景: 当选择人员时加载人员,选择部门时加载部门.所以在人员下,选择人员A后,如果选择部门,会触发二级select 重新获取数据. 问题: 使用select2()方法进行绑定远程数据后,对第二个sel ...