Облачное хранилище

В панели управления перейдите в раздел Облачное хранилище.

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

Облачное хранилище предоставляет разработчикам возможность интеграции со сторонними приложениями и сайтами. Одним из способов такого взаимодействия является REST API.

REST API  представляет собой программный интерфейс для взаимодействия с облачным хранилищем. С его помощью можно осуществлять следующие операции:

  • получать информацию по текущему аккаунту и по отдельным контейнерам;
  • создавать и удалять контейнеры;
  • загружать и удалять файлы;
  • перемещать файлы из одного контейнера в другой;
  • устанавливать метаданные для контейнеров;
  • и многие другие.

Взаимодействие с API осуществляется посредством стандартных HTTP-запросов.

Что такое REST API

REST API определяет набор функций, к которым можно делать запросы и получать ответы.   Взаимодействие осуществляется по протоколу HTTP, что даёт возможность обращаться к API практически из любого языка программирования.  Хранилище поддерживает OpenStack API, и вы всегда можете воспользоваться соответствующими библиотеками.

Как использовать API

Все методы вызовов API представляют собой HTTP-запросы к URL вида {+}https://xxxxx.selcdn.ru+, содержащие определенные наборы параметров.  Чтобы осуществить вызов к API, вам нужно выбрать в документации нужный метод, сформировать запрос в соответствии с описанием этого метода и выполнить его.  В ответ на запрос вы получите некий результат; все типовые ответы на запросы подробно описаны ниже.
Также в документации описаны типовые ошибки, которые могут иметь место при выполнении запросов.

Функции REST API

Аутентификация

Тип запроса

URI

Описание

GET

{+}https://api.selcdn.ru/auth/v1.0+

возвращает ключ авторизации (токен) для работы с хранилищем по API, который нужно будет передавать во всех последующих запросах

 
Параметры запроса

Параметр

Значение

X-Auth-User

номер учётной записи

X-Auth-Key

пароль для входа в хранилище

 
Пример запроса

$ curl -i {+}https://api.selcdn.ru/auth/v1.0+ -H "X-Auth-User:[имя пользователя]" -H "X-Auth-Key:[пароль]


Пример ответа

HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
X-Storage-Token: ec01a5f65efa70234bba6d86187173d5
X-Content-Type-Options: nosniff
X-Expire-Auth-Token: 76134
X-Auth-Token: ec01a5f65efa70234bba6d86187173d5
X-Storage-Url: {+}https://api.selcdn.ru/v1/SEL_22302+
Date: Wed, 04 May 2016 11:55:32 GMT


Параметры ответа

Параметр

Значение

X-Expire-Auth-Token

срок действия ключа авторизации (сек)

X-Storage-URL

URL для доступа к хранилищу

X-Auth-Token

ключ авторизации

X-Storage-Token

ключ авторизации (совпадает из предыдущим параметром)

 
Возможные ошибки

Код

Описание

403

В авторизации отказано


Также в хранилище поддерживается аутентификация по протоколу v2.0  и  v3.
Пример запроса на авторизацию по v2.0

$ curl -i -X POST {+}https://api.selcdn.ru/v2.0/tokens+ -H 'Content-type: application/json' -d '{"auth": {"passwordCredentials": {"username": "22302", "password": "5JFH6Jk1"}}}'
HTTP/1.1 200 OK
Content-Length: 423
Content-Type: application/json
Date: Thu, 19 May 2016 07:17:08 GMT
 
{"access":{"token":{"id":"49a049462d6943d55b2ccc85abd5fdae","expires":"2016-05-20T13:12:45\n","tenant":{"id":"22302","name":"22302"}},"user":{"id":"22302","name":"22302","roles":[]},"serviceCatalog":[{"endpoints":[{"region":"common","adminURL":"https://api.selcdn.ru/v1/SEL_22302","internalURL":"https://api.selcdn.ru/v1/SEL_22302","publicURL":"https://api.selcdn.ru/v1/SEL_22302"}],"type":"object-store","name":"swift"}]}}


Пример запроса на авторизацию по v3

$ curl -i  {+}https://api.selcdn.ru/v3/auth/tokens+ -XPOST -d '{"auth": { "identity": { "methods": ["password"], "password": { "user": { "id": "43371", "password": "QyjaoXLh"}}}}}'
HTTP/1.1 200 OK
Content-Length: 807
Content-Type: application/json

X-Subject-Token: 614ed749fba45aa218d1ba68c7c83411
Date: Fri, 20 May 2016 12:56:36 GMT

{"token":{"expires_at":"2016-05-21T09:27:53.8459900Z","issued_at":"2016-05-20T15:56:36.8459900Z","methods":["password"],"project":{"domain":{}},"Catalog":[{"endpoints":[{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_43371","region":"RegionOne","interface":"public"},{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_43371","region":"RegionOne","interface":"admin"},{"id":"614ed749fba45aa218d1ba68c7c83411","region_id":"RegionOne","url":"https://api.selcdn.ru/v1/SEL_43371","region":"RegionOne","interface":"internal"}],"type":"object-store","name":"swift","id":""}],"user":{"id":"614ed749fba45aa218d1ba68c7c83411","name":"43371","domain":{"id":"default","name":"Default","links":{}}},"audit_ids":[""]}}

Как видно из приведённого примера, токен передаётся в ответе в заголовке X-Auth-Token.

Временные токены

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

Тип запроса

URI

Описание

GET

{+}https://api.selcdn.ru/v1/temptokens+

возвращает временный токен для доступа к указанному в запросе контейнеру

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации основного пользователя

X-Container

контейнер, для которого нужно сгенерировать временный токен

X-ExpireAfter

срок действия временного токена в секундах


Пример запроса

$ curl -i {+}https://api.selcdn.ru/v1/temptokens+ -H "X-Auth-Token: $token" -H "X-Container: container_name" -H "X-ExpireAfter: $term"

В случае удачного выполнения запроса будет возвращён ответ с кодом 204 No Content. Временный токен будет возвращен в заголовке X-Auth-Token.

Пример ответа

HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
X-Auth-Token: bd1bcd683fc0dfa050fa0ab2185445te
X-Content-Type-Options: nosniff
X-Expire-Auth-Token: 6000
X-Storage-Token:  bd1bcd683fc0dfa050fa0ab2185445te
X-Storage-Url: {+}https://api.selcdn.ru/v1/SEL_+...
Date: Fri, 20 May 2016 13:43:39 GMT

Получение временных токенов

Тип запроса

URI

Действие

GET

{storage_url}/v1/temptokens

 


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации основного опльзователя

X-Container

имя контейнера, который будет доступен с данным токеном

X-ExpireAfter

время действия токена в секундах


Пример запроса

