我想使用MarkLogic 9.x.x创建一个全新的REST API,但不使用Roxy或Gradle。我想指向一个文件,该文件在基本MarkLogic设置中具有自定义端点的列表,然后将我的自定义逻辑保留在这些模块中。
我已经阅读了REST API文档,并使用CURL创建了一个文档,以便我们可以使用MarkLogic提供的默认API。
任何详细的解释都值得赞赏。
答案 0 :(得分:2)
您已经考虑过使用XQRS吗?您可以使用直观的功能注释轻松地创建自定义REST端点,就像使用JAX-RS或Java Spring REST Services一样。可以安装和使用with或with-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,请按照以下步骤操作
使用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>
希望这会有所帮助