Перейти к содержимому

Артефакты и каталог ​

Опубликованные артефакты: список, сведения, содержимое, аннотации, ссылки удержания, поиск, аудит каталога и лента изменений.

Операции этой группы с правилом доступа, правилом повтора, параметрами и ответами. Каждый запрос несёт ключ: Authorization: Bearer <ключ> (см. «Аутентификация»).

Операции ​

Получить аннотации артефакта ​

GET HEAD /api/v1/repositories/{repository}/artifacts/{id}/annotations

Доступ: Право в репозитории: annotation.read; файловые ключи: read · Повтор: Можно повторять (чтение)

Возвращает текущие метки, метаданные и коллекции опубликованного артефакта с их revision. Ревизия 0 означает, что их ни разу не заменяли: метки и метаданные — те, что были заданы при создании загрузки, а коллекции пусты. Передайте ревизию в setAnnotations как expectedRevision.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
labelsмассив stringдане больше 32 элементов
metadataсловарь stringдане больше 32 записей
collectionsмассив stringдане больше 32 элементов

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/annotations" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Заменить аннотации артефакта ​

PUT /api/v1/repositories/{repository}/artifacts/{id}/annotations

Доступ: Право в репозитории: annotation.write, artifact.read; файловые ключи: read, write · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)

Заменяет labels, metadata и collections опубликованного артефакта целиком; поле, не указанное в value, становится пустым. expectedRevision должна быть текущей ревизией (0 для первого изменения), иначе 409 revision_mismatch: прочитайте аннотации заново и повторите изменение. Допускается до 32 меток и 32 коллекций (длиной 1–64 символа: буквы, цифры или _.:-) и до 32 записей метаданных (значения до 1024 символов); байты и исходный дескриптор не меняются.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–2147483646
valueobjectда—
value.labelsмассив stringнетне больше 32 элементов
value.metadataсловарь stringнетне больше 32 записей
value.collectionsмассив stringнетне больше 32 элементов

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
labelsмассив stringдане больше 32 элементов
metadataсловарь stringдане больше 32 записей
collectionsмассив stringдане больше 32 элементов

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X PUT "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/annotations" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"value":{}}'

Зарегистрировать артефакт как пакет UPack ​

POST /api/v1/repositories/{repository}/artifacts/{id}/package

Доступ: Право в репозитории: package.publish, artifact.read; файловые ключи: read, write · Повтор: Можно повторять: тот же запрос даёт тот же результат

Открывает опубликованный артефакт как ZIP-архив UPack, читает корневой upack.json (name, необязательный group, версия version по SemVer) и регистрирует для него эту версию пакета; небезопасные или некорректные архивы отклоняются с кодом 400. Версия неизменяема: повторная регистрация того же артефакта возвращает ту же запись, а другой артефакт для существующих группы, имени и версии (сравнение без учёта регистра) — 409 version_exists. После этого версия появляется в listPackages и находится по имени, диапазону и стадии.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Ответ 200

ПолеТипОбязателенПравила
groupstringнет—
namestringнет—
versionstringнет—
artifactIdstring (uuid)нет—
manifestobjectнет—

Ответы: 200, 400, 401, 403, 404, 405, 409, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/package" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Искать артефакты ​

GET HEAD /api/v1/repositories/{repository}/search

Доступ: Право в репозитории: artifact.list; файловые ключи: read · Повтор: Можно повторять (чтение)

Находит опубликованные артефакты по q (подстрока без учёта регистра в имени или в текущем значении метаданных), точной текущей метке label, коллекции collection и точной паре metadataKey/metadataValue (они указываются только вместе); должны совпасть все заданные фильтры. Результаты выдаются страницами по 100 в порядке ID, для каждого — размер, время создания и публикации, текущие метки и стадии продвижения; продолжайте с after, равным next. Метаданные и коллекции не возвращаются: читайте их через getAnnotations.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
qзапросstringнет—
labelзапросstringнет—
collectionзапросstringнет—
afterзапросstringнет—
metadataKeyзапросstringнетпо шаблону ^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$; не длиннее 64 символов; Exact metadata key; requires metadataValue.
metadataValueзапросstringнетне длиннее 1024 символов; Exact case-sensitive value; requires metadataKey. Empty string is allowed.

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 100 элементов
items[].idstring (uuid)да—
items[].namestringда—
items[].sizestringдацелое число десятичными цифрами, передаётся строкой; Размер в байтах, десятичная строка
items[].createdAtstring (date-time)даВремя резервирования загрузки
items[].publishedAtstring (date-time)даможет быть null; Время публикации; null только если оно не записано
items[].labelsмассив stringдане больше 32 элементов; Текущие метки: из аннотации, если её заменяли, иначе из дескриптора загрузки
items[].stagesмассив stringдане больше 16 элементов; каждый элемент: по шаблону ^[a-z0-9][a-z0-9_.-]{0,31}$; Текущие стадии продвижения в порядке байтов
nextstring (uuid)даможет быть null; Последний ID полной страницы; передайте как after

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/search" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Прочитать аудит каталога репозитория ​

GET HEAD /api/v1/repositories/{repository}/audit

Доступ: Право в репозитории: audit.read; файловые ключи: write · Повтор: Можно повторять (чтение)

