Экспорт / Импорт дашборда с помощью API Apache Superset

Для экспорта и импорта дашбордов с помощью API Apache Superset необходимо выполнить несколько шагов. Перед тем, как начать, убедитесь, что у вас есть доступ к Superset и настроены права на выполнение запросов в API.

Инструкция актуальна для версии Apache Superset 3.1.1

Экспорт дашборда через Apache Superset API

Для экспорта дашборда с помощью API необходимо сделать следующие операции:

  1. Зайти в API Swagger и ознакомиться с документацией АПИ. Обычно оно располагается по адресу
    https://your-domain-with-superset.ru/swagger/v1
    или
    http://localhost:8088/swagger/v1
  2. Открыв Swagger вы увидите следующую картинку
  3. Далее необходимо получить access_token и refresh_token
  4. После этого выполняется запрос со списком дашбордов, вычленяется нужный id дашборда
  5. посылается запрос на экспорт дашборда в директорию

Apache Superset curl: Authenticate and get a JWT access and refresh token

Выпуск JWT access token для работы с Apache Superset с помощью curl

Запускаем команду

curl -X POST \
  https://your-domain-superset.ru/api/v1/security/login \
  -H 'Content-Type: application/json' \
  -d '{
    "username": "admin_my_login_123",
    "password": "qwerty123_your_complex_password",
    "provider": "db",
    "refresh": true
  }'

Должны получить ответ от сервера:

{"access_token":"eyJ0eXAiOldksjoxNzExMTgxMDgzLCJqdGkiOiI5YWU0YTddfsgdgfdsgYTJhNi1lY2Q1ZjI1MDggdsfdgdfgoiYWNjZXNzIiwic3ViIjoxLCJuYmYiOjE3MTExODEwODMsfdgsdfgMTk4M30.r0XUxqealOHxTSfKC_1TCBxQSG3FdBjSIYMNQKb_pOo","refresh_token":"eyJ0eXAiOiJKVdsfgfhdgOiJIUzI1NiJ9.eyJmcmVzaCIdfgsdfgthrthtfxMTE4MTA4MywiasdfgdfsgdfsgZDctMmZmNzI5ZDQ1ZjgLCJzdWI4MywiZXhwIjoxNzEzNzczMDgzfQ.TQqRXIJL9qYHg_qU5_VhLQ7SQO1ysa6UaAPCyyNIGuA"}

Access token и refresh token являются ключевыми элементами в механизме аутентификации и авторизации при использовании технологии JWT (JSON Web Token):

  • Access Token: Этот токен предоставляет доступ к защищенным ресурсам или функциональности. Когда пользователь успешно аутентифицирован, ему выдается access token, который затем должен быть предоставлен при каждом запросе к защищенным ресурсам или API. Access token обычно имеет ограниченное время жизни (например, несколько минут или часов), после чего он становится недействительным.
  • Refresh Token: Refresh token используется для обновления или продления срока действия access token без необходимости повторной аутентификации пользователя. Обычно refresh token имеет более длительный срок действия, чем access token. После истечения срока действия access token, клиент может использовать refresh token для получения нового access token. Это позволяет пользователям оставаться аутентифицированными в течение продолжительного времени без необходимости вводить свои учетные данные повторно.

Как получить access_token и refresh_token через Swagger в Apache Superset

Заходим в swagger:

http://localhost:8088/swagger/v1

У вас может быть свой адрес и не обязательно должен быть указан порт 8088.

Далее находим раздел api/v1/security/login и выполняем запрос (как на gif):

Обновление токена JWT access_token с помощью ваш_refresh_token

Запускаем в консоли код:

curl -X POST \
  https://your-domain-superset.ru/api/v1/security/refresh \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ваш_refresh_token'

В качестве ответа мы должны получить новый действующий access_token, с помощью которого мы можем обращаться к API.

Получаем список Дашбордов (из него нужно получить IDs)

Запускаем команду

curl -X GET \
  https://your-domain-superset.ru/api/v1/dashboard/ \
  -H "Authorization: Bearer ваш_access_token"

С токеном это будет выглядеть так:

curl -X GET \
  https://your-domain-superset.ru/api/v1/dashboard/ \
  -H "Authorization: Bearer eyJ0eXAiOldksjoxNzExMTgxMDgzLCJqdGkiOiI5YWU0YTddfsgdgfdsgYTJhNi1lY2Q1ZjI1MDggdsfdgdfgoiYWNjZXNzIiwic3ViIjoxLCJuYmYiOjE3MTExODEwODMsfdgsdfgMTk4M30.r0XUxqealOHxTSfKC_1TCBxQSG3FdBjSIYMNQKb_pOo"