$ curl -i {+}https://api.selcdn.ru/v1/temptokens+ -H "X-Auth-Token: 49a049462d6943d55b2ccc85abd5fdae" -H "X-Container: container1" -H "X-ExpireAfter: 8600"

HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
X-Auth-Token: 6565c8eb14cba25afe290132f08a1d1b
X-Content-Type-Options: nosniff
X-Expire-Auth-Token: 60
X-Storage-Token: 6565c8eb14cba25afe290132f08a1d1b
X-Storage-Url: {+}https://api.selcdn.ru/v1/SEL_43371+
Date: Fri, 20 May 2016 13:02:00 GMT

Автоматическая распаковка архивов в фоновом режиме

Архивы в форматах .tar, .tar.gz, gzip можно автоматически распаковывать после полной загрузки архива в хранилище, в фоновом режиме.  Для этого используется PUT-запрос на адрес контейнера с дополнительным query-параметром extract-archive-v2.

Параметры запроса

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}?extract-archive-v2={archive_type}

распаковывает переданный в теле запроса архив в указанный контейнер


Пример запроса

curl -i -X PUT {storage_url}/{container_name}/?extract-archive-v2=tar.bz2' -H "X-Auth-Token: $toKen" -T "photos.tar.bz2"


Пример ответа

HTTP/1.1 100 Continue
 
HTTP/1.1 201 Created
Access-Control-Expose-Headers: X-Backend-Timestamp, Etag, Last-Modified, X-Object-Manifest, X-Timestamp
Content-Length: 0
Content-Type: text/html
Etag: a1adb438cb26e91228870158a2062ef2
Extract-Id: 6a62579d-9ee2-2a32-26a4-207d5a47af2a

Функции хранилища

Получение информации об аккаунте

Тип запроса

URI

Описание

HEAD

{storage_url}

Возвращает общую информацию об аккаунте: общее количество контейнеров, общее количество объектов, суммарный объём хранимых данных,  суммарный объём скачанных данных.

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

$ curl -I {storage_url} -H "X-Auth-Token:$token"


Пример ответа

HTTP/1.1 204 No Content
Content-Length: 0
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: c5zzs2wa
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
Content-Type: text/plain; charset=utf-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Account-Object-Count, X-Timestamp, X-Account-Meta-Temp-Url-Key, X-Account-Bytes-Used, X-Account-Container-Count

Параметры ответа

Параметр

Значение

X-Account-Bytes-Used

суммарный объём хранимых данных, байт

X-Account-Container-Count

количество контейнеров

X-Account-Object-Count

общее количество хранимых объектов

Получение списка контейнеров

Тип запроса

URI

Описание

GET

{storage_url}

возвращает список контейнеров на текущий момент

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации

 
Параметры ответа 

Параметр

Значение

X-Account-Container-Count

общее количество контейнеров в хранилище

X-Account-Object-Count

общее количество хранимых в контейнерах объектов

X-Transfered-Bytes

общий объём скачанной из хранилища информации, байт

X-Received-Bytes

общий объём загруженной в хранилище информации, байт


Пример запроса

$ curl -i -X GET '{storage_url}?format=json' -H "X-Auth-Token:$token"


Пример ответа

HTTP/1.1 200 OK
X-Account-Object-Count: 6
X-Timestamp: 1374058535.42927
X-Account-Meta-Temp-Url-Key: c53zs23аa
X-Account-Bytes-Used: 484474
X-Account-Container-Count: 3
Content-Type: application/json; charset=utf-8
Accept-Ranges: bytes
Content-Length: 300
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Account-Object-Count, X-Timestamp, X-Account-Meta-Temp-Url-Key, X-Account-Bytes-Used, X-Account-Container-Count

[{"count": 1, "name": "test2", "rx_bytes": 363, "tx_bytes": 1006, "type": "public", "bytes": 363}, {"count": 1, "name": "upload", "rx_bytes": 0, "tx_bytes": 0, "type": "private", "bytes": 363}, {"count": 4, "name": "yellow", "rx_bytes": 484666, "tx_bytes": 264846, "type": "public", "bytes": 483748}]

Максимальное количество контейнеров, о которых можно получить информацию в одном запросе, составляет 10 000. Если контейнеров больше, потребуются дополнительные запросы с параметром marker.

Создание нового контейнера

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}

Создаёт новый контейнер

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Type

тип контейнера: публичный (public) или приватный (private)

X-Container-Meta-Some

метаданные контейнера


Пример запроса

$ curl -i -XPUT {storage_url}/{container_name} -H "X-Auth-Token: $token" -H "X-Container-Meta-Type: public"


Пример ответа

HTTP/1.1 201 Created
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: 
Expires: 0
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate

Получение информации о контейнере

Тип запроса

URI

Описание

HEAD

{storage_url}/{container_name}

Возвращает информацию о контейнере

 
Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

$ curl -I {storage_url}/{container_name} -H "X-Auth-Token: $token"


Пример ответа

HTTP/1.1 200 OK
Content-Length: 113
X-Backend-Timestamp: 1445521364.51371
X-Container-Object-Count: 8
Accept-Ranges: bytes
X-Backend-Put-Timestamp: 1445521637.35495
X-Storage-Policy: Policy-0
X-Container-Bytes-Used: 2455570
X-Backend-Delete-Timestamp: 0000000000.00000
X-Container-Meta-Type: gallery
X-Timestamp: 1445521364.51371
X-Backend-Storage-Policy-Index: 0
Content-Type: text/plain; charset=utf-8
X-Backend-Status-Changed-At: 1445521364.56786
X-Container-Domains:
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Backend-Timestamp, X-Container-Object-Count, X-Backend-Put-Timestamp, X-Storage-Policy, X-Container-Bytes-Used, X-Backend-Delete-Timestamp, X-Container-Meta-Type, X-Timestamp, X-Backend-Storage-Policy-Index, X-Backend-Status-Changed-At, X-Container-Domains


Параметры ответа

Параметр

Значение

X-Container-Object-Count

количество объектов в контейнере

X-Container-Bytes-Used

общий объём всех хранимых объектов в байтах

X-Container-Meta-Type

тип контейнера (приличный или приватный)

X-Container-Meta-Some

метаданные контейнера

X-Container-Domains

привязанные к контейнеру домены

X-Transfered-Bytes

общий объём скачанной из контейнера информации, байт

X-Received-Bytes

общий объём загруженной в контейнер информации, байт

Изменение метаданных контейнера 

Тип запроса

URI

Описание

POST

{storage_url}/{container_name}

изменяет метаданные контейнера

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Type

тип контейнера: публичный (public) или приватный (private)

X-Container-Meta-Some

метаданные контейнера