Возвращает от старых к новым до 100 изменений каталога репозитория после порядкового номера after (по умолчанию 0): публикации, удаления, изменения аннотаций и вложений, регистрации пакетов, изменения путей файлов, внешние ссылки, стадии и продвижения, для каждого — инициатор, действие, артефакт и время. Чтобы читать дальше, передайте последний sequence страницы как after; поля next нет. Скачивания и входы в систему в аудит не попадают; зеркала следуют за listCatalogChanges, где инициаторов нет.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
afterзапросstringнет—

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectнет—
items[].sequencestringнет—
items[].actorstringнет—
items[].actionstringнет—
items[].artifactIdstringнет—
items[].occurredAtstring (date-time)нет—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/audit" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Добавить ссылку на артефакт ​

POST /api/v1/repositories/{repository}/artifacts/{id}/references

Доступ: Право в репозитории: reference.write, artifact.read; файловые ключи: read, write · Повтор: Можно повторять: тот же запрос даёт тот же результат

Фиксирует, что нечто вне Arkvory использует этот артефакт, под выбранным вами key (1–256 символов: буквы, цифры или _.:/-), например под названием развёртывания. Артефакт со ссылкой нельзя удалить, и правила хранения его не удалят, пока не исчезнут все ссылки. Ссылка принадлежит вызывающему; повторное добавление того же ключа ничего не меняет.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Тело запроса (application/json)

ПолеТипОбязателенПравила
keystringдане длиннее 256 символов

Ответы: 204, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/references" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key":"<key>"}'

Удалить ссылку на артефакт ​

DELETE /api/v1/repositories/{repository}/artifacts/{id}/references

Доступ: Право в репозитории: reference.write, artifact.read; файловые ключи: read, write · Повтор: Можно повторять: тот же запрос даёт тот же результат

Удаляет собственную ссылку вызывающего с ключом key из артефакта; ссылки других вызывающих остаются. Удаление отсутствующего ключа тоже завершается успехом.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Тело запроса (application/json)

ПолеТипОбязателенПравила
keystringдане длиннее 256 символов

Ответы: 204, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X DELETE "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/references" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key":"<key>"}'

Перечислить артефакты ​

GET HEAD /api/v1/repositories/{repository}/artifacts

Доступ: Право в репозитории: artifact.list; файловые ключи: read · Повтор: Можно повторять (чтение)

Перечисляет опубликованные артефакты репозитория в порядке ID, по limit на страницу (1–100, по умолчанию 50); продолжайте с after, равным next. next задаётся всякий раз, когда страница заполнена, поэтому последняя страница может оказаться пустой. Каждый элемент содержит дескриптор, заданный при загрузке; текущие метки и метаданные — в getAnnotations.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
afterзапросstring (uuid)нет—
limitзапросintegerнет1–100; по умолчанию 50

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectнет—
items[].idstring (uuid)да—
items[].repositorystringда—
items[].statusstringдаодно из pending, available, cancelled
items[].createdAtstring (date-time)да—
items[].expiresAtstring (date-time)да—
items[].descriptorobjectда—
items[].descriptor.namestringда1–240 символов
items[].descriptor.sizestringдацелое число десятичными цифрами, передаётся строкой
items[].descriptor.sha256stringдаSHA-256: 64 строчные шестнадцатеричные цифры
items[].descriptor.labelsмассив stringнетне больше 32 элементов; каждый элемент: не длиннее 64 символов
items[].descriptor.metadataсловарь stringнетне больше 32 записей
nextstringнетможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Получить артефакт ​

GET HEAD /api/v1/repositories/{repository}/artifacts/{id}

Доступ: Право в репозитории: artifact.read; файловые ключи: read · Повтор: Можно повторять (чтение)

Возвращает опубликованный артефакт: его ID, репозиторий, статус, время создания и дескриптор, заданный при загрузке (имя, размер, SHA-256, исходные метки и метаданные). Незавершённые, отменённые и удалённые артефакты отвечают 404. Чтобы прочитать байты, используйте downloadArtifact.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Ответ 200

ПолеТипОбязателенПравила
idstring (uuid)да—
repositorystringда—
statusstringдаодно из pending, available, cancelled
createdAtstring (date-time)да—
expiresAtstring (date-time)да—
descriptorobjectда—
descriptor.namestringда1–240 символов
descriptor.sizestringдацелое число десятичными цифрами, передаётся строкой
descriptor.sha256stringдаSHA-256: 64 строчные шестнадцатеричные цифры
descriptor.labelsмассив stringнетне больше 32 элементов; каждый элемент: не длиннее 64 символов
descriptor.metadataсловарь stringнетне больше 32 записей

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Удалить артефакт ​

DELETE /api/v1/repositories/{repository}/artifacts/{id}

Доступ: Право в репозитории: artifact.delete · Повтор: Можно повторять: тот же запрос даёт тот же результат

Логически удаляет опубликованный артефакт: он сразу пропадает из списков, поиска и скачиваний, а его байты освобождает физическая очистка репозитория (setCleanup, по умолчанию выключена) по истечении защитного срока. expectedAnnotationRevision должна совпадать с текущей ревизией аннотаций. Ответ — 200 с outcome: deleted, already_deleted, changed (ревизия отличается), not_found или protected со списком blockers, которые не дают удалить артефакт (ссылка, ревизия пути файла, вложение сборки или стадия продвижения). Заранее проверьте через inspectArtifactDeletion.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedAnnotationRevisionintegerда0–2147483647

Ответ 200