Экспорт дашбордов с помощью Access Token JWT из Superset

Следующая команда сохранит дашборд с ID = 1 в директорию /opt/dashboards_20240323.zip

# Экспорт dashboards ID = 1
sudo curl -X GET "https://your-domain-superset.ru/api/v1/dashboard/export/?q=%5B1%5D" -o /opt/dashboards_20240323.zip -s \
   -H "Authorization: Bearer eyJ0eXAiOldksjoxNzExMTgxMDgzLCJqdGkiOiI5YWU0YTddfsgdgfdsgYTJhNi1lY2Q1ZjI1MDggdsfdgdfgoiYWNjZXNzIiwic3ViIjoxLCJuYmYiOjE3MTExODEwODMsfdgsdfgMTk4M30.r0XUxqealOHxTSfKC_1TCBxQSG3FdBjSIYMNQKb_pOo"

На выходе мы получим zip файл, в котором будут лежать директории со всеми объектами дашборда в формате yaml:

Импорт дашборда через Apache Superset API

Импортировать дашборды из архива zip можно  с помощью команды

# Import dashboards from a file
curl -X 'POST' \
  'https://your-domain-superset.ru/api/v1/dashboard/import/' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'formData=@/opt/dashboard_1_1227.zip;type=application/zip' \
  -F 'overwrite=true' \
  -F 'passwords=' \
  -F 'ssh_tunnel_passwords=' \
  -F 'ssh_tunnel_private_key_passwords=' \
  -F 'ssh_tunnel_private_keys=' \
  -H 'Authorization: Bearer ваш_access_token'

Пояснения по коду для curl:

  1. curl: это утилита командной строки для передачи данных по URL-адресам с использованием различных протоколов. В данном случае, она используется для отправки HTTP запроса.
  2. -X 'POST': опция X указывает метод запроса, в данном случае, POST, который используется для отправки данных на сервер.
  3. 'https://your-domain-superset.ru/api/v1/dashboard/import/': это URL-адрес, куда отправляется запрос. Здесь указан конечный точка API Superset для импорта панелей инструментов.
  4. -H 'accept: application/json': это HTTP заголовок, который сообщает серверу, что клиент (в данном случае curl) принимает ответ в формате JSON.
  5. -H 'Content-Type: multipart/form-data': это HTTP заголовок, указывающий тип контента, который отправляется серверу. multipart/form-data используется для передачи файлов и других данных вместе с запросом.
  6. -F 'formData=@/opt/dashboard_1_1227.zip;type=application/zip': это опция F, которая добавляет данные формы к запросу. В данном случае, она указывает на файл, который будет загружен на сервер. Файл dashboard_1_1227.zip находится по пути /opt/ и имеет MIME-тип application/zip.
  7. -F 'overwrite=true': это также данные формы, указывающие, нужно ли перезаписывать существующие панели инструментов. Здесь установлено значение true, что означает, что существующие панели будут перезаписаны.
  8. -F 'passwords=': это данные формы, которые могут использоваться для указания паролей (если они необходимы для импортируемых панелей инструментов). В данном случае пустое значение указывает на то, что пароли не заданы.
  9. -F 'ssh_tunnel_passwords=', -F 'ssh_tunnel_private_key_passwords=' и -F 'ssh_tunnel_private_keys=': это также данные формы, которые могут использоваться для указания паролей и ключей для SSH туннелей (если они необходимы для импортируемых панелей инструментов). В данном случае пустые значения указывают на то, что данные для SSH туннелей не заданы.
  10. -H 'Authorization: Bearer ваш_access_token': это HTTP заголовок, который используется для аутентификации. Здесь указывается токен доступа (access token), который должен быть предоставлен в заголовке Authorization. Этот токен предположительно является средством аутентификации для доступа к API Superset.

Ручной импорт выгруженных дашбордов в Superset

Если у вас есть архив с выгруженными дашбордами из суперсет через АПИ, то их можно загрузить вручную через интерфейс Apache Superset.

В разделе Dashboards выбрать импорт и выбрать архив:

Ivan Shamaev (Admin)
Работаю с Apache Superset с 2021 года. Веду этот блог, чтобы систематизировать свои знания и поделиться ими с другими специалистами. Подписывайтесь на мой телеграм канал @apache_superset_bi
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x