在 Web 服务数据映射中处理 HTTP 错误

包含来自外部Web服务的的数据集成项目在获取远程数据时,可能容易受到HTTP错误的影响。当数据映射在自动化控制下运行时,尤其重要的是能够检测并报告错误,即使这些错误只发生得非常罕见。

MapForce 数据映射可以包含对 Web 服务的调用,并将结果直接输出到文件或数据库,或者将其与其他输入结合,进行进一步处理。 无论最终输出形式如何,如果在 REST Web 服务请求中遇到 HTTP Web 服务错误,都会使数据映射面临风险。

MapForce 包含处理 HTTP 错误的特性,而不是简单地中止映射的执行。开发人员可以配置 REST Web 服务的调用,以便根据返回的 HTTP 状态码来处理和报告异常。

我们来看一个例子。

MapForce 软件中预装的样本数据映射包括一个名为 AirportStatus.mfd 的实际 REST Web 服务映射。该映射调用由美国联邦航空管理局赞助的 Web 服务,该服务提供关于美国主要机场运营延误的信息。该映射的输入是一个由三个字母组成的机场代码,该代码会传递给 Web 服务,而结果则以 JSON 文件的形式返回。以下是该映射及其示例结果。

如果出现任何 HTTP 错误,映射执行将会失败。

MapForce的帮助文档包含了关于如何处理REST Web服务响应中条件性情况的说明。我们可以简单地将处理HTTP错误的代码片段复制到现有的映射中,但如果发生HTTP错误,我们将无法验证结果。我们无法强制FAA的Web服务在测试时生成HTTP错误!

我们可以使用位于 httpstat.us 的 Web 服务来生成各种 HTTP 状态码和描述,以便在单独的数据映射中进行测试。例如,在浏览器窗口中访问 URL https://httpstat.us/200 会返回“200 OK”。访问 URL https://httpstat.us/400 会返回“400 Bad Request”,以此类推,可以为所有定义的、最高到 524 的状态码进行测试。

我们可以在 MapForce 中通过以下步骤来实现对该服务的 REST 请求:只需打开一个新的映射文件,然后在工具栏中点击“插入 Web 服务”按钮即可

这会打开“Web服务调用设置”对话框,我们可以在这里手动配置各项设置。为了方便测试不同的值,我们将使用一个参数来代替任何特定的状态码。

以下是用于提供代码参数的映射关系,其中包含一个常数值

默认情况下,Web服务功能仅支持200-299范围内的正常HTTP响应值。我们可以通过右键单击“响应”中的“主体”元素,打开“响应结构”对话框,从而添加对其他状态码的支持,并扩展可接受的状态码范围

我们可以将 REST 请求的结果映射到一个简单的文本文件,使用 decode-mime-entity 函数来实现。由于 Web 服务在响应头中没有提供字符集的值,因此我们将常量值 "utf-8" 连接到解码函数中。

现在,我们可以使用地图转换窗口底部的“输出”按钮来执行地图转换,并查看结果

我们可以在映射面板中修改输入常量,然后重新执行,以查看差异

我们可以使用一个连接函数,将结果与其他信息结合起来,从而创建一个更易于理解的状态消息

一旦我们对映射功能进行了各种可能 HTTP 状态码的测试,并且对结果感到满意,我们就可以通过复制粘贴操作,将 HTTP 错误处理功能添加到现有的 AirportStatus.mfd 映射中。首先,我们将在 AirportStatus 映射中创建一个新的响应体,用于处理超出正常范围的响应码。 我们可以右键单击 Web 服务响应部分中的“Body”项,以添加一个新的“Body”节点。

这会添加新的主体,并打开“响应结构”对话框,在这里我们将指定如何处理所有大于 299 的 HTTP 状态码

现在,我们可以将错误处理定义中的映射组件从测试映射中复制,粘贴到“AirportStatus”映射中,并连接新的响应体

现在,该映射定义了多个输出。在MapForce中手动执行时,用户可以选择其中一个输出。当映射的目的是在MapForce Server的自动化控制下或在定期安排的FlowForce Server任务中执行时,处理HTTP错误的执行路径的含义就变得清晰。例如,一个自动化的数据映射可以每半小时报告50个不同机场的状态。

在自动化执行过程中,所有数据映射的输出路径都会被处理。为了确保每个输入只调用一次 Web 服务,一个中间组件会在数据映射到最终目标之前,捕获 Web 服务的返回结果。如果发生任何 HTTP 错误,系统会记录发生错误的日期、时间以及具体的 HTTP 状态码。

在RESTful Web服务的数据映射中,处理HTTP错误就像安全带或灭火器——虽然非常重要,但我们希望永远用不上!

如果您是第一次使用 MapForce,请观看这个视频介绍,以便了解基本功能。您也可以通过免费的30天试用亲自体验 MapForce。