Пример запроса

curl -i -XPOST {storage_url}/{container_name} -H "X-Auth-Token: $token"  -H "X-Container-Meta-Type: private" -H "X-Container-Meta-Some: any text"


Пример ответа

HTTP/1.1 204 No Content
content-length: 0
content-type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers:

Если какие-то метаданные требуется удалить, их можно указать в качестве значения заголовка X-Remove-Container-Meta-Some:

Пример запроса

curl -i -XPOST {storage_url}/{container_name} -H "X-Auth-Token: $token"  -H "X-Container-Meta-Type: private" -H "X-Remove-Container-Meta-Some: any text"


Коды ошибок

Код

Описание

404

Запрашиваемого контейнера не существует

Удаление контейнера

Прежде чем удалить контейнер, удалите из него все файлы. Если в контейнере имеется хотя бы один файл, операция удаления невозможна.

Тип запроса

URI

Описание

DELETE

{storage_url}/{container_name}

удаляет указанный в запросе контейнер


Пример запроса

$ curl -i {storage_url}/new/ -X DELETE -H "X-Auth-Token:$token"


Пример ответа

HTTP/1.1 204 No Content
content-length: 0
content-type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers:


Коды ошибок

Код

Описание

404

запрашиваемого контейнера не существует

409

контейнер не пуст

Создание галереи изображений

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}

активирует для указанного контейнера функцию просмотра изображений в виде галереи

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Type

gallery


Пример запроса

curl -i -XPUT {storage_url}/{container_name} -H "X-Auth-Token: $token" -H "X-Container-Meta-Type: gallery"


Пример ответа

HTTP/1.1 202 Accepted
Content-Length: 76
Content-Type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers:

Получение списка файлов в контейнере

Тип запроса

URI

Описание

GET

{storage_url}/{container_name}

возвращает список файлов, помещённых в указанный контейнер

Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

 
В запросе также могут содержаться дополнительные query-параметры:

  • limit - устанавливает максимальное количество объектов в списке (может принимать значения от 1 до 10000);
  • marker - делать выборку начиная с указанного объекта;
  • prefix - включает в список объекты, у которых имена начинаются с указанного префикса;
  • path - возвращает список объектов в отдельной виртуальной папке;
  • delimiter - вернуть объекты до указанного символа разделителя в имени;
  • format - задаёт формат списка (json или xml).


Пример запроса

curl -i {storage_url}/{container_name}/?format=json  -H "X-Auth-Token: $toKen"


Пример ответа

HTTP/1.1 200 OK
X-Container-Object-Count: 3
Accept-Ranges: bytes
X-Container-Meta-Type: gallery
X-Timestamp: 1395042799.81374
X-Container-Bytes-Used: 925740
Content-Type: application/json; charset=utf-8
X-Container-Domains:
Content-Length: 559
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Container-Object-Count, X-Container-Meta-Type, X-Timestamp, X-Container-Bytes-Used, X-Container-Domains

Загрузка файла из контейнера

Тип запроса

URI

Описание

GET

{storage_url}/{container}/{file}

загружает на локальную машину указанный файл


Пример запроса

curl -O {storage_url}/images/image1.png

Заголовок X-Auth-Token обязателен при загрузке файлов из приавтного контейнера; с публичными контейнерами его можно не использовать.
В запрос можно включать стандартные HTTP-заголовки, описанные в RFC2616:

  • If-Match;
  • If-None-Match;
  • If-Modified-Since;
  • If-Unmodified-Since.

Загрузка файла в контейнер

Тип запроса

URI

Описание

PUT

{storage_url}/{container}/{file}

загружает файл в указанный контейнер

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Delete-At

время хранения файла (в формате Unix Timestamp)

X-Delete-After

время (в секундах), по истечении которого файл будет удалён

Etag

идентификатор Etag

X-Object-Meta-*

метаданные загружаемого объекта


Пример запроса

$ curl -i -XPUT {storage_url}/new_container/new_object \    -H "X-Auth-Token: $ \    -H "X-Delete-After: 100" \    -T "./example.gz"


Пример ответа

> HTTP/1.1 100 Continue > HTTP/1.1 201 Created > etag: 0f343b0931126a20f133d67c2b018a3b > Last-Modified: Wed, 29 Oct 2014 12:24:37 GMT

Установка срока хранения для файлов

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

$ curl -i -XPOST {storage_url}/{container_name} \        -H "X-Auth-Token: 285a05936fe0817beac78e84ad2c5f12" \        -H "X-Container-Meta-Default-Delete-After: 1209600"

В приведённом примере мы указываем, что все, загружаемые в контейнер файлы будут храниться 1209600 секунд, т.е. 14 дней.  По истечении этого срока они будут автоматически удаляться.

Распаковка архивов

Архивы в форматах .tar, .tar.gz, gzip можно автоматически распаковывать после загрузки в хранилище.  Для этого используется PUT-запрос на адрес контейнера с дополнительным query-параметром extract-archive.


Параметры запроса

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}?extract-archive={archive_type}

распаковывает переданный в теле запроса архив в указанный контейнер


Пример запроса

curl -i -X PUT {storage_url}/{container_name}/?extract-archive=tar.bz2'        -H "X-Auth-Token: $toKen" -T "photos.tar.bz2"


Пример ответа

{"Response Status": "201 Created", "Response Body": "", "Errors": [], "Number Files Created": 1237}

Параметр

Значение

Response Status

статус ответа

Response Body

тело ответа

Errors

коды ошибок

Number Files Created

количество файлов, извлечённых из архива

Установка метаданных файла

Параметры запроса

Параметр

Значение

X-Object-Meta-Some

метаданные, которые требуется задать или поменять


Пример запроса

$ curl -i -XPOST {storage_url}/new_container/new_object  -H 
"X-Auth-Token: "$token"  -H "X-Object-Meta-Some: another"

Копирование файлов в хранилище

В хранилище имеется возможность копировать файлы из одной папки в другую.  Это можно сделать двумя способами.

Способ 1

Тип запроса

URI

Описание

PUT

{storage_url}/{new_location}

создает копию файла, путь к исходному файлу передается в заголовке X-Copy-From

 
Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Copy-From

путь к файлу, который нужно скопировать


Пример запроса

$ сurl -i -X PUT {storage_url}/{container_name}/first_copy -H "X-Auth-Token:$token" -H "X-Copy-From: /{container_name/new_object"

Способ 2

Тип запроса

URI

Описание

COPY

{storage_url}/{container_name}/{file}

создает копию файла по пути, переданному в заголовке Destination

 
Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

Destination

новое имя файла и путь к нему


Пример запроса

