MarkLogic:mlcp 需要 XDBC 服务器吗?

MarkLogic: Does mlcp need a XDBC server?

mlcp 是否一定需要 XDBC 服务器,或者它是否也可以与 HTTP 服务器一起使用?

这取决于您使用的 MarkLogic 版本 - 从 MarkLogic 8(当然还有 9)开始,您也可以使用 REST API 实例,无需设置单独的 XDBC应用服务器。您可以在 MarkLogic 8 发行说明中阅读有关这些增强功能的更多信息:https://docs.marklogic.com/8.0/guide/relnotes/chap3#id_46078

文档说明 "REST API instance"。这里特指MarkLogic的RESTAPI创建的'servers'。隐含也是"not modified".

"Under the hood",在 V8 中,所有 "HTTP" 服务器都支持 XCC 协议的 http 1.1 兼容变体(https://docs.marklogic.com/guide/xcc.pdf sec 2.12.1)。但是 HTTP 服务器 "support" 功能也打破了这一点,例如重写器的使用(REST API 大量使用)。 为了部分解决此问题,引入了声明式重写器 ("XML Rewriter"),它允许在处理管道的早期路由请求。 XML 重写器支持 'xdbc passthrough' 语法,如果将其放在文档顶部,它会捕获 XDBC 请求并正确处理它们。

这记录在 https://docs.marklogic.com/guide/app-dev/XMLrewriter 端口 8000 和 新生成的 REST 服务器包括如下内容:

 <match-path any-of="/eval /invoke /spawn /insert">
    <set-error-format>compatible</set-error-format>
    <dispatch xdbc="true">[=10=]</dispatch>
  </match-path>

端口 8002 不支持 xcc。混合 REST、非 REST 应用程序和 xdbc 非常有用,特别是作为端口 8000 上的 'out of the box' bootstrap。正如 grtjn 提到的,不一定推荐这样做。如果有选择,我会避免它并出于多种原因制作单独的服务器。与在同一 server/port 上混合使用 REST 和 "application" HTTP 相同。有很多 'moving parts' 必须恰到好处才能正常工作,如果您不完全了解正在发生的事情,它确实会打开潜在的安全漏洞和意外行为。由于 REST,应用程序 HTTP 和 XDBC 都建立在相同的技术和底层协议 (HTTP 1.1) 之上——错误的或 精心设计的 代码可以创建看起来像是其中任何一种的请求。

-D