ПолеТипОбязателенПравила
idstring (uuid)да—
outcomestringдаодно из deleted, already_deleted, protected, changed, not_eligible, not_found
blockersмассив stringдане больше 4 элементов; без повторов; каждый элемент: одно из reference, asset_history, attachment_history, protected_label, promotion_stage

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X DELETE "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedAnnotationRevision":0}'

Скачать артефакт ​

GET HEAD /api/v1/repositories/{repository}/artifacts/{id}/content

Доступ: Право в репозитории: content.read; файловые ключи: read · Повтор: Можно повторять (чтение)

Передаёт исходные байты потоком с заголовками Content-Length, Content-Disposition (имя артефакта) и сильным ETag ("sha256:<hex>"). Один Range даёт 206 (невыполнимый — 416); If-Range с ETag позволяет безопасно продолжить скачивание, а If-None-Match даёт 304. HEAD возвращает те же заголовки без тела и игнорирует Range. Вместо заголовка Authorization запрос может содержать в параметре token ссылку на скачивание из createDownloadLink; скачивания ждут свободного слота допуска скачиваний на сервере.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—
Rangeзаголовокstringнет—
If-Rangeзаголовокstringнет—
If-None-Matchзаголовокstringнет—
Arkvory-Download-Idзаголовокstringнетпо шаблону ^[A-Za-z0-9_-]{16,64}$; The client own id of one download, the same on every range of it: the queue keys the session by it instead of the client address, answers a waiting request at once with 503 download_queued, and may ask it to yield its place at a range boundary. Without it, a waiting request is held until its turn for a bounded time.
Arkvory-Queue-Ticketзаголовокstringнетне длиннее 80 символов; The last Arkvory-Queue-Ticket the server sent for this download: after a server restart the download takes its old turn. A ticket that is wrong, expired or of another download is ignored.
Arkvory-Download-Classзаголовокstringнетодно из interactive, release, bulk, background; Queue class of the download. Only a class lower than the caller own one applies (people: interactive, services and links: release); an unknown value is 400. The response names the class applied.
tokenзапросstringнетпо шаблону ^dtl_[A-Za-z0-9_-]{43}$; Download link from POST …/artifacts/{id}/links, instead of an Authorization header

Ответы: 200, 206, 304, 400, 401, 403, 404, 409, 416, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/content" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -o file

Прочитать обзор площадок ​

GET HEAD /api/v1/fleet/overview

Доступ: Администратор · Повтор: Можно повторять (чтение)

Оповещения по управляемым площадкам и этой установке, самые серьёзные первыми (critical, warning, info), и связи зеркал между ними. Строится по последним фоновым опросам, не чаще раза в 5 секунд. Источник, по адресу которого не отвечает ни одна управляемая площадка, — external:<origin>; эта установка — self, и связи к ней видны только при заданном ARKVORY_SITE_URL. Отвечает только процесс записи.

Ответ 200

ПолеТипОбязателенПравила
generatedAtstring (date-time)да—
selfobjectда—
self.namestringда—
self.versionstringда—
self.urlstringдаможет быть null
alertsмассив objectда—
alerts[].sitestringда—
alerts[].namestringда—
alerts[].kindstringдаодно из unreachable, certificate, revoked, refused, invalid, stale, not-writable, copies, single-copy, mirror-failing, mirror-lag, updates-failed, version-skew
alerts[].severitystringдаодно из critical, warning, info
alerts[].subjectstringдаможет быть null
alerts[].sincestring (date-time)даможет быть null
linksмассив objectда—
links[].fromstringда—
links[].tostringда—
links[].repositorystringда—
links[].sourceRepositorystringда—
links[].modestringдаодно из mirror, import
links[].lagChangesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
links[].failingbooleanда—
links[].stalebooleanнет—
externalмассив stringда—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/fleet/overview" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Список управляемых площадок ​

GET HEAD /api/v1/fleet/sites

Доступ: Администратор · Повтор: Можно повторять (чтение)

Перечисляет площадки, которыми управляет эта установка (ADR 0077), и что каждая сообщила последней: state (ok или почему не прочитана: unreachable, certificate, revoked, invalid, refused), когда отвечала последний раз и последнюю topology. Площадки опрашиваются в фоне каждые 30 секунд. Ключ площадки не возвращается никогда.

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 256 элементов
items[].idstring (uuid)да—
items[].namestringда—
items[].urlstringда—
items[].fingerprintstringдапо шаблону ^[0-9a-f]{64}$; может быть null
items[].addedBystringда—
items[].addedAtstring (date-time)да—
items[].seenAtstring (date-time)даможет быть null
items[].statestringдаодно из pending, ok, unreachable, certificate, revoked, invalid, refused
items[].errorstringдаможет быть null
items[].topologyobjectдаможет быть null
items[].topology.collectedAtstring (date-time)да—
items[].topology.siteobjectда—
items[].topology.healthobjectда—
items[].topology.replicationobjectдаможет быть null
items[].topology.gatewaysмассив objectдане больше 16 элементов
items[].topology.mirrorsмассив objectдане больше 64 элементов
items[].topology.updatesobjectдаможет быть null
items[].topology.downloadsobjectда—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/fleet/sites" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Подключить площадку ​

POST /api/v1/fleet/sites

Доступ: Администратор · Повтор: Не повторять автоматически

Подключает площадку: управляющая площадка соединяется заново, сертификат должен по-прежнему иметь подтверждённый администратором fingerprint (null для HTTP на loopback), код сопряжения code, созданный на площадке, обменивается на ключ, ключ запечатывается ARKVORY_FLEET_KEY_FILE. До ответа площадка читается один раз. Без файла ключа ответ — 503.

