如何在 Xquery 的自定义重写器代码中包含 Marklogic rest-api?

How to include Marklogic rest-api in custom rewriter code in Xquery?

我是 url 重写 Marklogic 过程的新手,需要帮助来解决以下问题。

我已经编写了 Xquery 实现来将我的 API 端点重定向到相应的 Xquery 模块,如 /rewriter-ex/rewriter.xqy.

xquery version "1.0-ml";

let $url := xdmp:get-request-url()

 return if(fn:matches($url,"/fetchRecord")) then
             fn:replace($url,"/fetchRecord","/lib/fetch-record.xqy")
        else if(fn:matches($url,"/saveRecord")) then
             fn:replace($url,"/saveRecord$","/lib/save-record.xqy")
        else (xdmp:set-response-code(404, "Not found"),"/no/such/resource")

并且应用服务器配置中的url-rewriter路径设置为/rewriter-ex/rewriter.xqy并且rewrite全局解析 参数在应用服务器中设置为true。

我能够将我的 API url 重定向到相应的 endpoints.But 我无法使用预定义的 ML Res-API 端点,例如 /v1/documents,显示 rewriter.xqy.

中返回的 404 错误

有没有一种方法可以实现重写器以支持其余 api 端点以及自定义 API 端点?

REST API 不支持自定义或替换在 REST API 服务器初始化期间配置的默认声明式重写器。此外,REST API 没有为 REST API 端点的功能提供 XQuery API 接口。

相反,推荐的方法是通过以下替代方法之一扩展 REST API:

希望对您有所帮助,

如果您想在 MarkLogic 之上创建自己的 RESTful API,使用您自己的自定义 end-points。请查看 XQuery API for RESTful Services (XQRS).

declare
  %rest:path("/fetchRecord/{$record-id}")
  %rest:GET
function fetch-record($record-id as xs:string) {
  fn:doc($record-id)
};

declare
  %rest:path("/saveRecord/{$record-id}")
  %rest:PUT("{$doc}")
  %xdmp:update
function put-record($record-id as xs:string, $doc as document-node(element())) {
  xdmp:document-insert($record-id, $doc)
};

您的 RESTXQ 模块可以位于它们自己独立的 HTTP 应用服务器上(在它们自己的端口上),并与另一个具有默认 MarkLogic REST API 的 HTTP 应用服务器并存。

XQRS 与 MarkLogic 的其他软件完全兼容,包括 Data Hub Framework,它们可以一起聚会。

感谢您 answers.I 计划使用两个应用服务器,一个用于休息呼叫,另一个用于 API calls.These 两个应用服务器将指向相同的 DB.Please 让我知道这是否是正确的方法。