$ curl -i -X COPY {storage_url}/{container_name}/{file} \    -H "X-Auth-Token: $token" \    -H "Destination: /new_container/second_copy"


Пример ответа

HTTP/1.1 201 Created etag: 0f343b0931126a20f133d67c2b018a3b X-Copied-From: new_container/new_object X-Copied-From-Last-Modified: Mon, 27 May 2013 13:16:49 GMT Last-Modified: Tue, 28 May 2013 06:30:51 GMT

Удаление файла

Тип запроса

URI

Описание

DELETE

{storage_url}/{container_name}/{file}

удаляет указанный файл

 
Параметры запроса 

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

$ curl -i -X DELETE {storage_url}/{container_name}/{file} -H "X-Auth-Token: $toKeN"


Пример ответа

HTTP/1.1 204 No Content

Создание символической ссылки на файл

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

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}/{link}

создает символическую ссылку на указанный файл

 
Параметры запроса

Параметр

Значение

Content-Type

  • x-storage/symlink - обычная ссылка
  • x-storage/onetime-symlink - одноразовая ссылка
  • x-storage/symlink+secure - обычная ссылка, защищенная паролем
  • x-storage/onetime-symlink+secure - одноразовая ссылка, защищенная паролем

X-Object-Meta-Location

цель ссылки (относительный заквотированный путь к объекту в хранилище, например, /container/path/to%20file)

Content-Length

0

X-Object-Meta-Delete-At

время, до которого ссылка будет действительна (в формате Unix Timestamp)

X-Object-Meta-Link-Key

хэш пароля (для защищенных паролем ссылок)

Content-Disposition

указывает, как именно нужно обрабатывать файл: открывать в браузере (inline)  или загружать на локальную машину (attachment)


Пример запроса

curl -i -XPUT {storage_url}/{container_name}/{link}  -H "X-Auth-Token: $token" -H "Content-Type: x-storage/symlink" -H "X-Object-Meta-Location: /{container_name}/{file}"  -H "X-Object-Meta-Link-Key: b6589fc6ab0dc82cf12099d1c2d40ab994e8410c" -H "Content-Length: 0"


Пример ответа

HTTP/1.1 201 Created etag: d41d8cd98f00b204e9800998ecf8427e Last-Modified: Mon, 27 May 2013 13:34:34 GMT

Создание ссылки для скачивания файлов

С помощью этой функции вы сможете создавать ссылки, по которым ваши файлы (в том числе и из приватных контейнеров)  может скачать любой сторонний пользователь.
Прежде чем генерировать ссылки, нужно установить секретный ключ. Ключ можно устанавливать как на уровне пользователя, так и на уровне контейнера. Секретный ключ, заданный для аккаунта, позволяет создавать ссылки на все файлы во всех контейнерах. Для установки такого глобального ключа следует выполнить авторизованный POST-запрос с заголовком X-Account-Meta-Temp-URL-Key. Если требуется дать доступ на создание ссылок только в одном определенном контейнере, следует отправить на адрес контейнера POST-запрос с заголовком X-Container-Meta-Temp-URL-Key. Здесь нужно иметь в виду, что запрос на установку пользовательского ключа следует выполнять от основного пользователя, подпользователи не имеют прав изменять глобальные настройки аккаунта. Пример запроса установки секретного ключа аккаунта:

$ curl -i -XPOST {storage_url} -H "X-Auth-Token: $token" -H "X-Account-Meta-Temp-URL-Key: $key"

Доступ  к файлам по сгенерированной ссылке смогут получить только пользователи, которым этот ключ известен.
Можно передать список ip-адресов с которых ссылка будет доступна. Это заголовки X-Account-Meta-Temp-URL-Ips и X-Container-Meta-Temp-URL-Ips.
Список необходимо разделять запятыми, без пробелов между адресами:

$ curl -i -XPOST {+}https://xxx.selcdn.ru/container1+ -H "X-Auth-Token: 285a05936fe0817beac78e84ad2c5f12"  -H "X-Container-Meta-Temp-URL-Ips: x.x.x.x,y.y.y.y"


Пример на Python

import hmac from hashlib import sha1 from time import time # данные для генерации ссылки method = "GET"  # метод доступа expires = int(time()) + 60  # срок действия ссылки (60 секунд) path = "/container/dir/file"  # полный путь к файлу в хранилище
link_secret_key = "secret_word"  # секретный ключ # генерация ключа доступа hmac_body = '%s\n%s\n%s' % (method, expires, path) sig = hmac.new(link_secret_key, hmac_body, sha1).hexdigest()  # ключ доступа
print expires, sig

Полученный в результате ключ указывается в ссылке:

{storage_url}/container/dir/file?temp_url_sig=$sig&temp_url_expires=$expires

где:

  • {storage_url} - базовый домен;
  • temp_url_sig - ключ доступа;
  • temp_url_expires - время, до которого действует ссылка (unixtime).

Если к контейнеру прикреплен домен, то его можно указать в ссылке. Имя контейнера при этом указывать не нужно:

{+}https://my.domain/dir/file?temp_url_sig=3f512dfed32111d6e742afc5522076c0621951cc&temp_url_expires=1390914227+

Поддерживается управление заголовком Content-Disposition для отдаваемых по ссылке данных.  Для этого нужно добавить параметр inline без значения, либо filename со значением в виде имени файла:

{storage_url}/container/dir/file?temp_url_sig=3f512dfed32111d6e742afc5522076c0621951cc&temp_url_expires=1390914227&filename=Other+file+name.doc 

Секретный ключ можно изменить, но все сгенерированные ранее ссылки после этого перестанут работать.

Скачивание контейнера или папки в виде zip-архива

Содержимое любого контейнера или папки можно скачать из хранилища в виде zip-архива. Скачивание в виде zip-архива может быть использовано только для публичных контейнеров и для контейнеров-галерей.
Чтобы скачать содержимое контейнера в виде  zip-архива, нужно к соответствующей ссылке добавить query-параметр download-all-as-zip=[имя архива], например, скачать все файлы из контейнера, в том числе файлы в папках и подпапках:

$ wget '{storage_url}/{container_name}/?download-all-as-zip=arch.zip'

Скачивать файлы в виде zip-архива могут и неавторизованные пользователи (за исключением случаев, если скачиваемый файл или галерея защищены паролем).

Внимание! Файлы в архиве не сжимаются: описываемая функция предназначена для упрощения скачивания, а не для экономии трафика.При выполнении запроса в архив будут включены только первые 10 000 файлов из контейнера или папки.  Все остальные файлы добавлены не будут.

Управление HTTP-заголовками для файлов