Тело запроса (application/json)

ПолеТипОбязателенПравила
urlstringда—
fingerprintstringдапо шаблону ^[0-9a-f]{64}$; может быть null
codestringдане длиннее 32 символов

Ответ 201

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringда—
urlstringда—
fingerprintstringдапо шаблону ^[0-9a-f]{64}$; может быть null
addedBystringда—
addedAtstring (date-time)да—
seenAtstring (date-time)даможет быть null
statestringдаодно из pending, ok, unreachable, certificate, revoked, invalid, refused
errorstringдаможет быть null
topologyobjectдаможет быть null
topology.collectedAtstring (date-time)да—
topology.siteobjectда—
topology.site.namestringда—
topology.site.versionstringда—
topology.site.schemaintegerдане меньше 0
topology.site.rolestringдаодно из api, reader
topology.healthobjectда—
topology.health.availablebooleanда—
topology.health.writablebooleanда—
topology.health.drainingbooleanда—
topology.replicationobjectдаможет быть null
topology.replication.copiesintegerда0–16
topology.replication.requiredintegerда1–16
topology.replication.singleCopyUntilstring (date-time)даможет быть null
topology.replication.nodestringнетне длиннее 63 символов
topology.replication.profilestringнетодно из ha-2, ha-3
topology.replication.peersмассив objectнетне больше 16 элементов
topology.gatewaysмассив objectдане больше 16 элементов
topology.gateways[].slotintegerдане меньше 0
topology.gateways[].activebooleanда—
topology.gateways[].expiresAtstring (date-time)да—
topology.mirrorsмассив objectдане больше 64 элементов
topology.mirrors[].repositorystringда—
topology.mirrors[].modestringдаодно из mirror, import
topology.mirrors[].upstreamstringда—
topology.mirrors[].sourceRepositorystringда—
topology.mirrors[].phasestringда—
topology.mirrors[].errorCodestringдаможет быть null
topology.mirrors[].checkedAtstring (date-time)даможет быть null
topology.mirrors[].syncedAtstring (date-time)даможет быть null
topology.mirrors[].lagChangesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
topology.mirrors[].copiedArtifactsintegerдане меньше 0
topology.mirrors[].copiedBytesstringдацелое число десятичными цифрами, передаётся строкой
topology.updatesobjectдаможет быть null
topology.updates.currentVersionstringда—
topology.updates.lateststringдаможет быть null
topology.updates.phasestringда—
topology.updates.errorstringдаможет быть null
topology.updates.automaticbooleanда—
topology.updates.heartbeatAtstring (date-time)да—
topology.downloadsobjectда—
topology.downloads.strategystringдаодно из ordered, smallest-first, shared
topology.downloads.sessionsintegerдане меньше 0
topology.downloads.activeintegerдане меньше 0
topology.downloads.waitingintegerдане меньше 0
topology.downloads.oldestWaitSecondsintegerдане меньше 0
topology.downloads.bytesPerSecondintegerдане меньше 0

Ответы: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/fleet/sites" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"<url>","fingerprint":"<fingerprint>","code":"<code>"}'

Прочитать сертификат площадки ​

POST /api/v1/fleet/sites/probe

Доступ: Администратор · Повтор: Можно повторять: тот же запрос даёт тот же результат

Соединяется с адресом и читает сертификат площадки, ничего не отправляя: сравните его fingerprint с тем, что видит администратор площадки, перед сопряжением.

Тело запроса (application/json)

ПолеТипОбязателенПравила
urlstringда—

Ответ 200

ПолеТипОбязателенПравила
urlstringда—
certificateobjectдаможет быть null
certificate.fingerprintstringдапо шаблону ^[0-9a-f]{64}$
certificate.subjectstringда—
certificate.issuerstringда—
certificate.validTostring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/fleet/sites/probe" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"<url>"}'

Забыть площадку ​

DELETE /api/v1/fleet/sites/{id}

Доступ: Администратор · Повтор: Можно повторять: тот же запрос даёт тот же результат

Удаляет площадку и её запечатанный ключ здесь. Отзовите эту управляющую площадку и на самой площадке: до тех пор ключ там действует.

Параметры

ИмяГдеТипОбязателенПравила
idпутьstring (uuid)да—

Ответы: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

Пример

bash
curl -X DELETE "$ARKVORY_URL/api/v1/fleet/sites/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Прочитать каталог площадки ​

GET HEAD /api/v1/fleet/sites/{id}/read

Доступ: Администратор · Повтор: Можно повторять (чтение)

Передаёт одно чтение каталога управляемой площадке и возвращает её ответ без изменений: репозитории, поиск, артефакты, аннотации, стадии, пакеты, страницы и история файлов, занятое место, состояние зеркала. path — маршрут площадки с параметрами запроса. Другие маршруты и байты файлов отклоняются с 400.

Параметры

ИмяГдеТипОбязателенПравила
idпутьstring (uuid)да—
pathзапросstringдапо шаблону ^/api/v1/; не длиннее 2048 символов; A read route of the site with its query, from a fixed list: catalog metadata (repositories, search, artifacts, annotations, stages, packages, file pages and history, storage usage, mirror state), download queue settings and update state. Never file bytes.

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/fleet/sites/$ID/read?path=$PATH" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Изменить настройку площадки ​

POST /api/v1/fleet/sites/{id}/change

Доступ: Администратор · Повтор: Не повторять автоматически

