使用 BaseX XQuery 代码处理仅 JSON 的 API

问题描述

我最近接手了一个旧的代码项目来完成一项新工作,这个项目广泛使用了存储在 BaseX 中的 XML 数据库。核心项目是一个 Node Web 应用程序,它将各种数据库操作委托给与 BaseX 数据库交互的 XQuery 函数

最近,我们用来交叉发布公共数据的外部 API(一种公共数据中心)彻底改变了它的 API,并且只接受 JSON 编码的 REST API 调用。这对我们来说是个问题,因为我们使用 BaseX/XQuery 方法来塑造 XML 编码的 REST 调用,而且效果非常好。

我仔细查看了 BaseX 的各种模块(特别是 JSON 和 HTTP 模块)的文档,但似乎 XML 元素是我们用来进行调用http:send-request 函数接受的唯一内容查询。 BaseX 显然能够解析和序列化 JSON 数据,但我找不到任何东西可以为 HTTP 请求发送 JSON 数据。

我想在 Node 应用程序代码中执行这个外部发布而不是 XQuery 方法,但是发布的内容依赖于从数据库获取的各种数据,所以感觉有点适得其反。

>

在这里遗漏了什么吗?是否可以使用来自 BaseX 数据库的 XML 数据在 XQuery 中塑造和发送 JSON 数据?

提前致谢。

解决方法

习惯 EXPath HTTP Client Module 需要一段时间。这是使用 POST 方法将 JSON 数据发送到 Web 服务的一种方法:

http:send-request(
  <http:request method='post'>
    <http:body media-type="application/json"/>
  </http:request>,'https://your/url','{ "a": "b" }'
)

实际的 JSON 负载是通过第三个函数参数提供的。在示例中,它是一个普通字符串。如果您的输入是 XML,您可以通过 json:serialize 将其转换为字符串表示。