Для помещённых в хранилище файлов через API можно устанавливать HTTP-заголовки. С помощью заголовков осуществляется кэширование данных на стороне клиента и промежуточных прокси-серверах, а также задаются параметры обработки кросс-доменных запросов (CORS). Поддерживаются следующие заголовки:

  • Cache-Control;
  • Expires;
  • Origin;
  • Access-Control-Allow-Origin;
  • Access-Control-Max-Age;
  • Access-Control-Allow-Methods;
  • Access-Control-Allow-Credentials;
  • Access-Control-Expose-Headers;
  • Access-Control-Request-Headers;
  • Access-Control-Request-Method;
  • Content-Disposition (только для конечного файла);
  • Strict-Transport-Security (только на уровне контейнера).

Заголовки устанавливаются на уровне контейнера. Значения заголовков устанавливаются в виде метаданных:

$ curl -i -XPOST {+}https://xxx.selcdn.ru/new_container+ \    -H "X-Auth-Token: 285a05936fe0817beac78e84ad2c5f12" \    -H "X-Container-Meta-Access-Control-Request-Method: HEAD, GET" \    -H "X-Container-Meta-Cache-Control: public" \    -H "X-Container-Meta-Strict-Transport-Security: max-age=31536000; includeSubDomains"

Аналогичным образом (в виде метаданных X-Container-Meta-[header]) устанавливаются значения и для других заголовков.

Создание ссылки для загрузки файла в хранилище (sendmefile)

C помощью функции под кодовым названием sendmefile вы можете создать ссылку, по которой сторонние пользователи (даже не имеющие учётной записи в хранилище) смогут загрузить собственные файлы в ваши контейнеры и папки.  Эта функция может оказаться полезной для решения самых разных задач: загрузка пользовательского контента на сайты, организация обмена файлами между пользователями сайта или приложения, быстрое сохранение резервных копий и т.п.
Чтобы создать ссылку на загрузку файлов, нужно отправить PUT-запрос на адрес {storage_url}/{container_name}/upload.

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}/upload

создаёт ссылку, по которой сторонние пользователи смогут загружать файлы в указанный контейнер

 
Параметры запроса 

Параметр

Значение

Content-Type

Параметры создаваемой ссылки:

  • x-storage/sendmefile+inplace - загрузка только одного файла с указанным именем(имя ссылки является именем, под которым будет сохранен загружаемый файл)
  • x-storage/sendmefile+timepostfix - загрузка файлов с добавлением времени загрузки в имена файлов (с учетом расширения файлов)
  • x-storage/sendmefile+autopostfix - загрузка файлов с добавлением уникального идентификатора к имени (с учетом расширения файлов)
  • x-storage/sendmefile+folderday - загрузка файлов в папку с именем вида yyyy-dd-mm (год и день загрузки)
  • x-storage/sendmefile+folderhour - загрузка файлов в папку с именем вида dd-mm hh:min min (день и час загрузки)
  • x-storage/sendmefile+folderuniq -загрузка каждого файла в отдельную папку

X-Object-Meta-Sendmefile-Disable-Web 

yes/no
включает/отключает веб-интерфейс для загрузки файлов, по умолчанию веб-интерейс включен

X-Object-Meta-Sendmefile-Max-Size

максимальный размер загружаемого файла в байтах

X-Object-Meta-Sendmefile-Allow-Overwrite

yes/no
разрешить перезапись файла, если он уже помещён в хранилище (по умолчанию перезапись запрещена)

X-Object-Meta-Sendmefile-Ignore-Filename

yes/no
переименование файла после загрузки в соответствии с указанными настройками

X-Object-Meta-Sendmefile-Secret

SHA1-хэш пароля (для ссылок, защищенных паролем)

X-Filename

имя, под которым файл будет загружен в хранилище

X-Sendmefile-Session-Id 

идентификатор сессии загрузки


Пример запроса

$ curl -i -XPUT {storage_url}/container/upload  -H "X-Auth-Token: $token"    -H "Content-Type: x-storage/sendmefile"     -H "X-Object-Meta-Sendmefile-Max-Size: 52428800"  -H "X-Object-Meta-Sendmefile-Expire: 14400"    -H "X-Object-Meta-Sendmefile-Secret: 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" -d "Пояснительный текст для страницы загрузки"


Параметры ответа

Параметр

Значение

X-Uploaded-As

имя, под которым файл был загружен в хранилище

Специальные страницы

Облачное хранилище часто используется в качестве площадки для размещения статических сайтов. Для этого варианта использования в API предусмотрено несколько полезных функций. Одной из них является настройка так называемых специальных страниц.  К специальным страница веб-сайтов относятся:

  • индексная страница, отдаваемая в ответ на анонимный GET-запросе на контейнер или папку, помещённую в этот контейнер;
  • страница ошибки (404) - файл, отдаваемые при анонимном GET-запросе к несуществующему объекту;
  • страница со списком файлов, выдаваемый в ответ на анонимный GET-запрос на этот контейнер.

Индексная страница

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}{index_file}

назначает индексный файл для указанного контейнера

 
Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Web-Index

путь к файлу, который будет использоваться в качестве индексного

 
В запросе можно указывать как абсолютный, так и относительный путь к файлу. 

Web-Index

Запрос

Отданный файл

/index.html

GET /container/
GET /container/dir1/

/container/index.html

index.html

GET /container/

/container/index.html

 

GET /container/dir1/dir2/

/container/dir1/dir2/index.html
или (если файла нет)
/container/index.html

 
Пример запроса

Создаем индексный файл

$ echo "<html>custom_index_file</html>" > my_index.html # закачиваем его в хранилище $ curl -i -X PUT {storage_url}/{container_name}/my_index.html \    -H "X-Auth-Token: $token" \    -T "./my_index.html" > HTTP/1.1 100 Continue > HTTP/1.1 201 Created > etag: b302ffc3b75770453e96c1348e30eb93 > Last-Modified: Mon, 27 May 2013 14:42:04 GMT


Задать индексную страницу можно и другим способом, устанавливаем значение Web-Index для контейнера

$ curl -i -XPOST {storage_url}/{container_name} \    -H "X-Auth-Token: 285a05936fe0817beac78e84ad2c5f12" \    -H "X-Container-Meta-Web-Index: /my_index.html" > HTTP/1.1 204 No Content # при анонимном запросе получаем содержимое указанного файла $ curl -i {storage_url}/new_container/ > HTTP/1.1 200 OK > last-modified: Mon, 27 May 2013 14:27:57 GMT > etag: b302ffc3b75770453e96c1348e30eb93 > accept-ranges: bytes > Content-Length: 31 > Content-Type: text/html > access-control-request-method: HEAD, GET > > <html>custom_index_file</html>

Индексная страница 404

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}/{error_file}

Настраивает файл ошибки для указанного контейнера


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Web-404-Redirect

