Конечная точка Eval: установить базу данных модулей - PullRequest
0 голосов
/ 06 сентября 2018

Я использую конечную точку eval на 8000 для конкретной базы данных контента: /eval?database=xxx

Запрос на оценку импортирует библиотеку из базы данных модулей. Но я не мог найти способ установить его на самой конечной точке.

Я пропустил, как установить базу данных модулей на POST /eval?

1 Ответ

0 голосов
/ 07 сентября 2018

Не существует прямого способа изменения БД модулей через стандартный интерфейс REST (я предполагаю, что вы имеете в виду / v1 / eval, а не / eval). Есть способы сделать это немного сложнее. Сервер приложений на порту 8000 использует XML Rewriter в модулях / MarkLogic / rest-api / 8000-rewriter.xml Это не «волшебство» - его можно изменить, если у вас есть системные разрешения (и если вы берете на себя ответственность за то, что оно может сломаться). Существует переписывающий синтаксис для изменения модулей БД, <set-modules-database>

https://docs.marklogic.com/guide/app-dev/XMLrewriter#id_67813

Вы можете изменить rewriter.xml так, чтобы он отличался от пути, отличного от / v1 / eval, установить для DB модулей постоянную или параметр, см. Пример текущей реализации: Это раздел, который начинается с

<match-path matches="^/(v1|LATEST)/eval">

если вы продублируете это с другим путем поиска (скажем, / v1 / myeval), соблюдая осторожность, чтобы выбрать тот, который не используется, вы можете добавить туда.

Будьте осторожны, он делает то, что ему велено. база данных модулей содержит код самого API REST, поэтому после того, как запрос покидает программу перезаписи, он больше не будет иметь доступа к ЛЮБОМУ коду в стандартной базе данных модулей.

Альтернативы:

  • создайте новый сервер приложений на новом порту и делайте на нем все что угодно.
  • используйте xdmp: eval-in в вашем / v1 / eval для запуска вашего запроса к другой базе данных модулей. https://docs.marklogic.com/xdmp:eval-in
  • Скопируйте код вашего серверного модуля в базу данных модулей по умолчанию.
  • Используйте «необработанную» конечную точку xdbc / eval (не документировано, она использует тот же протокол, что и XCC / XDBC, который можно проверить из общедоступного исходного кода, чтобы сделать вывод о том, как это делается).
  • Включите код модуля, предназначенного для вызова, в ваш код в специальном eval
...