实际项目中存在多个环境:本机环境、dev环境、一系列的测试环境。如何将配置好Dashboard等快速的在各个环境间进行迁移非常重要。由于Superset并没有提供类似Flyway一样的成熟的配置迁移工具,因此需要通过调用Superset对外提供的import接口配合流水线来完成自动化的要求。接口列表:Supsetset对外提供的接口官网和其他网站并没有提供一个足够具体的样例来说明import接口如何使用。
方式通过网页登录获取到“CSRF_TOKEN”
通过login接口登录获取access_token
curl --location --request POST 'http://localhost:8080/api/v1/security/login'
--header 'Content-Type: application/json'
--data-raw '{
'username': 'admin',
'password': 'admin',
'provider': 'db',
'refresh': true
}'
{
'access_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NDI0NzYzNjMsIm5iZiI6MTY0MjQ3NjM2MywianRpIjoiMDc4MmUyM2QtYjVlMC00NDNhLWEzMDUtNTFhYzRlNzRiZWM0IiwiZXhwIjoxNjQyNDc3MjYzLCJpZGVudGl0eSI6MSwiZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MifQ.PNWc56p8YC9WQi-5oMafSWUbUzO7FFyuf8CYglnrsD0',
'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NDI0NzYzNjMsIm5iZiI6MTY0MjQ3NjM2MywianRpIjoiYmYxZTRmNDEtMTc3NS00YTgzLWJjNzEtMjg2YjY0MGI0NDFlIiwiZXhwIjoxNjQ1MDY4MzYzLCJpZGVudGl0eSI6MSwidHlwZSI6InJlZnJlc2gifQ.F_g2p38IJwTfin1T_TtkTxDzzasEZNGG5h7ULeD6xsQ'
}
curl --location --request GET 'http://localhost:8080/api/v1/security/csrf_token/'
--header 'Authorization: Bearer {{ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NDI0NzYzNjMsIm5iZiI6MTY0MjQ3NjM2MywianRpIjoiMDc4MmUyM2QtYjVlMC00NDNhLWEzMDUtNTFhYzRlNzRiZWM0IiwiZXhwIjoxNjQyNDc3MjYzLCJpZGVudGl0eSI6MSwiZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MifQ.PNWc56p8YC9WQi-5oMafSWUbUzO7FFyuf8CYglnrsD0 }}'
Set-Cookie: session=eyJjc3JmX3Rva2VuIjoiOThkMzA2Zjk1MGM5YTA5M2NlMmY1NjdmZTc2ZGNjYjA1OGZjOTA0MCJ9.YeYzyQ.Xi4OoOavax6wI7XcgYxkit1K1z4; HttpOnly; Path=/; SameSite=Lax
{
'result': 'Ijk4ZDMwNmY5NTBjOWEwOTNjZTJmNTY3ZmU3NmRjY2IwNThmYzkwNDAi.YeYzyQ.0glT53sHp8moFfZROKMRgFzT9lo'
}
方式通过接口获取到CSRF_TOKEN
通过已经登录的session获取到csrf_token
curl --location --request GET 'http://localhost:8080/api/v1/security/csrf_token/'
--header 'Cookie: session=.eJwlz0tuwzAMRdG9aOwBSVOklM0Y4kdokKAB7GRUdO8V0AWci_d-yjHPvL7K7X1-civHPcqt7K5NpKNP8xyjefbamYGJemuSjaIqD7VKOhGFZHckSQYkGmHSQ4Ka2mw6NLBJMBuodIOUGV2cfLmdTCBzWFVjNOYp2lembMWvcx7v1yO_154wAORRqwZLDlDwKlHF2iQEjRluMcGXe758PHOZBbfyufL8v4Tl9w-7k0LF.YeYrVw.As82F6FoggKcW1XNFgmds1s6VaM'
{
'result': 'ImRiMDAxNGE1NTdkNDZlYTA3MGM1NmQ1NmI4ZjIxMDdkZmRjYmRmMGMi.YeYrxg.j04d__2NgOl9CnI4xq5YZc5gtWM'
}
直接请求返回login页面
Set-Cookie: session=eyJjc3JmX3Rva2VuIjoiZGIwMDE0YTU1N2Q0NmVhMDcwYzU2ZDU2YjhmMjEwN2RmZGNiZGYwYyIsImxvY2FsZSI6ImVuIn0.YeYqzw.6BPRmV7HRP37OK6Y-yqwKJL6zbE; HttpOnly; Path=/; SameSite=Lax
通过access_token+session+csrf_token执行导入
import接口两种使用方式?
通过已经登录的session+csrf_token执行导入
curl --location --request POST 'http://localhost:8080/api/v1/dashboard/import/'
--header 'X-CSRFToken: ImRiMDAxNGE1NTdkNDZlYTA3MGM1NmQ1NmI4ZjIxMDdkZmRjYmRmMGMi.YeYrxg.j04d__2NgOl9CnI4xq5YZc5gtWM'
--header 'Cookie: session=.eJwlz0tuwzAMRdG9aOwBSVOklM0Y4kdokKAB7GRUdO8V0AWci_d-yjHPvL7K7X1-civHPcqt7K5NpKNP8xyjefbamYGJemuSjaIqD7VKOhGFZHckSQYkGmHSQ4Ka2mw6NLBJMBuodIOUGV2cfLmdTCBzWFVjNOYp2lembMWvcx7v1yO_154wAORRqwZLDlDwKlHF2iQEjRluMcGXe758PHOZBbfyufL8v4Tl9w-7k0LF.YeYrVw.As82F6FoggKcW1XNFgmds1s6VaM'
--form 'formData=@'/Users/XXX/xxxxx'.json''
项目场景:
执行网页登录,获取以登录的session
curl --location --request POST 'http://localhost:8080/login/'
--header 'Content-Type: application/x-www-form-urlencoded'
--header 'Cookie: session=eyJjc3JmX3Rva2VuIjoiZGIwMDE0YTU1N2Q0NmVhMDcwYzU2ZDU2YjhmMjEwN2RmZGNiZGYwYyIsImxvY2FsZSI6ImVuIn0.YeYqzw.6BPRmV7HRP37OK6Y-yqwKJL6zbE'
--data-urlencode 'csrf_token=ImRiMDAxNGE1NTdkNDZlYTA3MGM1NmQ1NmI4ZjIxMDdkZmRjYmRmMGMi.YeYqzw.vOvnoJrY55MKNgtTkE07tqABLdw'
--data-urlencode 'username=admin'
--data-urlencode 'password=admin'
Set-Cookie: session=.eJwlz0tuwzAMRdG9aOwBSVOklM0Y4kdokKAB7GRUdO8V0AWci_d-yjHPvL7K7X1-civHPcqt7K5NpKNP8xyjefbamYGJemuSjaIqD7VKOhGFZHckSQYkGmHSQ4Ka2mw6NLBJMBuodIOUGV2cfLmdTCBzWFVjNOYp2lembMWvcx7v1yO_154wAORRqwZLDlDwKlHF2iQEjRluMcGXe758PHOZBbfyufL8v4Tl9w-7k0LF.YeYrVw.As82F6FoggKcW1XNFgmds1s6VaM; HttpOnly; Path=/; SameSite=Lax
文章为作者独立观点,不代表股票交易接口观点