путь к файлу ошибки

В качестве значения заголовка X-Container-Meta-Web-404-Redirect можно указать как файл внутри контейнера, так и внешнюю ссылку.


Примеры

Web-404-Redirect

Запрос

Адрес перенаправления

/404.html

GET /container/nofile
GET /container/dir1/nofile

/container/404.html

404.html

GET /container/nofile

/container/404.html

 

GET /container/dir1/dir2/nofile

/container/dir1/dir2/404.html
или (если файла нет)
/container/dir1/404.html
или
/container/404.html

{+}http://test.test+

GET /container/nofile
GET /container/dir1/nofile

{+}http://test.test+


Чтобы передавать информацию об изначально запрашиваемом файле, можно использовать специальные шаблонные параметры:

  • {container} - имя контейнера;
  • {path} - путь к файлу относительно контейнера.


Пример  запроса

Устанавливаем значение Web-404-Redirect для контейнера: 

$ curl -i -XPOST {storage_url}/{container_name} -H "X-Auth-Token: $token" -H "X-Container-Meta-Web-404-Redirect: /404.html?file={path}" > HTTP/1.1 204 No Content #

При анонимном запросе на не существующий объект получаем редирект на указанный файл.

$ curl -i {storage_url}/{container_name}/non_existing_object > HTTP/1.1 307 Temporary Redirect > Location: {+}http://xxx.selcdn.ru/404.html?file=non_existing_object+

По умолчанию, при отправке страницы ошибки возвращается код 404.  Можно указать и другой код ответа: 200 или 307.

$ curl -i -XPOST {storage_url}/new_container -H "X-Auth-Token: $token" -H "X-Container-Meta-Web-404-Redirect: /404.html?file={path}?{code}"

Вместо {code} следует указать нужный код.

Листинг файлов

Тип запроса

URI

Описание

POST

{storage_url}/{container_name}

включает режим листинга файлов для указанного в запросе контейнера

 
Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Web-Listings

on/off - включить или отключить режим листинга для контейнера

X-Container-Meta-Web-Listings-CSS

ссылка на файл стилей, используется для выводов в HTML-формате (необязательная)

X-Container-Meta-Web-Listings-Sort

тип сортировки листинга, возможные значения:

  • name_asc
  • name_desc
  • date_asc
  • date_desc
  • size_asc
  • size_desc

можно сортировать по имени, дате изменения и размеру. Asc и desc определяет порядок сортировки


Пример запроса

$ curl -i -XPOST {storage_url}/{container_name} \    -H "X-Auth-Token: $token" \    -H "X-Container-Meta-Web-Listings: on" > HTTP/1.1 204 No Content #

Получаем листинг файлов анонимным запросом: 

$ curl -i {storage_url}/{container_name}/ \    -H "X-Web-Mode: listing"


Пример ответа

HTTP/1.1 200 OK > Content-Type: application/json; charset=UTF-8 > X-Container-Object-Count: 4 > > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "{+}http://www.w3.org/TR/html4/loose.dtd+"> > <html> > ... > </html>

Для выводов в HTML-формате можно задавать оформление с помощью заголовка X-Container-Meta-Web-Listings-Css, в качестве значения которого указывается ссылка на файл стилей в контейнере; можно также дать ссылку на внешний файл стилей.

Пример

Web-Listings-CSS

Поведение

my.css или /my.css

будет использоваться файл стилей, находящийся в этом же контейнере

{+}http://my_site/my.css+

будут использоваться файл стилей с внешнего сайта

Устанавливаем значение Web-Listings-CSS для контейнера:

$ curl -i -XPOST {storage_url}/{container_name} \    -H "X-Auth-Token: $token" \    -H "X-Container-Meta-Web-Listings-Css: /my_style.css" > HTTP/1.1 204 No Content 

Установка лимитов

Вы можете ограничить объём размещаемой в хранилище информации как для отдельных контейнеров, так и для учётной записи в целом.

Для отдельного контейнера

Чтобы установить лимиты для контейнера, нужно отправить на адрес этого контейнера POST-запрос и указать в соответствующих заголовках лимит по числу объектов  или по объёму иформации в байтах:

Тип запроса

URI

Описание

POST

{storage_url}/{container}

устанавливает лимиты, значения которых переданы в заголовках X-Container-Meta-Quota-Bytes и X-Container-Meta-Quota-Count


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Meta-Quota-Bytes

максимально допустимый размер хранимых в контейнере данных (в байтах)

X-Container-Meta-Quota-Count

максимально допустимое количество хранимых в контейнере файлов и папок


Пример запроса

$ curl -i -XPOST {storage_url}/{container_name}  -H "X-Auth-Token: $token"   -H "X-Container-Meta-Quota-Bytes: 52428800" -H "X-Container-Meta-Quota-Count: 1000"

Для учётной записи в целом

Тип запроса

URI

Описание

POST

{storage_url}

Устанавливает лимиты, значения которых переданы в заголовках X-Container-Meta-Quota-Bytes и X-Container-Meta-Quota-Count


Пример запроса

$ curl -i -XPOST {storage_url}/{container_name}  -H "X-Auth-Token: $token"   -H "X-Container-Meta-Quota-Bytes: 52428800" -H "X-Container-Meta-Quota-Count: 1000"

Версионирование

Как правило, электронный документ за время своего существования претерпевает многочисленные изменения. Довольно часто возникает необходимость хранить не только последнюю версию документа, но и несколько предыдущих. Для этого в хранилище предусмотрена поддержка версий.
Тип запроса: PUT /{storage_url}/{containe_namer}.

Тип запроса

URI

Описание

PUT

{storage_url}/{container_name}

включает поддержку версий для указанного контейнера, версии будут сохраняться в контейнере, имя которого передано в заголовке X-Versions-Location, контейнер для версий должен быть предварительно создан


Параметры запроса

Параметр

Описание

X-Auth-Token

ключ авторизации

X-Versions-Location

имя контейнера, в котором будут храниться версии


Пример запроса

$ curl -i -X PUT -H "X-Auth-Token: $token" -H "X-Versions-Location: $container" {storage_url}/{container_name}

 

Пример ответа

HTTP/1.1 202 Accepted Content-Length: 76 Content-Type: text/html; charset=UTF-8 Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Expires: 0 Pragma: no-cache Cache-Control: no-cache, no-store, must-revalidate

Отключение версионирования осуществляется путем отправки POST-запроса с заголовком X-Remove-Versions-Location на адрес контейнера. В данном заголовке может быть произвольное содержимое.

Тип запроса: POST /{storage_url}/{container_name}.

Тип запроса

URI

Описание

POST

{storage_url}/{container_name}

выключает поддержку версий для указанного контейнера


