Операции над каталогами
Обзор
Разделы со структурой tree поддерживают вложенные каталоги произвольной глубины. Для них доступны создание каталога, удаление и очистка.
Структура раздела указана в его статье и приходит в поле structure описания разделов. В разделах со структурой flat операции над каталогами не поддерживаются.
Удаление и очистка непустого каталога выполняются двумя запросами. Первый запрос ничего не удаляет: он возвращает ключ подтверждения и объём предстоящей операции. Второй выполняет операцию с этим ключом. Смысл такого порядка описан в разделе Подтверждение операции ключом.
Запросы
| HTTP verb | Endpoint | Описание |
|---|---|---|
|
|
|
|
|
|
|
|
Создание каталога
Создаёт каталог по указанному пути вместе с недостающими промежуточными каталогами.
Особенности
-
Путь указывается с завершающим слешем: именно он отличает создание каталога от заливки файла.
-
Тело запроса отсутствует и игнорируется.
-
Отдельно создавать каталоги для заливки файлов не требуется: метод
PUTпо пути файла создаёт весь путь самостоятельно. Операция нужна там, где каталог должен существовать сам по себе — например, чтобы подготовить структуру заранее.
Удаление каталога
Особенности
-
Без параметра
recursiveудаляется только пустой каталог; непустой возвращает409. -
Корень раздела удалить нельзя:
DELETEпо пути коллекции всегда возвращает405. Чтобы удалить содержимое раздела, используется Очистка каталога. -
Завершающий слеш в пути допускается и означает утверждение «цель обязана быть каталогом»: если по пути окажется файл, возвращается
409, а не удаление. Без слеша тип цели определяется по файловой системе. -
Опустевшие вышестоящие каталоги удаляются автоматически, как и при удалении файла.
Запрос
DELETE /rest/v1/fs/targets/files/certificates/2026 HTTP/1.1
DELETE /rest/v1/fs/targets/files/certificates?recursive=true HTTP/1.1
DELETE /rest/v1/fs/targets/files/certificates?recursive=true&key=493769f214f028c0a415888026352bbf HTTP/1.1
Очистка каталога
Удаляет всё содержимое каталога, оставляя сам каталог существующим.
Подтверждение операции ключом
Рекурсивное удаление и очистка необратимы и за один запрос способны уничтожить содержимое целого раздела. Поэтому они разделены на два зависимых шага.
Первый запрос
Возвращает 428 Precondition Required и ничего не удаляет:
HTTP/1.1 428 Precondition Required
Content-Type: application/json; charset=utf-8
{
"error_code" : 1428,
"error_message" : "Confirmation required",
"confirmation_key" : "493769f214f028c0a415888026352bbf",
"expires_in" : 97,
"entries" : {
"files" : 128,
"directories" : 3,
"bytes" : 41207332,
"truncated" : false
}
}
Поле entries описывает объём предстоящей операции — его следует показать пользователю до подтверждения. Поле expires_in содержит точное число секунд, оставшихся до истечения ключа, и пригодно для отображения таймера.
Второй запрос
Тот же запрос с параметром key. При совпадении ключа операция выполняется и возвращается 204 No Content.
Свойства ключа
-
Ключ вычисляется, а не хранится: сервер не держит выданные ключи в памяти и не накапливает их.
-
Ключ привязан к сессии, разделу, пути, методу и содержимому каталога. Ключ, выданный на удаление, не подойдёт для очистки, а ключ от одного каталога — для другого.
-
Срок действия — от 60 до 120 секунд, точное оставшееся время приходит в
expires_in. -
Если содержимое каталога изменилось между запросами, ключ перестаёт подходить. Это сделано намеренно: подтверждение, полученное на 128 файлов, не должно удалять выросшую за это время тысячу.
Обработка отказа на втором запросе
Второй запрос может вернуть 409 либо снова 428. Оба случая обрабатываются одинаково: следует повторить первый запрос, показать пользователю обновлённый объём и запросить подтверждение заново.
Повторный 428 не является ошибкой: он приходит, в частности, после активации новой конфигурации платформы, которая меняет основу вычисления ключей.
Ограничения объёма
Рекурсивные операции ограничены величинами, приходящими в limits.recursive_delete описания разделов: по умолчанию 10 000 файлов и 10 ГБ.
Пределы упаковки и распаковки архивов задаются отдельно и ниже — см. Скачивание и заливка каталога архивом. Каталог, который нельзя скачать архивом, по-прежнему можно удалить либо очистить: удаление содержимое не читает.
При превышении возвращается 409, и удаление не выполняется вовсе — частичного удаления не происходит. Признак "truncated": true в ответе первого запроса означает, что каталог заведомо превышает границу: такой каталог придётся удалять по частям.
Ограничение защищает и от продолжительной блокировки соединения: операция выполняется синхронно.
См. также
-
Мета-информация (METADATA) — как узнать объём каталога, не начиная операцию.