语义、Web服务与SOAP协议深度剖析
1. 语义技术解析
在当今的互联网环境中,语义技术对于数据的处理和交互至关重要。其中,RDFa(Resource Description Framework in Attributes)和微格式(Microformats)是两种重要的语义表达技术。
RDFa借助
<link>
元素和
rel
属性来传递关于引用资源的额外信息。例如,有如下示例:
<item>
<name>latte</name>
<quantity>1</quantity>
<milk rel="rv:supplier" href="http://localfarmer.com/">whole</milk>
<size>12</size>
</item>
<item>
<name>cookie</name>
<kind rel="rv:recipe"
href="http://restbucks.com/recipes/choc-cookie">chocolate-chip</kind>
<quantity>2</quantity>
</item>
一个理解相关词汇的软件代理会将上述RDFa语句转换为如下机器可理解的语句:
- 咖啡豆源自
http://coffeebeans.com
- 全脂牛奶的供应商是
http://localfarmer.com
- 巧克力曲奇的食谱是
http://restbucks.com/recipes/choc-cookie
微格式则是社区驱动的规范集合,旨在传达机器可处理的信息。其目标是设计小型文档格式,优先供人类使用,其次供机器处理。以巧克力曲奇食谱为例,使用微格式可将其表示为包含人类和机器可处理信息的XHTML文档:
<div class="hrecipe">
<h1 class="fn">Restbucks Chocolate Cookies</h1>
<p class="summary">This is how you can make Restbucks chocolate cookies</p>
<h2>Ingredients</h2>
<ul>
<li class="ingredient">
<span class="value">2.25</span> <span class="type">cups</span> flour.
</li>
<li class="ingredient">
<span class="value">1</span> <span class="type">teaspoon</span> baking soda.
</li>
<li class="ingredient">
<span class="value">1</span> <span class="type">teaspoon</span> salt.
</li>
<!-- More ingredients -->
</ul>
<h2>Preparation instructions</h2>
<ul class="instructions">
<li>Preheat oven to 375° F.</li>
<li>Combine flour, baking soda, and salt in small bowl... </li>
<!-- More instructions -->
</ul>
</div>
微格式利用现有的HTML属性(特别是
class
属性)来传输机器可读的语义信息。它与RDFa相似之处在于都将语义与文档结构分离。与普通XML不同,微格式和RDFa可以将相同的语义插入到不同的文档结构中。不过,尽管微格式目前在Web上广泛使用,但未来可能会被RDFa取代,因为RDFa很可能会被纳入未来的HTML标准。
2. 关联数据与Web
关联数据(Linked Data)致力于公开数据和信息,以便计算机而非人类能够消费和处理这些数据。企业和组织被鼓励使用语义Web技术来公开其数据,并将其与Web上的其他数据进行关联。
结构超媒体是关联数据工作的核心,它使所有数据和信息以语义丰富的方式相互连接。HTTP和URI(统一资源标识符)允许我们创建跨越组织和地缘政治边界的信息和知识图,Tim Berners - Lee将其称为“全球大图”。例如,英国政府利用Web API和语义Web技术公开公共部门信息的举措,就是关联数据工作的一个很好的例子。
3. Web服务与WS - *协议栈
Web社区对WS - *协议栈(如SOAP、WSDL等)的复杂性提出了质疑。在探讨Web服务是否“邪恶”之前,我们先来回顾一下Web服务的发展历程。
在2000年,基于SOAP的Web服务成为一种颠覆性技术。它利用互联网协议和XML连接系统,无需专有中间件、私有API或集成专家,彻底改变了企业集成的格局。在此之前,集成中间件主要由DCOM、RMI和CORBA等不互操作的技术主导,即使进行了标准化,实际应用中仍存在许多问题。
如今,集成已成为一种常见的能力。虽然我们可以购买专业的集成软件,但开发社区发现日常开发平台中内置的工具通常已足够。不过,随着基于Web的分布式系统开发方法的出现,Web服务的魅力和技术可信度有所下降,而且WS - *协议栈存在许多不兼容性、不一致性和错误。
4. SOAP协议详解
SOAP(Simple Object Access Protocol)是Web服务栈的核心规范,它实际上是轻量级的,只描述了一个XML信封和通过网络传输消息的处理模型,并为SOAP实现者提供了如何使用底层传输协议传输SOAP消息的指导。
4.1 SOAP处理模型
SOAP信封与HTTP信封类似,包含用于设置消息处理上下文(如安全上下文、路由)的元数据的头部,以及包含业务有效负载的主体。在运行时,SOAP信封可通过任意传输协议进行传输,目前SOAP over HTTP是唯一被广泛接受的绑定方式。
SOAP消息可以通过任意数量的中间节点进行路由,这些中间节点会处理SOAP头部。与HTTP不同,HTTP是一种应用协议,支持统一接口,参与者共享交互语义的理解;而SOAP(加上WS - Addressing)更类似于面向消息的中间件,它不强制对传输的有效负载施加任何应用语义,将消息的解释留给接收服务。
4.2 SOAP与HTTP的对比
为了更清晰地了解SOAP与HTTP的关系,我们从以下几个方面进行对比:
| 对比项 | HTTP | SOAP |
| ---- | ---- | ---- |
| 信封 | 由一组头部(元数据)和可能包含数据的主体组成 | 包含头部和主体,结构类似但更具XML标签 |
| 头部 | 包含目标主机、内容类型和长度等元数据 | 例如使用WS - Addressing的To头部来帮助绑定消息到传输通道 |
| 主体 | 业务有效负载是XML文档,与Content - Type头部对应 | 业务有效负载是XML文档,
<order>
元素是
<soap:Body>
的唯一子元素 |
| 中间节点 | 如缓存可作为中间节点,帮助提高可扩展性和可靠性 | 有节点概念,可处理消息并使用头部元数据,通常由SOAP服务器内的处理程序实现 |
| 错误处理 | 使用4xx和5xx响应代码,提供标准化信息帮助应用恢复 | 有SOAP错误机制,但提供的标准化信息不足,依赖WS - Coordination协议进行协调 |
下面是一个mermaid流程图,展示SOAP消息的处理流程:
graph LR
A[发送者] --> B[SOAP头部处理中间节点1]
B --> C[SOAP头部处理中间节点2]
C --> D[接收服务]
通过以上对比和分析,我们可以更全面地了解语义技术、关联数据、Web服务以及SOAP协议在互联网数据交互中的作用和特点。在实际开发中,我们需要根据具体需求选择合适的技术和协议,以实现高效、可靠的分布式应用。
5. SOAP协议的优势与争议
尽管SOAP协议存在一些被质疑的地方,但它也有自身的优势。SOAP协议的核心规范较为轻量级,仅专注于定义XML信封和消息传输处理模型,不试图解决诸如安全、事务等更大的问题,也不强制对消息施加应用级语义或消息模式,这使得它具有一定的灵活性。
然而,SOAP协议也引发了诸多争议。由于SOAP通常在HTTP连接上传输类似HTTP的信封,这引起了Web社区的不满。有人认为Web本身已经提供了可扩展的信封、元数据、实体主体以及对中间节点的支持,SOAP的使用只是增加了协议栈的冗长性、延迟和复杂性。而且,SOAP消息通过HTTP POST进行隧道传输,导致现有Web基础设施的优势(特别是缓存)无法发挥作用。
6. 中间节点在SOAP和HTTP中的作用
在SOAP和HTTP的处理模型中,中间节点都扮演着重要的角色。以下是它们在两种协议中的具体作用对比:
| 协议 | 中间节点类型 | 作用 |
| ---- | ---- | ---- |
| HTTP | 缓存 | 作为客户端和资源之间的中间节点,帮助提高可扩展性和可靠性。通过缓存资源状态表示,减少对服务器的请求,提高响应速度。 |
| SOAP | 节点 | 处理消息并使用头部元数据。通常由SOAP服务器内的处理程序实现,用于设置安全上下文、加密/解密消息等。还可以使用企业级消息路由器,将组织的客户端应用与企业服务解耦。 |
下面是一个mermaid流程图,展示HTTP请求经过中间节点的过程:
graph LR
A[客户端] --> B[缓存中间节点]
B --> C{缓存命中?}
C -- 是 --> D[返回缓存数据给客户端]
C -- 否 --> E[请求发送到服务器]
E --> F[服务器处理请求]
F --> G[返回数据给客户端]
G --> B[更新缓存]
7. 错误处理机制对比
错误处理是分布式系统中至关重要的一部分。HTTP和SOAP在错误处理方面有很大的差异。
-
HTTP
:使用4xx和5xx响应代码来处理错误。这些状态码是Web固有的一部分,为应用提供了标准化的信息,帮助应用在每次交互中取得进展或采取补偿措施。例如,404状态码表示请求的资源未找到,应用可以根据这个信息提示用户或进行其他操作。
-
SOAP
:有一个基本的错误机制,即SOAP错误。它可以传达是消费者、服务还是中间节点导致了错误,以及一些关于错误原因的信息。但与HTTP相比,SOAP错误提供的标准化信息不足,无法像HTTP状态码那样为应用提供明确的指导。在SOAP的世界里,协调和生命周期问题通常依赖于很少使用的WS - Coordination协议家族。
8. 技术选择建议
在设计分布式应用时,我们需要根据具体的需求和场景来选择合适的技术。以下是一些建议:
-
语义技术选择
:
- 如果希望将语义与文档结构分离,并且文档结构可能多样,RDFa和微格式是不错的选择。RDFa可能更适合未来的发展,因为它可能会被纳入HTML标准;而微格式目前在Web上广泛使用,其利用现有HTML属性的方式简单实用。
- 如果对语义的表达要求不高,且文档结构相对固定,普通XML可能就足够了。
-
Web服务协议选择
:
- 如果系统需要高度的互操作性,并且对灵活性和扩展性有较高要求,同时能够接受一定的复杂性,SOAP协议可以考虑。特别是在企业级应用中,SOAP的消息处理模型和中间节点的支持可以满足复杂的业务需求。
- 如果追求简单、高效,并且希望充分利用Web基础设施的优势,如缓存等,HTTP协议可能更合适。例如,在构建轻量级的Web API时,使用HTTP的统一接口和状态码可以使开发和维护更加方便。
综上所述,语义技术、Web服务和SOAP协议在互联网数据交互中都有各自的特点和适用场景。我们需要深入理解这些技术的原理和优缺点,根据实际情况做出合理的选择,以构建高效、可靠的分布式应用。
超级会员免费看
1897

被折叠的 条评论
为什么被折叠?



