API

Все настройки SHM и всё управление системой осуществляется с помощью вызовов API.

Web интерфейс администратора и кабинет клиента работают на основе API.

HTTP Методы

SHM API использует стандартные методы протокола HTTP:

Метод Назначение
GET Чтение данных
POST Изменение данных
PUT Добавление данных
DELETE Удаление данных

SHM API v1 отвечает в следующем формате:

{
    data: [
        {
            item: 1
        },
        {
            item: 2
        }
    ],
    items: 2
}

HTTP коды ответов

При работе с SHM API рекомендуется проверять коды ответов HTTP.

200 - УСПЕХ для GET, POST, PUT запросов

201 - УСПЕХ для DELETE запросов (эти запросы не возвращают ответа в теле)

400 - ошибка запроса, неверные или недостающие аргументы

403 - не авторизован, требуется авторизация

404 - объект не найден

5xx - ошибки сервера

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

Аутентификация через Cookies (session_id)

Получаем session_id:

curl -H "Content-Type: application/json" \
     -X POST http://$SERVER/shm/user/auth.cgi \
     -d '{"login": "admin", "password": "admin"}'

пример ответа:

{ "session_id": "3f928c835ff78f836c4066c112b292c5" }

Запрос с использованием cookies (session_id):

curl --cookie "session_id=3f928c835ff78f836c4066c112b292c5" http://$SERVER/shm/v1/user

Basic-аутентификация

curl -u "admin:admin" http://$SERVER/shm/v1/user

Bearer-аутентификация (API-токен)

Для интеграций и внешних сервисов удобнее не использовать логин/пароль пользователя, а выпустить отдельный аккаунт-токен (type: "token"). Токен генерируется на сервере и показывается в открытом виде только один раз - в ответе на создание. Дальше хранится только его sha256-хеш, поэтому восстановить или посмотреть токен повторно нельзя - при утере нужно создать новый.

Создание токена (доступно только администратору):

curl -u "admin:admin" -X PUT \
     -H "Content-Type: application/json" \
     -d '{"user_id": 42, "type": "token"}' \
     http://$SERVER/shm/v1/admin/user/accounts

пример ответа:

{
    "data": [
        {
            "login": "kQ7s...64-символьный токен...9zP2",
            "type": "token",
            "user_id": 42,
            "settings": {}
        }
    ]
}

Значение login из ответа и есть сам токен - сохраните его, повторно он не выдаётся.

Запрос с использованием токена:

curl -H "Authorization: Bearer kQ7s...64-символьный токен...9zP2" http://$SERVER/shm/v1/user

При создании токена можно указать gid в settings - тогда доступ по токену будет ограничен, как у пользователя соответствующей группы администраторов:

curl -u "admin:admin" -X PUT \
     -H "Content-Type: application/json" \
     -d '{"user_id": 42, "type": "token", "settings": {"gid": 2}}' \
     http://$SERVER/shm/v1/admin/user/accounts

Аутентификация через header-ы

curl -H "session-id: 3f928c835ff78f836c4066c112b292c5" http://$SERVER/shm/v1/user
curl -H "login: admin" -H "password: admin" http://$SERVER/shm/v1/user

Аутентификация через Query string

curl http://$SERVER/shm/v1/user?session_id=3f928c835ff78f836c4066c112b292c5

Список ресурсов

Ресурс URL
Услуги /v1/admin/service
Услуги дочерние /v1/admin/service/children
События услуг /v1/admin/service/event
Пользователи /v1/admin/user
Смена пароля пользователя /v1/admin/user/passwd
Платежи пользователя /v1/admin/user/pay
Зачисление платежей /v1/admin/user/payment
Профиль пользователя /v1/admin/user/profile
Услуги пользователя /v1/admin/user/service
Услуги пользователя - списания /v1/admin/user/service/withdraw
Блокировка услуги пользователя /v1/admin/user/service/stop
Список текущих задач для услуги /v1/admin/user/service/spool