Передаёт одно изменение управляемой площадке и возвращает её ответ без изменений. path — один из маршрутов: /api/v1/system/downloads/settings (настройки очереди скачиваний, отправляется как PUT) или /api/v1/system/updates/requests (запрос обновления, отправляется как POST). Тело уходит на площадку как есть; площадка проверяет ревизию или id запроса, поэтому повтор не применяется дважды. Другие пути отклоняются с 400.

Параметры

ИмяГдеТипОбязателенПравила
idпутьstring (uuid)да—
pathзапросstringдапо шаблону ^/api/v1/; не длиннее 2048 символов; A change route of the site, from a fixed list: PUT /api/v1/system/downloads/settings, POST /api/v1/system/updates/requests.

Тело запроса (application/json)

Ответы: 200, 202, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/fleet/sites/$ID/change?path=$PATH" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Прочитать площадку сейчас ​

POST /api/v1/fleet/sites/{id}/refresh

Доступ: Администратор · Повтор: Можно повторять: тот же запрос даёт тот же результат

Читает площадку сейчас, не дожидаясь следующего круга, и возвращает её с новым состоянием.

Параметры

ИмяГдеТипОбязателенПравила
idпутьstring (uuid)да—

Ответ 200

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringда—
urlstringда—
fingerprintstringдапо шаблону ^[0-9a-f]{64}$; может быть null
addedBystringда—
addedAtstring (date-time)да—
seenAtstring (date-time)даможет быть null
statestringдаодно из pending, ok, unreachable, certificate, revoked, invalid, refused
errorstringдаможет быть null
topologyobjectдаможет быть null
topology.collectedAtstring (date-time)да—
topology.siteobjectда—
topology.site.namestringда—
topology.site.versionstringда—
topology.site.schemaintegerдане меньше 0
topology.site.rolestringдаодно из api, reader
topology.healthobjectда—
topology.health.availablebooleanда—
topology.health.writablebooleanда—
topology.health.drainingbooleanда—
topology.replicationobjectдаможет быть null
topology.replication.copiesintegerда0–16
topology.replication.requiredintegerда1–16
topology.replication.singleCopyUntilstring (date-time)даможет быть null
topology.replication.nodestringнетне длиннее 63 символов
topology.replication.profilestringнетодно из ha-2, ha-3
topology.replication.peersмассив objectнетне больше 16 элементов
topology.gatewaysмассив objectдане больше 16 элементов
topology.gateways[].slotintegerдане меньше 0
topology.gateways[].activebooleanда—
topology.gateways[].expiresAtstring (date-time)да—
topology.mirrorsмассив objectдане больше 64 элементов
topology.mirrors[].repositorystringда—
topology.mirrors[].modestringдаодно из mirror, import
topology.mirrors[].upstreamstringда—
topology.mirrors[].sourceRepositorystringда—
topology.mirrors[].phasestringда—
topology.mirrors[].errorCodestringдаможет быть null
topology.mirrors[].checkedAtstring (date-time)даможет быть null
topology.mirrors[].syncedAtstring (date-time)даможет быть null
topology.mirrors[].lagChangesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
topology.mirrors[].copiedArtifactsintegerдане меньше 0
topology.mirrors[].copiedBytesstringдацелое число десятичными цифрами, передаётся строкой
topology.updatesobjectдаможет быть null
topology.updates.currentVersionstringда—
topology.updates.lateststringдаможет быть null
topology.updates.phasestringда—
topology.updates.errorstringдаможет быть null
topology.updates.automaticbooleanда—
topology.updates.heartbeatAtstring (date-time)да—
topology.downloadsobjectда—
topology.downloads.strategystringдаодно из ordered, smallest-first, shared
topology.downloads.sessionsintegerдане меньше 0
topology.downloads.activeintegerдане меньше 0
topology.downloads.waitingintegerдане меньше 0
topology.downloads.oldestWaitSecondsintegerдане меньше 0
topology.downloads.bytesPerSecondintegerдане меньше 0

Ответы: 200, 400, 401, 403, 404, 405, 409, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/fleet/sites/$ID/refresh" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Создать код сопряжения ​

POST /api/v1/system/fleet/pairings

Доступ: Администратор · Повтор: Не повторять автоматически

Создаёт одноразовый код на десять минут, который администратор управляющей площадки вводит, чтобы управлять этой. Код показывается один раз и хранится только как хеш. Создать его может только глобальный администратор площадки.

Ответ 201

ПолеТипОбязателенПравила
codestringдапо шаблону ^[0-9A-Z]{4}-[0-9A-Z]{4}-[0-9A-Z]{4}$
expiresAtstring (date-time)да—
fingerprintstringдапо шаблону ^[0-9a-f]{64}$; может быть null

Ответы: 201, 400, 401, 403, 404, 405, 409, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/system/fleet/pairings" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Список управляющих площадки ​

GET HEAD /api/v1/system/fleet/controllers

Доступ: Администратор · Повтор: Можно повторять (чтение)

Перечисляет управляющие площадки, которым разрешено управлять этой: имя, кто сопряг, когда и когда ключ использовался последний раз.

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 100 элементов
items[].idstring (uuid)да—
items[].namestringда—
items[].pairedBystringда—
items[].pairedAtstring (date-time)да—
items[].usedAtstring (date-time)даможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/system/fleet/controllers" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Отозвать управляющую площадку ​

DELETE /api/v1/system/fleet/controllers/{id}

