Метод DELETE в rest-api выдает исключение: слишком мало аргументов, ожидал 3, но получил 2

Я создал расширение службы ресурсов в ML 6.0-3.2 следующим образом:

Создал модуль xquery с именем export-customer.xqy с помощью метода delete (другие методы опущены):

    declare function expctrl:delete(
        $context as map:map,
        $params as map:map,
        $input as document-node()?
    ) as document-node()? {
        let $customer := map:get($params, "customer")
        let $_ := exp:customer-node-delete(xs:int($customer))
        return ( xdmp:set-response-code(200, "OK"), () )
    };

Устанавливается с помощью следующей команды:

curl --anyauth --user user:pass -X PUT -d@/opt/export-customer.xqy -HContent-Type:application/xquery "http://server1:8020/v1/config/resources/exportCustomer?title=exportCustomer&method=get&method=put&method=post&method=delete&get:customer=xs:string&delete:customer=xs:string"

Вызывается с помощью следующей команды:

curl --anyauth --user user:pass -X DELETE "http://server1:8020/v1/resources/exportCustomer?rs:customer=105"

Результатом этого вызова является следующее:

<rapi:error xmlns:rapi="http://marklogic.com/rest-api"><rapi:status-code>500</rapi:status-code><rapi:status>INTERNAL ERROR</rapi:status><rapi:message-code>XDMP-TOOFEWARGS</rapi:message-code><rapi:message>XDMP-TOOFEWARGS: (err:XPST0017) xdmp:function(fn:QName("http://marklogic.com/rest-api/resource/exportCustomer", "delete"))($context, $resource-params) -- Too few args, expected 3 but got 2.  See the MarkLogic server error log for further detail.</rapi:message></rapi:error>

Трассировка стека приводит к строке 410 модуля resource-model-update.xqy:

        if (empty($tx-ids))
->      then rsrcmodupd:exec-delete-impl($headers,$endpoint-params,$responder)
        else

Я в недоумении относительно того, какой подход предпринять, чтобы даже попытаться отладить это. Это еще не доходит до моего кода.

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Сообщение об ошибке говорит, что функция хочет три параметра, но REST API вызывает ее с двумя параметрами. Это также говорит, чтобы взглянуть на ErrorLog.txt для более подробной информации.

Я вижу, что вы смоделировали объявление своей функции на примере по адресу http://docs.marklogic.com/guide/rest-dev/extensions в документации. Просто предположение, но, возможно, документы не так? Попробуйте удалить параметр $ input из объявления вашей функции. Если вы думаете об этом, почему DELETE включает это?

Другие вопросы по тегам