Swift
С помощью Swift API (API на базе OpenStack Object Storage API) вы можете работать с ресурсами объектного хранилища:
- просматриват ь информацию о количестве и объеме контейнеров и объектов в рамках аккаунта;
- создавать и удалять контейнеры;
- управлять лимитами контейнеров;
- загружать, просматривать, копировать, перемещать, скачивать и удалять объекты в контейнерах.
Для доступа к Swift API у пользователя должна быть роль с доступом к проекту в объектном хранилище, подробнее в инструкции документации Управлять доступом в объектном хранилище.
Авторизация
Авторизация в Swift API происходит с помощью X-Auth-Token (scope: project), который передается в каждом запросе в заголовке X-Auth-Token
.
Адрес (URL) можно посмотреть в списке URL.
Пример запроса для просмотра списка контейнеров в проекте аккаунта:
curl -i \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>'
Укажите:
<x_auth_token>
— токен X-Auth-Token (scope: project);<swift_domain>
— домен Swift API в пуле, в котором находится объектное хранилище;<project_id>
— идентификатор проекта. Посмотреть идентификатор можно в панели управления в разделе Объектное хранилище → меню проектов → Управление проектами. Идентификатор указан под названием проекта.
Хранилище
Получить информацию о хранилище
Возвращает метаданные с информацией о количестве и объеме хранения контейнеров и объектов.
Пример запроса
curl -i \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 204.
HTTP/1.1 204 No Content
Content-Length: 0
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: 00000
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
X-Account-Meta-<...>: anyheader
X-Openstack-Requiest-Id: 0009ec57-2681-4b48-9105-71c57016edc6
X-Trans-Id: 0009ec57-2681-4b48-9105-71c57016edc6
Параметры ответа
Получить информацию о хранилище и список контейнеров
Возвращает информацию о хранилище и список контейнеров.
Один запрос выводит список, который может содержать до 10 000 контейнеров. Если контейнеров больше, используйте дополнительные запросы с query-параметром marker
.
Чтобы получить дополнительную информацию о контейнерах (размер, дату обновления и т. д.), используйте query-параметр ?format=json
.
Пример запроса
curl \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>'
Пример ответа
container1
container2
container3
Управлять метаданными хранилища
Устанавливает, заменяет или удаляет метаданные, переданные в заголовке из запроса.
Заголовки запроса
Пример запроса
curl -i -XPOST \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'X-Account-Meta-<...>: anyheader' \
'https://<swift_domain>/v1/<project_id>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 204.
Контейнеры
Получить метаданные контейнера
Выводит метаданные контейнера, включая количество объектов, объем хранения (в байтах) и заголовки контейнера.
Пример запроса
curl -i \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>/<container_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 204.
Получить список объектов и метаданных контейнера
Возвращает метаданные контейнера и выводит список объектов.
Один запрос выводит список, который может содержать до 10 000 объектов. Если объектов больше, используйте дополнительные запросы с query-параметрами marker
и limit
.
Пример запроса
curl -i \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>/<container_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 200 или 204.
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/plain
X-Container-Bytes-Used: 0
X-Container-Meta-Quota-Bytes: 52428800
X-Container-Meta-Quota-Count: 1000
X-Container-Meta-Type: public
X-Container-Object-Count: 1
X-Container-Storage-Policy-Index: 0
X-Container-Storage-Policy-Name: Policy-0
X-Openstack-Request-Id: 585ec880-d654-485f-949e-c0dc24926d00
X-Storage-Policy: Policy-0
X-Timestamp: 1688648194.11923
X-Trans-Id: 585ec880-d654-485f-949e-c0dc24926d00
X-Versions-Enabled: true
Date: Thu, 13 Jul 2023 15:13:53 GMT
Content-Length: 120
Object1
Object2
Object3
Параметры ответа
Создать контейнер
Создает контейнер с параметрами, указанными в запросе.
Заголовки запроса
Пример запроса
curl -i -XPUT \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'X-Container-Meta-Type: public' \
-H 'X-Container-Meta-<...>: anyheader' \
'https://<swift_domain>/v1/<project_id>/<container_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 201.
HTTP/1.1 201 Created
Content-Length: 0
Content-Type: text/html
X-Openstack-Requiest-Id: 0009ec57-2681-4b48-9105-71c57016edc6
X-Trans-Id: 0009ec57-2681-4b48-9105-71c57016edc6
Управлять метаданными контейнера
Устанавливает, заменяет или удаляет метаданные, переданные в заголовке из запроса.
Заголовки запроса
Пример запроса
Изменение типа контейнера:
curl -i -XPOST \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'X-Container-Meta-Type: private' \
-H 'X-Versions-Enabled: true' \
'https://<swift_domain>/v1/<project_id>/<container_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 204.
Удалить контейнер
Удаляет контейнер в хранилище. Перед удалением контейнера удалите в нем все объекты.
Пример запроса
curl -i -XDELETE \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>/<container_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 204.
HTTP/1.1 204 No Content
Content-Length: 0
Content-Type: Text/html; charset=UTF-8
Объекты
Получить объект
Выведет тело и заголовки объекта.
Пример запроса
curl -i \
-H 'X-Auth-Token: <x_auth_token>' \
'https://<swift_domain>/v1/<project_id>/<container_name>/<object_name>'
Пример ответа
В случае успеха запрос возвращает ответ с кодом 200.
Загрузить объект
Загружает объект в контейнер. Такая загрузка используется для объектов размером до 100 МБ. Для объектов большего размера используйте сегментированную загрузку.
При использовании заголовка X-Copy-From
можно загрузить в контейнер скопированный объект. Объект копируется вместе с заголовком X-Delete-At
независимо от того, куда был установлен заголовок (на объект или контейнер).
Заголовки запроса
Пример запроса
Загрузка объекта:
curl -i -XPUT \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'X-Delete-After: 180' \
-d "<object-body>" \
'https://<swift_domain>/v1/<project_id>/<container_name>/<object_name>'
Укажите:
<object-body>
— тело объекта;<object_name>
— имя, которое будет присвоено объекту.
Копирование объекта:
curl -i -XPUT \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'X-Copy-From: /<container_name_1>/<object_name_1>' \
'https://<swift_domain>/v1/<project_id>/<container_name_2>/<object_name_2>'
Укажите:
<container_name_2>
— контейнер, в который скопируется объект;<object_name_2>
— имя, с которым скопируется объект;<container_name_1>
— контейнер, в котором находится копируемый объект;<object_name_1>
— объект, который нужно скопировать.
Пример ответа
При загрузке объекта в случае успеха запрос возвращает ответ с кодом 201.
HTTP/1.1 201 Created
Content-Length: 0
Content-Type: text/html
Etag: b65ad34618e410d9d8bf624d61f8a980
Date: Thu, 15 Mar 2023 07:31:32 GMT
При копировании объекта в случае успеха запрос возвращает ответ с кодом 201.
HTTP/1.1 201
Created etag: 0f343b0931126a20f133d67c2b018a3b
X-Copied-From: container_name_1/object_name_1
X-Copied-From-Last-Modified: Mon, 27 May 2013 13:16:49 GMT
Last-Modified: Tue, 28 May 2018 06:30:51 GMT
Удалить несколько объектов
Удалит несколько объектов одновременно, в том числе объекты из разных контейнеров. Объекты удаляются последовательно.
Пример запроса
Удаление объектов из разных контейнеров:
curl -i -XPOST \
-H 'X-Auth-Token: <x_auth_token>' \
-H 'Content-Type: text/plain' \
-d $'<container_name_1>/<object_name_1>\n<container_name_2>/<object_name_2>' \
'https://<swift_domain>/v1/<project_id>?bulk-delete=true&format=json'
Укажите:
<container_name_1>/<object_name_1>
— путь до объекта в первом контейнере;<container_name_2>/<object_name_2>
— путь до объекта во втором контейнере;\n
— перенос строки, необходимо указывать между объектами.
Пример ответа
В случае успеха запрос возвращает ответ с кодом 200.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 08 Jun 2018 13:37:53 GMT
Content-Length: 101
{'Number Not Found':0,'Response Status':'200 OK','Response Body':'','Errors':null,'Number Deleted':2}
Управлять HTTP-заголовками и метаданными объектов
Устанавливает значения для указанных в запросе пользовательских и HTTP-заголовков. Заголовки используются для управления кэшированием на стороне клиента и промежуточных прокси-серверах.
Поддерживаемые HTTP-заголовки:
Cache-Control
Content-Encoding
Content-Type
Content-Disposition
Link