Web 服务集成类型返回的默认响应是什么?
问题
Web 服务集成默认返回什么响应?
解答
每种响应的结构会根据所选的 Content-type 设置而有所不同。
Content-type 格式说明:
- application/json:json 格式的字符串,信息以 { 大括号 } 嵌套
- text/xml:标准 XML 格式。当发送此响应时,像 Insomnia 这样的可视化客户端会自动格式化,方便阅读。
- application/soap-xml:与上面类似的标准 XML 格式,但以 SOAP 消息形式发送,而不是纯文本
- text:未格式化的 XML 响应。
%response% 变量
XML 格式的示例响应:
<Response Version="2.0" AppName="BarTender" AppVersion="2016 R8" AppVersionId="1100" AppVersionMajor="11" AppVersionMinor="0" AppVersionBuild="3146" AppInstancePid="29400" AppInstanceGuid="{303F1806-45E6-451E-9EA6-4C13CA93B299}">
<User>XXXXXX</User>
<Server>XXXXX</Server>
<Command Name="Print Document">
<Print ID="25" GUID="{59C2B1CF-B7E9-4572-B97B-66E4955993D7}" JobLastStatus="Queued" JobCompleted="true" JobName="resttest2.btw">
<JobStatus Completed="true">
<TimeJobStart>2018-07-05T10:38:38.183</TimeJobStart>
<TimeJobQueued>2018-07-05T10:38:38.261</TimeJobQueued>
<TimeJobSent>2018-07-05T10:38:38.261</TimeJobSent>
<LastStatus>Queued</LastStatus>
<Description>Print job now waiting to be sent to printer.</Description>
</JobStatus>
<Message Id="1750" Guid="{889B2413-F92A-4774-A0E8-E931F25F12EC}" Severity="Information" Category="Printing" Response="OK">
<Text>BarTender successfully sent the print job to the spooler.
Job Name: resttest2.btw
Document: resttest2.btw
Printer: Zebra 140XiIII Plus</Text>
</Message>
</Print>
</Command>
</Response>
如果你想检查打印状态,可以关注 print 标签中的这个参数:
JobCompleted="true"
或者如下参数:
JobStatus Completed="true"
这些标签确认打印任务已成功发送到打印后台。此时,任务已离开集成的控制范围。Message 标签中的信息会以更易读的方式报告同样的信息。如果有错误导致打印任务无法被加入后台,响应会是:
%Response%
如果 Printer Maestro 服务未运行,可能会出现误报(或在这种情况下为误判):
<Print ID="29988" GUID="{22999A4F-40C7-4F30-BB44-BED5F93691C8}" JobLastStatus="Unknown" JobCompleted="false" JobName="Label_v1.btw">
<JobStatus Completed="false">
.....
<LastStatus>Unknown</LastStatus>
<Description>Print job status is unknown because the Printer Maestro Service that is running on the computer that the printer is attached to is not responding.</Description>
</JobStatus>
虽然任务实际上已完成,但由于无法与 Printer Maestro 服务通信,响应会显示未完成。
响应变量的取值
- JobLastStatus:几乎总是“queued”,表示任务已加入后台。如果显示 unknown,说明集成无法与 Maestro 服务通信。
- JobCompleted:如果任务已加入后台,则为“True”。如果 Maestro 服务通信异常,可能会显示为 false。
- Job Status Completed:确认任务已完成
- Command Name:集成中的打印操作名称
操作摘要
JSON 格式的成功响应示例:
{
"Version": "1.0",
"Status": "RanToCompletion",
"WaitStatus": "Completed",
"Validated": true,
"Messages": [
{
"ActionName": "Print Document",
"Level": 2,
"Text": "BarTender successfully sent the print job to the spooler.\r\n\r\nJob Name: resttest.btw\r\nDocument: resttest.btw\r\nPrinter: Datamax I-4208"
}
]
}
错误响应示例:
{
"Version": "1.0",
"Status": "Faulted",
"WaitStatus": "Faulted",
"Validated": true,
"Messages": [
{
"ActionName": "Print Document",
"Level": 4,
"Text": "BarTender cannot use printer 'fakeprinter' to design, print, or export a template due to a printer setup problem."
}
]
}
这个响应示例较短,因为该集成只包含一个操作。这里响应的操作就是集成中列出的操作:
操作响应的取值
- Status:取值为“RanToCompletion”或“Faulted”
- WaitStatus:取值为“Completed”或“Faulted”
- ActionName:正在打印的操作名称。操作响应只报告打印操作的信息,即使存在其他操作。
- Text:你也可以在管理控制台或 Integration Builder 的集成消息中看到的消息内容。
另请参阅
内部备注
虽然打印任务信息看起来依赖于后台服务,但实际上似乎是从 Printer Maestro 服务获取信息。如果 Maestro 服务未正常运行,响应可能会出现误报(或在这种情况下为误判)。由于开发团队没有明确说明两者之间的通信方式,我们只能根据这些现象进行判断。
这会影响 XML 变量 JobLastStatus 和 LastStatus 以及 JSON 变量 Status 和 WaitStatus
变量响应
理论上响应中可以返回任何内容。本文只介绍 BarTender 生成的响应。在集成失败前,它会包含更多有用的任务信息。失败后则只会返回变量本身。
操作响应
关于此响应没有任何文档说明,甚至在帮助文档中都未提及。显然这是后来添加的,但 JIRA 上没有具体何时添加的确认。
目前还不清楚 Status 和 WaitStatus 之间的区别。它们似乎报告的是同样的信息,只是用词不同。
Level 参数似乎表示当前操作在操作列表中的位置,从“Action”部分开始为 1。所以上图中,Action 是 1,Print Document 是 2。这可能与集成的编写方式有关,对客户来说基本没有用处。