没有Gradle或Roxy框架的MarkLogic自定义REST API创建

时间:2019-05-11 12:12:05

标签: rest marklogic

我想使用MarkLogic 9.x.x创建一个全新的REST API,但不使用Roxy或Gradle。我想指向一个文件,该文件在基本MarkLogic设置中具有自定义端点的列表,然后将我的自定义逻辑保留在这些模块中。

我已经阅读了REST API文档,并使用CURL创建了一个文档,以便我们可以使用MarkLogic提供的默认API。

任何详细的解释都值得赞赏。

4 个答案:

答案 0 :(得分:2)

您已经考虑过使用XQRS吗?您可以使用直观的功能注释轻松地创建自定义REST端点,就像使用JAX-RS或Java Spring REST Services一样。可以安装和使用withwith-out Gradle。

您可以将自定义逻辑保留在这些REST函数中,也可以用JavaScript代码编写自定义逻辑,然后从这些函数导入/调用。 XQRS为您提供了完全的灵活性。您可以使用直接位于MarkLogic taking complete control of the URL Path上的“人性化” URL制作漂亮的REST API。是solid as a rock and unit tested to death。它可以随着MarkLogic扩展-即添加更多MarkLogic电子节点并自动扩展REST服务器,它是完全免费和开源的。该项目正在积极维护中,并且可以在GitHub上获得支持。如果您有Swagger / OpenAPI界面文件,也可以generate a MarkLogic Stub,这样可以节省很多时间。

功能根据您放置在注释上的REST服务而变得可用-并且您可以通过注释传递查询/表单参数,cookie和请求正文。查看此代码段以获取示例风味。

declare
  %rest:path("/factory/warehouse/wheel/{$wheel-id}")
  %rest:GET
function get-wheel($wheel-id as xs:string) {
  fn:doc($wheel-id)
};

declare
  %rest:path("/factory/warehouse/wheel/{$wheel-id}")
  %rest:PUT("{$doc}")
  %xdmp:update
function put-wheel($wheel-id as xs:string, $doc as document-node(element())) {
  xdmp:document-insert($wheel-id, $doc, map:entry("collections", "wheels"))
};

declare
  %rest:path("/factory/warehouse/wheel")
function list-wheels() {
  <wheels>{
    fn:collection("wheels")
  }</wheels>
};

答案 1 :(得分:1)

Management REST api确实是您最好的朋友,它是为此目的而设计的。但是,创建进行适当的REST调用的脚本可能很麻烦。 ml-gradle可以为您提供支持。它可以为您生成带有所有curl语句的shell脚本,您可以按原样运行,或者用作构建自己的部署脚本集的起点。有关详细信息,请参见:

https://github.com/marklogic-community/ml-gradle/wiki/Generating-a-shell-script

HTH!

答案 2 :(得分:0)

到目前为止,两种答案都是正确,准确和有帮助的,但是原始问题是可以自行回答的。

  

我已经阅读了REST API文档,通过使用   CURL,以便我们可以使用MarkLogic提供的默认API。

实际上,这就是您所说问题的答案。

答案 3 :(得分:0)

要手动部署ML rest API,请按照以下步骤操作

  • 创建模块数据库
  • 创建App Server   提供有关模块数据库,数据库,端口,URL重写器的详细信息
  • 使用qConsole部署xquery,xsl

    让URI =文件路径

    让路径= xdmp:document-get($ FilePath)

    xdmp:document-insert($ URI,$ path,(),())

    其中endpoints.xqy将包含您的其余API的已定义自定义端点,在内部您可以调用search:search函数以从MarkLogic调用数据

    模块命名空间终结点=“ urn:overstory:rest:modules:endpoints”;

    声明名称空间rest =“ http://marklogic.com/appservices/rest”;

    (:--------------------------------------------- -------------------------:)

    将私有变量$ endpoints声明为element(rest:options):=              

         <request uri="^/getcontent$" endpoint="<xqy file" user-params="allow">
            <http method="GET"/>
        </request>
    

希望这会有所帮助