Доступ: Администратор · Повтор: Можно повторять: тот же запрос даёт тот же результат

Отзывает управляющую площадку: её ключ сразу перестаёт приниматься. Чтобы снова управлять площадкой, нужно сопряжение с новым кодом.

Параметры

ИмяГдеТипОбязателенПравила
idпутьstring (uuid)да—

Ответы: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

Пример

bash
curl -X DELETE "$ARKVORY_URL/api/v1/system/fleet/controllers/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Сопрячь с управляющей площадкой ​

POST /api/v1/system/fleet/enrollment

Доступ: Любой, без ключа · Повтор: Не повторять автоматически

Один раз обменивает действующий код сопряжения на ключ управления. Управляющая площадка вызывает его по TLS, закреплённому на отпечатке, который подтвердил администратор. Ключ возвращается один раз и открывает только нужные управляющей площадке маршруты.

Тело запроса (application/json)

ПолеТипОбязателенПравила
codestringдане длиннее 32 символов
namestringда1–63 символов

Ответ 201

ПолеТипОбязателенПравила
keystringдапо шаблону ^afk_[A-Za-z0-9_-]{43}$
siteobjectда—
site.namestringда—
site.versionstringда—

Ответы: 201, 400, 403, 405, 413, 415, 503

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/system/fleet/enrollment" \
  -H "Content-Type: application/json" \
  -d '{"code":"<code>","name":"<name>"}'

Получить площадку для единой консоли ​

GET HEAD /api/v1/system/topology

Доступ: Администратор · Повтор: Можно повторять (чтение)

Возвращает установку как одну площадку парка (ADR 0077): имя, версию, схему и роль, доступна ли она и принимает ли запись, копии и узлы HA, шлюзы чтения по их арендам, каждое зеркало и импорт с фазой, последней синхронизацией и lagChanges (ещё не применённые изменения источника), состояние агента обновлений и очередь скачиваний. Читать может только глобальный администратор площадки или сопряжённый с ней управляющий.

Ответ 200

ПолеТипОбязателенПравила
collectedAtstring (date-time)да—
siteobjectда—
site.namestringда—
site.versionstringда—
site.schemaintegerдане меньше 0
site.rolestringдаодно из api, reader
healthobjectда—
health.availablebooleanда—
health.writablebooleanда—
health.drainingbooleanда—
replicationobjectдаможет быть null
replication.copiesintegerда0–16
replication.requiredintegerда1–16
replication.singleCopyUntilstring (date-time)даможет быть null
replication.nodestringнетне длиннее 63 символов
replication.profilestringнетодно из ha-2, ha-3
replication.peersмассив objectнетне больше 16 элементов
replication.peers[].namestringдане длиннее 63 символов
replication.peers[].connectedbooleanда—
replication.peers[].diskstringдане длиннее 24 символов
replication.peers[].completebooleanда—
replication.peers[].witnessbooleanда—
gatewaysмассив objectдане больше 16 элементов
gateways[].slotintegerдане меньше 0
gateways[].activebooleanда—
gateways[].expiresAtstring (date-time)да—
mirrorsмассив objectдане больше 64 элементов
mirrors[].repositorystringда—
mirrors[].modestringдаодно из mirror, import
mirrors[].upstreamstringда—
mirrors[].sourceRepositorystringда—
mirrors[].phasestringда—
mirrors[].errorCodestringдаможет быть null
mirrors[].checkedAtstring (date-time)даможет быть null
mirrors[].syncedAtstring (date-time)даможет быть null
mirrors[].lagChangesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
mirrors[].copiedArtifactsintegerдане меньше 0
mirrors[].copiedBytesstringдацелое число десятичными цифрами, передаётся строкой
updatesobjectдаможет быть null
updates.currentVersionstringда—
updates.lateststringдаможет быть null
updates.phasestringда—
updates.errorstringдаможет быть null
updates.automaticbooleanда—
updates.heartbeatAtstring (date-time)да—
downloadsobjectда—
downloads.strategystringдаодно из ordered, smallest-first, shared
downloads.sessionsintegerдане меньше 0
downloads.activeintegerдане меньше 0
downloads.waitingintegerдане меньше 0
downloads.oldestWaitSecondsintegerдане меньше 0
downloads.bytesPerSecondintegerдане меньше 0

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/system/topology" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Прочитать настройки очереди скачиваний ​

GET HEAD /api/v1/system/downloads/settings

Доступ: Администратор · Повтор: Можно повторять (чтение)

