#rest #marklogic #http-delete
#rest #marklogic #http-удалить
Вопрос:
Документация MarkLogic предоставляет информацию об успешном ответе, но не содержит информации о сбойном удалении.
https://docs.marklogic.com/REST/DELETE/v1/documents
Я бы ожидал 404, если документ не существует, 410, если он уже удален, или 403, если у меня нет авторизации на удаление документа.
Из моего ограниченного тестирования кажется, что я получаю 204, если документ не существует, и 400, если я не авторизован.
Ответ №1:
Некоторые разработчики REST утверждают, что запрос на удаление должен быть идемпотентным. Пока документ не существует после завершения операции, операция выполнена успешно.
Тем не менее, последние версии REST API позволяют проверять параметр при запросах на удаление документа. Если для проверки установлено значение «существует», операция должна выдать ошибку, если документ не существует.
Попутно, я не понимаю, как можно отличить случаи 404 и 410, учитывая, что на сервере нет рабочего состояния.
Надеюсь, это поможет,
Комментарии:
1. Правильно. Чтобы получить 404 или 410, мне пришлось бы немного поколдовать. Вместо удаления элемента я бы удалил его содержимое, но оставил ресурс с его исходным URI и выполнил чтение перед удалением. В качестве альтернативы, и я думаю, что это решение, которое я выберу, я на самом деле не буду удалять документ, но вместо этого добавлю его в специальную
deleted
коллекцию, которая не отображается в поиске.
Ответ №2:
Вы могли бы воспользоваться подходом, основанным на API, и создать свои собственные отличные REST API непосредственно на MarkLogic, где вы получаете полный контроль над путем URI, а также кодами ответов и всем остальным, если на то пошло, с помощью XQRS.
declare
%rest:DELETE
%rest:path("/db/{$uri=.*}")
%xdmp:update
function delete-doc($uri as xs:string) {
if(fn:doc-available($uri)) then (
xdmp:document-delete($uri),
<rest:response>
<http:response status="410" message="Gone"/>
</rest:response>
)
else (
<rest:response>
<http:response status="404" message="Not Found"/>
</rest:response>
)
};
Комментарии:
1. я понимаю, о чем вы говорите, но как я могу вернуть 404 not found, если я не знаю, что документ не был найден? я получаю 204 успеха независимо от того, был найден документ или нет. я создаю свой собственный rest api поверх MarkLogic и пытаюсь выяснить все возможные неудачные ответы, которые MarkLogic мог бы отправить обратно, а также как я могу предоставить пользователям моего API точные коды состояния.
2. Подход, который я предлагаю, включает в себя создание вашего собственного REST API, который обслуживается непосредственно с самого сервера MarkLogic с использованием фреймворка XQRS, а также написание компонента среднего уровня, который взаимодействует с MarkLogic через REST API MarkLogic. Такой подход даст вам 100% контроль над MarkLogic, поскольку вы сможете вызывать любую из тысяч функций MarkLogic, а также иметь полный контроль над тем, как выглядят ваши REST API. Платформа XQRS позволяет создавать REST API способом, похожим на очень популярный JAX-RS, предоставляя при этом полную свободу работы с базой данных.
3. Теперь я с вами. Я подумаю над этим, но переписывать готовые REST API MarkLogic из коробки — это не то, что я хочу делать. Особенно в xquery.