Параметры запроса

Параметр

Описание

X-Auth-Token

ключ авторизации

X-Remove-Versions-Location

имя контейнера, в котором будут храниться версии


Пример запроса

$ curl -i -X PUT -H "X-Auth-Token: $token" -H "X-Remove-Versions-Location: x" {storage_url}/{container_name}

Поддержка больших объектов

В хранилище имеются ограничения на размер загружаемого объекта: он не должен превышать 20 ГБ.  Однако вы можете помещать в хранилище объекты практически любого размера, используя технику сегментации.

Существует две техники загрузки больших объектов: динамическая и статическая.

При динамической загрузке объект разбивается на сегменты, после чего создаётся так называемый манифест — пустой файл, содержащий указатель на контейнер, куда загружены все сегменты, в заголовке X-Object-Manifest.

Желательно сначала загружать сегменты, а уже потом — создавать или обновлять манифест: объект в этом случае не будет доступен для скачивания, пока не завершится загрузка всех сегментов.


Пример

Загружаем сегменты:

curl -X PUT -H 'X-Auth-Token: $token' \    {storage_url}/{container_name}/{object_name}/00000001 --data-binary '1' curl -X PUT -H 'X-Auth-Token: $token' \    {storage_url}/{container_name}/{object_name}/00000002 --data-binary '2' curl -X PUT -H 'X-Auth-Token: $token' \    {storage_url}/{container_name}/{object_name}/00000003 --data-binary '3' #

Создаём манифест:

curl -X PUT -H 'X-Auth-Token: $token' \    -H 'X-Object-Manifest: container/myobject/' \    {storage_url}/{container_name}/{object_name} --data-binary '' #

Теперь все сегменты можно скачивать как целостный объект.

curl -H 'X-Auth-Token: $token' \    {storage_url}/{container_name}/{object_name}

При статической загрузке нужно создать статический манифест с указанием путей до сегментов, их контрольной суммы (Etag) и размера. Этот манифест сохраняется в специальном файле.

Пример манифеста

[{"path": "/cont/object",  "etag": "etagoftheobjectsegment",  "size_bytes": 10485760,  }, ...] 

Файл манифеста нужно загрузить в хранилище  PUT-запросом  с query-параметром ?multipart-manifest=put  и заголовком X-Static-Large-Object: True.
Чтобы получить файл манифеста, нужно выполнить GET-запрос с query-параметром ?multipart-manifest=get.
Удалить все сегменты, а затем файл с манифестом можно с помощью DELETE-запроса с query-параметром ?multipart-manifest=delete.

Управление пользователями

В хранилище имеется возможность гибкого разграничения доступа к контейнерам.  Она может оказаться полезной в ситуациях, когда требуется настроить взаимодействие хранилища со сторонними приложениями или просто организовать безопасный обмен файлами между несколькими пользователями.
По умолчанию после регистрации в хранилище вы получаете статус основного пользователя, который имеет доступ ко всем контейнерам и папкам.  Вы можете также создавать дополнительных пользователей, которые будут иметь доступ только к строго определённым объектам. Это можно делать как через графический интерфейс панели управления, так и через API. Особенности управления пользователями через API будут описаны ниже.

Просмотр списка пользователей

Тип запроса

URI

Действие

GET

{storage_url}/v1/users/

выводит на консоль список пользователей в формате json


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

 

Параметры ответа

Параметр

Значение

name

имя пользователя

active

индикатор активности пользователя (true или false)

acl_containers_w

список контейнеров, к которым пользователю открыт доступ для чтения и записи

acl_containers_r

список контейнеров, к котором пользователю открыт доступ для чтения

password_plain

пароль пользователя


Пример запроса

$ curl -i {+}https://api.selcdn.ru/v1/users?format=json+  -H "X-Auth-Token: $token"


Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 580

[{"active": true, "acl_containers_w": [], "password_plain": "5216Kr1", "name": "user1", "acl_containers_r": []}, {"active": true, "acl_containers_w": ["container1", "container2"], "password_plain": "OPEa222oR5", "name": "user2", "acl_containers_r": []}, {"active": true, "acl_containers_w": ["container1", "container2", "container1", "container4", "container5"], "password_plain": "GIoIRFBKe", "name": "user3", "acl_containers_r": []}, {"active": true, "acl_containers_w": ["container1", "container2", "container3"], "password_plain": "poIT5fae", "name": "user6", "acl_containers_r": ["container2"]}]

Создание нового пользователя

Тип запроса: PUT

Тип запроса

URI

Действие

PUT

{storage_url}/v1/users/{user_name}

создаёт пользователя с указанным именем


Параметры запроса

Параметр

Значение

Х-Auth-Key

пароль для нового пользователя

X-User-Active

индикатор активности пользователя (on или оff)

X-User-ACL-Container-R

cписок контейнеров, которые новому пользователю будут доступны только для чтения   

X-User-ACL-Containers-W

список контейнеров которые новому пользователю будут доступны для чтения и записи

X-User-Store-Password

указывает, нужно ли хранить пароль нового пользователя в открытой базе (аналогично опции "Хранить пароль не серверах Selectel" в панели управления). Чтобы сохранить пароль в открытой базе, нужно передать в этом заголовке значение yes


Пример запроса

curl -i -XPUT https:{storage_url}/users/{username} -H "X-Auth-Token: $token" -H "X-Auth-Key: 123456" -H "X-User-ACL-Containers-W: container1, container2, container3" -H "X-User-ACL-Containers-R: container4" -H "X-User-Store-Password: yes" -H "X-User-Active: on"


Пример ответа

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 0


Изменение пароля основного пользователя

Тип запроса

URI

Действие

POST

{storage_url}/v1/users

изменяет пароль основного пользователя


Параметры запроса

Параметр

Значение

X-Auth-Key

пароль пользователя

X-User-Store-Password

указывает, нужно ли хранить пароль нового пользователя в открытой базе (аналогично опции "Хранить пароль не серверах Selectel" в панели управления), чтобы сохранить пароль в открытой базе, нужно передать в этом заголовке значение yes


Пример запроса

curl -i -XPOST https://\{storage_url}/v1/users -H "X-Auth-Token: $token" -H "X-Auth-Key: 123456" -H "X-User-Store-Password: yes"

Удаление пользователя

Тип запроса

URI

Действие

POST

{storage_url}//users/{user_name}

Удаляет указанного пользователя

$ curl -i -XDELETE {+}https://selcdn.ru/users/1+ -H "X-Auth-Token: 285a05936fe0817beac78e84ad2c5f12"

Управление доменами

В хранилище имеется возможность прикрепления к контейнерам доменов. Все операции с доменами можно осуществлять через API.

Получение списка доменов