Возвращает изменённые значения (overrides), значения из окружения сервера (defaults) и то, что очередь использует сейчас (effective), а также ревизию, которую нужно передать при изменении. problem объясняет, почему сохранённые настройки не подходят этому серверу; тогда очередь работает на значениях по умолчанию.

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–9007199254740991
overridesobjectда—
overrides.strategystringнетодно из ordered, smallest-first, shared
overrides.sessionsintegerнет1–1024
overrides.reserveintegerнет0–1023
overrides.perPrincipalintegerнет1–1024
overrides.weightsobjectнет—
overrides.weights.interactiveintegerда1–1000
overrides.weights.releaseintegerда1–1000
overrides.weights.bulkintegerда1–1000
overrides.weights.backgroundintegerда1–1000
overrides.sessionMinBytesintegerнет0–9007199254740991
overrides.idleSecondsintegerнет1–3600
overrides.agingMinutesintegerнет0–10080
overrides.preemptbooleanнет—
overrides.rangesPerSessionintegerнет1–64
defaultsobjectда—
defaults.strategystringдаодно из ordered, smallest-first, shared
defaults.sessionsintegerда1–1024
defaults.reserveintegerда0–1023
defaults.perPrincipalintegerда1–1024
defaults.weightsobjectда—
defaults.weights.interactiveintegerда1–1000
defaults.weights.releaseintegerда1–1000
defaults.weights.bulkintegerда1–1000
defaults.weights.backgroundintegerда1–1000
defaults.sessionMinBytesintegerда0–9007199254740991
defaults.idleSecondsintegerда1–3600
defaults.agingMinutesintegerда0–10080
defaults.preemptbooleanда—
defaults.rangesPerSessionintegerда1–64
effectiveobjectда—
effective.strategystringдаодно из ordered, smallest-first, shared
effective.sessionsintegerда1–1024
effective.reserveintegerда0–1023
effective.perPrincipalintegerда1–1024
effective.weightsobjectда—
effective.weights.interactiveintegerда1–1000
effective.weights.releaseintegerда1–1000
effective.weights.bulkintegerда1–1000
effective.weights.backgroundintegerда1–1000
effective.sessionMinBytesintegerда0–9007199254740991
effective.idleSecondsintegerда1–3600
effective.agingMinutesintegerда0–10080
effective.preemptbooleanда—
effective.rangesPerSessionintegerда1–64
admissionstringдаодно из sessions, per-request
updatedAtstring (date-time)даможет быть null
updatedBystringдаможет быть null
actorstringдаможет быть null
problemstringдаможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/system/downloads/settings" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Изменить настройки очереди скачиваний ​

PUT /api/v1/system/downloads/settings

Доступ: Администратор · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)

Сохраняет overrides поверх окружения сервера и применяет их без перезапуска: новые решения сразу следуют им, активные скачивания сохраняют места. Переданные значения заменяют все прежние изменения; {} возвращает к окружению. Настройки, которые не могут работать на этом сервере, отклоняются с 400 и именем поля; устаревшая expectedRevision получает 409. Шлюзы чтения сохраняют своё окружение.

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–9007199254740991
overridesobjectда—
overrides.strategystringнетодно из ordered, smallest-first, shared
overrides.sessionsintegerнет1–1024
overrides.reserveintegerнет0–1023
overrides.perPrincipalintegerнет1–1024
overrides.weightsobjectнет—
overrides.weights.interactiveintegerда1–1000
overrides.weights.releaseintegerда1–1000
overrides.weights.bulkintegerда1–1000
overrides.weights.backgroundintegerда1–1000
overrides.sessionMinBytesintegerнет0–9007199254740991
overrides.idleSecondsintegerнет1–3600
overrides.agingMinutesintegerнет0–10080
overrides.preemptbooleanнет—
overrides.rangesPerSessionintegerнет1–64

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–9007199254740991
overridesobjectда—
overrides.strategystringнетодно из ordered, smallest-first, shared
overrides.sessionsintegerнет1–1024
overrides.reserveintegerнет0–1023
overrides.perPrincipalintegerнет1–1024
overrides.weightsobjectнет—
overrides.weights.interactiveintegerда1–1000
overrides.weights.releaseintegerда1–1000
overrides.weights.bulkintegerда1–1000
overrides.weights.backgroundintegerда1–1000
overrides.sessionMinBytesintegerнет0–9007199254740991
overrides.idleSecondsintegerнет1–3600
overrides.agingMinutesintegerнет0–10080
overrides.preemptbooleanнет—
overrides.rangesPerSessionintegerнет1–64
defaultsobjectда—
defaults.strategystringдаодно из ordered, smallest-first, shared
defaults.sessionsintegerда1–1024
defaults.reserveintegerда0–1023
defaults.perPrincipalintegerда1–1024
defaults.weightsobjectда—
defaults.weights.interactiveintegerда1–1000
defaults.weights.releaseintegerда1–1000
defaults.weights.bulkintegerда1–1000
defaults.weights.backgroundintegerда1–1000
defaults.sessionMinBytesintegerда0–9007199254740991
defaults.idleSecondsintegerда1–3600
defaults.agingMinutesintegerда0–10080
defaults.preemptbooleanда—
defaults.rangesPerSessionintegerда1–64
effectiveobjectда—
effective.strategystringдаодно из ordered, smallest-first, shared
effective.sessionsintegerда1–1024
effective.reserveintegerда0–1023
effective.perPrincipalintegerда1–1024
effective.weightsobjectда—
effective.weights.interactiveintegerда1–1000
effective.weights.releaseintegerда1–1000
effective.weights.bulkintegerда1–1000
effective.weights.backgroundintegerда1–1000
effective.sessionMinBytesintegerда0–9007199254740991
effective.idleSecondsintegerда1–3600
effective.agingMinutesintegerда0–10080
effective.preemptbooleanда—
effective.rangesPerSessionintegerда1–64
admissionstringдаодно из sessions, per-request
updatedAtstring (date-time)даможет быть null
updatedBystringдаможет быть null
actorstringдаможет быть null
problemstringдаможет быть null

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X PUT "$ARKVORY_URL/api/v1/system/downloads/settings" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"overrides":{}}'

Прочитать изменения площадки ​

GET HEAD /api/v1/system/changes

Доступ: Администратор · Повтор: Можно повторять (чтение)

