我梦寐以求的物联网/第 3 章:物联网与 Web 服务
Web 服务是高度可用的分布式应用程序组件。我们可以使用它们来集成用不同语言编写并在不同平台上运行的计算机应用程序。HTTP 等 Web 服务是语言和平台无关的,因为供应商已就通用 Web 服务标准达成一致。HTTP Web 服务使用 HTTP 的操作与远程服务器交换数据。如果您想从服务器获取数据,请使用 HTTP GET,将新数据发送到服务器,并使用 HTTP POST 和其他一些函数。就是这样:没有注册表、没有信封、没有包装器和没有隧道。HTTP 协议中内置的“动词”直接映射到应用程序级操作,用于检索、创建数据等。
SOAP 代表简单对象访问协议,是一种基于标准的 Web 服务访问协议。SOAP 提供长期效益,并且已经存在了一段时间。SOAP 由微软开发,使用 XML 提供消息服务,尽管在 SOAP 中发出请求和接收响应可能变得极其复杂。与其他编程语言一样,SOAP 的 XML 对错误不宽容。但是,SOAP 最重要的功能之一是其内置的错误处理;如果请求出现问题,系统会发送包含错误信息的响应。[1]
REST 代表具象状态传输,它包含一组无状态的架构原则。REST 可以管理专注于系统资源以及如何在 HTTP 上通过各种用不同语言编写的客户端来寻址和传输资源状态的 Web 服务。REST 充当轻量级替代方案,在许多情况下使用简单的 URL 而不是 XML 来进行请求。REST 允许许多不同的数据格式,从表面上看增加了复杂性。但是,由于支持 JSON,这使得 REST 能够更好地支持浏览器客户端,因为 JSON 通常更适合数据并且解析速度更快。[1][2]
SOAP:[1]
- 是语言、平台和传输无关的
- 在分布式企业环境中证明效率很高
- 是标准化的
- 以 WS* 标准的形式提供显著的预构建可扩展性
- 提供内置错误处理
- 允许自动化任务
- 使用更小的消息格式
- 运行速度快,因为不需要大量处理
- 在设计理念上类似于其他 Web 技术
- 证明与 Web 服务交互的成本低
- 提供更小的学习曲线
哪一个更适合物联网?
SOAP 和 REST 都适合物联网 (IoT)。REST 更适合涉及移动设备和嵌入式设备的物联网应用程序,而 SOAP 更符合业务应用程序的要求。这是因为 REST 代表了实现智能事物全球网络的最直接、最简单的方式,而 SOAP 具有强大的安全要求。[3]
HTTP/1.1 通过提供持久连接来加速信息流,持久连接允许将多个请求批处理或流水线到输出缓冲区。当支持 HTTP/1.1 的浏览器指示它可以解压缩 HTML 文件时,服务器将压缩它们以通过互联网传输,从而在必须传输的数据量方面节省大量的聚合。除此之外,HTTP/1.1 还提供允许多个域名共享同一个互联网地址 (IP 地址) 的功能。这简化了托管多个网站的 Web 服务器的处理,这种做法有时被称为虚拟主机。[4]
HTTP/2 中出现的主要改进是:[5]
- 单个 HTTP 连接中的多个流(多路复用):流类似于数据通道。从客户端到服务器的单个已建立数据连接在其内部有多个流。这意味着各种流可以在同一连接单元中在服务器和客户端之间交换数据。无论是客户端还是服务器,或者共享流,双方都可以同时交换数据,并且流可以由客户端或服务器断开或关闭。
- 在请求中设置优先级:客户端请求的具有额外紧急性的数据可以设置优先级标志,接收端会处理该标志。流标识符用于声明流的优先级,它也是借助 31 位优先级标识符设置的。值 0 表示高优先级流。
HTTP/1:快速增长和信息 RFC
从 1991 年到 1995 年,HTML 规范发生了快速协同演进,而网页浏览器也作为一种新型软件,在面向消费者的公共互联网基础设施快速发展的推动下,迅速崛起。不断增长的公共网络对新兴网络期望的功能和用例的需求,很快暴露出 HTTP/0.9 的许多基本局限性。需要一种新的协议,不仅能够提供超文本文档,还需要支持关于请求和响应的更丰富的元数据,并能够实现内容协商等功能。作为回应,新兴的网页开发人员社区通过一种临时性的过程,创建了大量的实验性 HTTP 服务器和客户端实现,这些实现可以被其他人实施、部署和可能采用。[6]
HTTP/1.1:互联网标准
HTTP/1.1 标准解决了早期版本中发现的许多协议歧义,并引入了一些关键的性能优化。最明显的区别是:它允许对两个对象进行请求,一个是 HTML 页面,一个是图像,这两个请求都通过单个连接传递。这个连接可以保持活动状态,允许重复使用现有的 TCP 连接进行对同一主机的多个请求,从而提供更快的最终用户体验。为了终止持久连接,第二个客户端请求可以通过连接头向服务器发送一个明确的关闭令牌。类似地,服务器可以在响应传输完成后,通知客户端关闭当前 TCP 连接的意图。从技术上讲,任何一方都可以在任何时候终止 TCP 连接而无需发出此类信号,但客户端和服务器应尽可能提供此信号,以便在双方实现更好的连接重用策略。 [4][6]
HTTP/2:改进传输性能
为了克服新的挑战,HTTP 协议不得不进行演变。2012 年,HTTP 工作组宣布开始开发新的 HTTP/2.0 协议,规范于 2015 年 5 月发布。HTTP/2 的主要目标是提高传输性能,实现更低的延迟和更高的吞吐量。重要的是要记住,所有高级协议语义都没有受到影响,这意味着所有 HTTP 标头、值和用例都是相同的。任何现有的网站或应用程序都可以在不修改的情况下通过 HTTP/2 传输。HTTP 服务器必须支持 HTTP/2,但这对于大多数用户来说应该是透明的升级。如果工作组能够实现其目标,唯一的区别应该是我们的应用程序将以更低的延迟和更好的网络链路利用率交付。[5][6]
HTML5 for IoT
[edit | edit source]HTML 4.x 概述
[edit | edit source]HTML 4.x 是第一个将层叠样式表作为 HTML 标准一部分的版本。为了实现过渡,W3C 提供了三个版本的 HTML 4:过渡版、框架集版和严格版。虽然它继续作为许多 HTML 核心特性的粗略指南,但它没有提供足够的信息来构建相互之间以及更重要的是与网络内容互操作的实现。此外,HTML 4 通过样式表、脚本、框架和嵌入对象机制扩展了 HTML,并改进了对从右到左和混合方向文本、丰富表格和表单的支持,同时还为残疾人提供了更好的可访问性。[7][8]
使用 WebSocket 的 HTML5 用于 IoT
[edit | edit source]WebSocket 提供了一种新的客户端和服务器之间的协议,它运行在持久 TCP 连接之上。双向和全双工消息可以通过单个 TCP 套接字连接(同时或来回)通过 TCP 连接发送。这是因为它是一个独立的基于 TCP 的协议,理想情况下不需要 HTTP 隧道,从而简化了发送消息时的通信。[9]
使用 WebSocket 的 HTML5 是否更适合 IoT?它倾向于更适合,因为 WebSocket 更适合涉及低延迟通信的情况,特别是对于客户端到服务器的消息。对于服务器到客户端的数据,您可以使用长时间保持的连接和分块传输来获得相当低的延迟。但是,这无助于解决客户端到服务器的延迟,这需要为每个客户端到服务器的消息建立新的连接。[9]
语义 Web 服务
[edit | edit source]语义 Web 服务与其他传统 Web 服务一样,位于客户端-服务器系统的服务器端,用于通过万维网进行机器与机器的交互。在 2001 年 5 月的《科学美国人》杂志上,伯纳斯-李等人描述了它:“语义 Web 是当前 Web 的扩展,其中信息被赋予明确的含义,从而使计算机和人能够更好地协同工作。”[10]它是当前 Web 的高级形式,其中所有内容都具有明确的含义(易于信息解释),并且它使机器能够自动处理 Web 内容(机器可访问)。在语义 Web 服务组合中,机器可以根据用户约束自动选择、集成和调用各种 Web 服务,以实现用户指定的任务。Web 执行比用户更多的工作,因为它涉及在没有用户参与的情况下在 Web 上执行的例行和复杂任务,从而节省了组合和集成信息的时间。机器可处理的语义被添加到数据中,在明确定义的语义的帮助下,机器可以理解信息并代表人类用户处理信息,而 Web 服务则旨在为分布式计算提供全球基础设施。 [10]
本体 Web 语言 (OWL)
[edit | edit source]OWL 是一种高级语言(基于 XML),用于描述 Web 服务的属性。它由三个部分组成:服务配置文件、过程模型和基础。服务配置文件包括一般信息,用于描述服务将要做什么。过程模型描述了服务将如何执行其功能,而基础描述了与行业标准的链接。它的主要目标是使用户能够在特定条件下自动发现、调用、组合和执行 Web 服务。 [11]
Web 服务建模本体 (WSMO)
[edit | edit source]WSMO 用于描述 Web 服务的语义。它由四个部分组成:目标、本体、中介和 Web 服务。目标定义了用户的愿望。本体为描述数据的术语定义了正式语义,以实现与其他 WSMO 元素的互操作性。中介用于处理不同 WSMO 元素之间的互操作性问题,而 Web 服务则描述了现有已部署服务的函数行为、前提条件、后置条件、控制流等。 [12]
Web 服务是所谓的可编程 Web 的关键元素之一。它们可以有效地用于参与和建立企业对企业的交易,并且非常擅长向用户公开软件功能,同时集成异构平台。Web 服务基于开放且普遍接受的互联网协议。它们并非万能,但无疑代表了我们都在寻找的一类软件代理。
- ↑ a b c d Mueller, J. (2013 年 1 月 8 日). "理解 SOAP 和 REST 基础以及差异". SmartBear 博客. SmartBear 软件公司. 检索于 2016 年 5 月 19 日.
- ↑ a b Rodriguez, A. (2015 年 2 月 9 日). "RESTful Web 服务:基础". IBMdeveloperWorks. IBM. 检索于 2016 年 5 月 19 日.
- ↑ Guinard, D.; Ion, I.; Mayer, S. (2012). "寻找物联网服务架构:REST 还是 WS-*?开发人员视角". 在 Puiatti, A.; Gu, T. (编). 移动与泛在系统:计算、网络与服务. 施普林格柏林海德堡. pp. 326–337. doi:10.1007/978-3-642-30973-1_32. ISBN 978-3-642-30973-1.
{{cite book}}
: CS1 maint: multiple names: authors list (link) - ↑ a b "HTTP 1.1 定义". SearchSOA. TechTarget. 2005 年 9 月. 存档于 原文 2015 年 10 月 27 日. 检索于 2016 年 5 月 19 日.
- ↑ a b Pillai, S. (2013 年 7 月 31 日). "HTTP 版本 2 协议中的最新改进". /ROOT.IN. 检索于 2016 年 5 月 19 日.
- ↑ a b c Grigorik, I. (2013). "第 9 章:HTTP 简史". 高性能浏览器网络. O'Reilly 媒体公司. ISBN 9781449344764. 检索于 2016 年 5 月 19 日.
- ↑ Williams, N. (2004). "HTML4 是关于什么的?". CodeHelp.co.uk. 检索于 2016 年 5 月 19 日.
- ↑ "HTML 4 简介". HTML 4.01 规范. 万维网联盟. 1999 年 12 月 24 日. 检索于 2016 年 5 月 19 日.
- ↑ a b 4esn0k (2013 年 2 月 5 日). "WebSocket 协议与 HTTP". Stack Overflow. Stack Exchange, Inc. 检索于 2016 年 5 月 19 日.
- ↑ a b Marchiori, M.; Epifani, A.; Trevisan, S. "语义网简明教程". Metalog - 迈向语义网. 万维网联盟. 检索于 2016 年 5 月 19 日.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ↑ Martin, D.; Burstein, M.; Hobbs, J. 等. (2004 年 11 月 22 日). "OWL-S:Web 服务的语义标记". 万维网联盟. 检索于 2016 年 5 月 19 日.
{{cite web}}
: 明确使用等等:|author=
(帮助)CS1 maint: multiple names: authors list (link) - ↑ Roman, D.; Lausen, H.; Keller, U. 等 (2005 年 2 月 10 日). "D2v1.1. Web Service Modeling Ontology (WSMO)". WSMO 工作组. 检索于 2016 年 5 月 19 日.
{{cite web}}
: 在“作者”参数中显式使用“et al.”:|author=
(帮助)CS1 维护:多个名称:作者列表 (链接)