Тип запроса

URI

Действие

GET

{storage_url}/domains

выводит на консоль список всех доменов, привязанных к контейнерам


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

curl -i {+}https://api.selcdn.ru/domains+ -H "X-Auth-Token:  $token"


Пример ответа

HTTP/1.1 200 OK
Content-Length: 69
Content-Type: text/html
Date: Mon, 16 May 2016 07:36:35 GMT

Base Domains:
77218.selcdn.ru
77218.selcdn.com
Containers Domains:
container1  domain1.ru
container2  domain1.ru


Прикрепление домена

Тип запроса

URI

Действие

POST

{storage_url}/{container_name}

прикрепляет к контейнеру домен, имя которого передано в запросе


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Add-Container-Domains

имя домена, который нужно прикрепить к контейнеру


Пример запроса

$ curl -i {storage_url}/{container_name} -XPOST -H "X-Add-Container-Domains: domain1.ru" -H "X-Auth-Token: $token"

Удаление домена

Тип запроса

URI

Действие

POST

{storage_url}/{container_name}

удаляет домен, имя которого передано в запросе


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Remove-Container-Domains

имя домена, который нужно удалить


Пример запроса

$ curl -i {storage_url}/{container_name} -XPOST -H "X-Remove-Container-Domains: domain1.ru" -H "X-Auth-Token: $token"


Изменение списка доменов, привязанных к контейнеру

Тип запроса

URI

Действие

POST

{storage_url}/{container_name}

заменяет текущий список доменов на переданный в запросе


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Container-Domains

список доменов, разделённых пробелом

 

Пример запроса

$ curl -i https://ххххх.selcdn.ru/{container_name} -H "X-Auth-Token:$token" -XPOST -H "X-Сontainer-Domains: domain1.rudomain2.ru"

В результате выполнения этой команды все домены, прикреплённые к контейнеру, будут заменены на переданные в заголовке X-Container-Domains.

Если к контейнеру прикреплены несколько доменов, и их требуется удалить, в заголовке X-Container-Domains нужно передать цифру 0:

$ curl -i https://ххххх.selcdn.ru/{container_name} -H "X-Auth-Token:$token" -XPOST -H "X-Сontainer-Domains: 0"

Управление пользовательскими SSL-сертификатами

Просмотр списка сертификатов

Тип запроса

URI

Действие

GET

{storage_url}/v1/ssl

Возвращает список сертификатов


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

$ curl -i {+}https://api.selcdn.ru/v1/ssl+ -H "X-Auth-Token:$token" -XGET

Просмотр информации о сертификате

Тип запроса

URI

Действие

GET

/v1/ssl/{cert_name}

возвращает информацию о сертификате


Пример запроса

$ curl -i https://api.selcdn.ru/v1/ssl/\{cert_name} -H "X-Auth-Token:$token" -XGET

Добавление сертификата

Тип запроса

URI

Действие

PUT

https://api.selcdn.ru/v1/ssl/{cert_name}

добавление нового сертификата


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

Имя сертификата ({cert_name}) нужно передавать в формате 001_cert1, где число — логин пользователя, а второй компонент — произвольное имя.  Имена сертификатов не могут дублировать друг друга. Сам сертификат и приватный ключ передаются в теле запроса в виде одного файла.

Пример запроса

$ curl -I {+}https://api.selcdn.ru/v1/ssl/001_cert1+ -H "X-Auth-Token:$token" -XPUT -T ./cert1.pem

Удаление сертификата

Тип запроса

URI

Действие

DELETE

{storage_url}/ssl/{cert_name}

удаляет указанный сертификат


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации


Пример запроса

$ curl -I {+}https://api.selcdn.ru/v1/ssl/001_cert1+ -H "X-Auth-Token:$token" -XDELETE

Сброс кэша CDN

Тип запроса

URI

Действие

PURGE

{storage_url}/cdn

очищает кэш CDN


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

Content-Length

размер тела запроса


В теле запроса нужно перечислить полные адреса страниц (каждый на новой строчке) для которых нужно очистить кэш. В теле запроса передаются адреса страниц, для которых требуется очистить кэш.  В заголовке Content-Length (см. выше) передаётся размер тела запроса.


Пример запроса

$ curl -i -X PURGE {+}https://api.selcdn.ru/v1/cdn+ -H "X-Auth-Token: $token" -d $'https://ххххх.selcdn.com/container1/file1' 

 

Пример ответа

HTTP/1.1 200 OK
Date: Mon, 16 May 2016 09:45:15 GMT
Content-Length: 268
Content-Type: text/plain; charset=utf-8

{"estimatedSeconds": 5, "progressUri": "/ccu/v2/purges/e4561042-1b4a-11e6-9024-f3cf5304c77a", "purgeId": "e4561042-1b4a-11e6-9024-f3cf5304c77a", "supportId": "17PY1463391915374207-348128448", "httpStatus": 201, "detail": "Request accepted.", "pingAfterSeconds": 300}

Внимание! Очистка кэша CDN осуществляется примерно через 5 секунд после выполнения запроса.

Получение логов

Тип запроса

URI

Действие

POST

{storage_url}/logs

создаёт контейнер с именем logs и загружает в него логи за указанный период


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации

X-Start-Time

начало периода в формате Y-m-d H:M:S

X-End-Time

конец периода в формате Y-m-d H:M:S

X-Limit

максимальное количество записей, которые нужно вернуть в запросе


Пример запроса

$ curl -i -XPOST {+}https://api.selcdn.ru/v1/logs+ -H "X-Auth-Token: 49a049462d6943d55b2ccc85abd5fdae" -H "X-Start-Time: 2016-02-02 09:00:00" -H "X-End-Time: 2016-05-02 12:00:00" 

По завершении выборки файл с логами будет сохранён в приватном контейнере logs.

Получение статуса фоновой распаковки архивов

Тип запроса

URI

Действие

GET

{storage_url}/v1/extract-archive/{extract-id}

 


Параметры запроса

Параметр

Значение

X-Auth-Token

ключ авторизации основного пользователя


Пример запроса

$ curl -i {+}https://api.selcdn.ru/v1/extract-archive/+6a62579d-9ee2-2a32-26a4-207d5a47af2a -H "X-Auth-Token: 49a049462d6943d55b2ccc85abd5fdae"
 
HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
X-Auth-Token: 6565c8eb14cba25afe290132f08a1d1b
X-Content-Type-Options: nosniff
X-Expire-Auth-Token: 60
X-Storage-Token: 6565c8eb14cba25afe290132f08a1d1b
X-Storage-Url: {+}https://api.selcdn.ru/v1/SEL_43371+
Date: Fri, 20 May 2016 13:02:00 GMT