Возвращает, отвечает ли агент площадки (agent), ожидающий запрос и 20 последних с состоянием: pending, applying, done или failed с причиной. Ключей источников здесь нет никогда.

Ответ 200

ПолеТипОбязателенПравила
agentbooleanда—
updatingbooleanда—
blockedstringдаодно из expired, interrupted, key_missing, not_a_mirror, already_attached, mirror_failed, switchover_failed, single_copy_failed, unreadable, digest_mismatch, null; может быть null
pendingobjectдаможет быть null
pending.idstring (uuid)да—
pending.kindstringдаодно из mirror-attach, mirror-key, mirror-detach, cluster-switchover, single-copy
pending.actorstringдане длиннее 200 символов
pending.requestedAtstring (date-time)да—
recentмассив objectдане больше 20 элементов
recent[].idstring (uuid)да—
recent[].digeststringдапо шаблону ^[0-9a-f]{64}$
recent[].kindstringдаодно из mirror-attach, mirror-key, mirror-detach, cluster-switchover, single-copy
recent[].statestringдаодно из pending, applying, done, failed
recent[].errorstringдаодно из expired, interrupted, key_missing, not_a_mirror, already_attached, mirror_failed, switchover_failed, single_copy_failed, unreadable, digest_mismatch, null; может быть null
recent[].actorstringдане длиннее 200 символов
recent[].requestedAtstring (date-time)да—
recent[].finishedAtstring (date-time)даможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/system/changes" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Поставить изменение площадки в очередь ​

POST /api/v1/system/changes

Доступ: Администратор · Повтор: Можно повторять: тот же запрос даёт тот же результат

Ставит одно изменение для агента площадки; он применяет его в течение минуты с проверками и откатом arkvory configure и cluster-*: подключить зеркало или импорт, заменить ключ источника, отключить зеркала, перевести активный узел HA (имя узла вводится дважды) или принять запись с одной копией. id выбирает клиент; повтор не ставит изменение второй раз. key — ключ источника только для mirror-attach и mirror-key: он уходит агенту отдельным файлом 0600 и никогда не возвращается. 202 означает «в очереди», а не «применено».

Тело запроса (application/json)

ПолеТипОбязателенПравила
idstring (uuid)да—
changeobjectда—
change.kindstringдаодно из mirror-attach
change.repositorystringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
change.upstreamstringдане длиннее 255 символов
change.sourceRepositorystringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
change.stagesмассив stringнет1–16 элементов; каждый элемент: по шаблону ^[a-z0-9][a-z0-9_.-]{0,31}$; может быть null
change.repositoriesмассив stringда1–64 элементов; каждый элемент: по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
change.nodestringдапо шаблону ^[A-Za-z0-9][A-Za-z0-9_.-]{0,62}$
change.confirmstringдапо шаблону ^[A-Za-z0-9][A-Za-z0-9_.-]{0,62}$
change.untilstring (date-time)даможет быть null
change.reasonstringда1–200 символов
keystringнет16–4000 символов

Ответ 202

ПолеТипОбязателенПравила
idstring (uuid)да—

Ответы: 202, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/system/changes" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"00000000-0000-4000-8000-000000000000","change":{"kind":"mirror-attach","repository":"<repository>","upstream":"<upstream>","sourceRepository":"<sourceRepository>"}}'

Следить за лентой изменений репозитория ​

GET HEAD /api/v1/repositories/{repository}/changes

Доступ: Право в репозитории: artifact.list; файловые ключи: read · Повтор: Можно повторять (чтение)

Возвращает в порядке фиксации до limit изменений (1–100, по умолчанию 100) после номера after (по умолчанию 0): действие, артефакт и, для путей файлов и стадий, путь или стадию в detail; инициаторы не указываются, поэтому достаточно доступа на чтение списка. head — новейший номер репозитория, next — курсор следующей страницы или null, если страница дошла до head. Зеркало сохраняет последний применённый номер и опрашивает с него.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
afterзапросstringнетцелое число десятичными цифрами, передаётся строкой; Sequence cursor, default 0
limitзапросintegerнет1–100

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectда—
items[].sequencestringдацелое число десятичными цифрами, передаётся строкой
items[].actionstringда—
items[].artifactIdstring (uuid)да—
items[].detailstringдаможет быть null
headstringдацелое число десятичными цифрами, передаётся строкой
nextstringдацелое число десятичными цифрами, передаётся строкой; может быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/changes" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

POST /api/v1/repositories/{repository}/artifacts/{id}/links

Доступ: Право в репозитории: content.read; файловые ключи: read · Повтор: Не повторять автоматически

Возвращает секретный token, url относительно адреса сервера API и expiresAt для downloadArtifact этого одного артефакта без ключа; ttlSeconds задаёт срок жизни (от 60 секунд до суток, по умолчанию час). Токен показывается только в этом ответе и не может быть отозван: он перестаёт действовать, когда истекает срок или удаляется артефакт, а скачивания по нему учитываются в лимитах передачи создателя. У вызывающего может быть 1000 действующих ссылок (507 token_limit), а ссылка на скачивание не может создавать новые ссылки.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Тело запроса (application/json)

ПолеТипОбязателенПравила
ttlSecondsintegerнет60–86400; по умолчанию 3600

Ответ 201

ПолеТипОбязателенПравила
tokenstringдапо шаблону ^dtl_[A-Za-z0-9_-]{43}$
urlstringда—
expiresAtstring (date-time)да—

Ответы: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/links" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Arkvory · ProAnimaStudio