【问题标题】:How to include Marklogic rest-api in custom rewriter code in Xquery?如何在 Xquery 的自定义重写器代码中包含 Marklogic rest-api?
【发布时间】:2021-01-28 19:23:36
【问题描述】:

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

我已经编写了 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$1")
        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")

并且App服务器配置中的url-rewriter路径设置为/rewriter-ex/rewriter.xqy并且rewrite resolves global参数在App中设置为true服务器。

我能够将我的 API url 重定向到相应的端点。但我无法使用预定义的 ML Res-API 端点,如 /v1/documents,它显示 rewriter.xqy 中返回的 404 错误。

有没有一种方法可以实现重写器以同时支持 rest api 端点和自定义 API 端点?

【问题讨论】:

    标签: url-rewriting xquery marklogic rest


    【解决方案1】:

    感谢您的回答。我计划使用两个应用服务器,一个用于休息调用,另一个用于 API 调用。这两个应用服务器将指向同一个数据库。如果这是正确的方法,请告诉我。

    【讨论】:

      【解决方案2】:

      如果您想在 MarkLogic 之上创建自己的 RESTful API,并使用您自己的自定义端点。请查看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,它们可以一起聚会。

      【讨论】:

        【解决方案3】:

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

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

        希望对您有所帮助,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-12
          • 2017-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多