
# 计算节点API应用示例
本节通过curl 方式调用TICS API，端到端执行分析型作业为例，介绍使用TICS API的基本流程。
1. [获取用户token]
   获取用户的token，因为在后续的请求中需要将token放到请求消息头中作为认证。
   
2. [获取可信节点详情]
   获取调用后续接口参数信息，例如可信节点id。
   
3. [创建连接器]
   创建数据连接器，以MySQL类型为例。
   
4. [创建数据集]
   创建数据集，以MySQL类型为例。
   
5. [发布数据集]
   发布数据集。
   
6. [创建分析型作业]
   创建多方安全计算作业。
   
7. [保存分析型作业]
   保存多方安全计算作业。
   
8. [执行作业]
   执行多方安全计算作业。
   
9. [查询作业结果]
   查询分析作业执行结果。[保存分析型作业]
   
 
#### 准备数据
在调用API之前(分析类型)，您需要准备如下数据。
表1准备数据 
| 数据项        | 名称     | 说明                                                                                                  | 样例                               |
|:---|:---|:---|:---|
| TICS可信节点信息 | 项目ID   | TICS所属的项目ID。                                                                                        | 098593b07680d2a32f62c004a482da10 |
| TICS可信节点信息 | 可信节点ip | 可信节点页面访问IP和端口号，可参考[计算节点所在虚机的IP:Port](https://support.huaweicloud.com/api-tics/tics_05_0007.html)获取。 | 10.1.1.1                         |
| TICS可信节点信息 | 可信节点端口 | 可信节点页面访问IP和端口号，可参考[计算节点所在虚机的IP:Port](https://support.huaweicloud.com/api-tics/tics_05_0007.html)获取。 | 31000                            |
| TICS可信节点信息 | 用户名    | TICS可信节点用户名。                                                                                        | admin                            |
| TICS可信节点信息 | 密码     | 用户密码。                                                                                               | 123456                           |
| MySQL数据库   | IP地址   | 本地的MySQL数据库的IP地址，且该地址允许可信节点所在虚机通过此IP访问。                                                             | *1xx.1.1.1*                      |
| MySQL数据库   | 端口     | MySQL数据库的端口。                                                                                        | 3306                             |
| MySQL数据库   | 驱动文件   | 对应数据库版本的驱动文件。                                                                                       | mysql-driver.jar                 |
| MySQL数据库   | 用户名    | 访问MySQL数据库的用户，该用户拥有MySQL数据库的读、写和删除权限。                                                               | username                         |
| MySQL数据库   | 密码     | 访问MySQL数据库的用户密码。                                                                                    | DB_password                      |
   
 #### 获取用户token
调用[获取token](https://support.huaweicloud.com/api-tics/getToken.html)API获取token。
1. 调用其他API前，需要获取token，并设置成环境变量。
   ```
   curl -k -v POST 'https://10.1.1.1:31000/v1/agent/user/token'
   -H 'Content-Type: application/json'
   -d '{"user_name":"admin","password":"******"}'
   ```
   响应体中"token"的值即为Token：
   ```
   "token":OEVPUldpcDY1NENWUDdUOWowdXXXXX...
   ```
   
2. 使用如下命令将token设置为环境变量，方便后续事项。
   ```
   export X-Auth-Token = OEVPUldpcDY1NENWUDdUOWowdXXXXX..
   ```
   
 
 #### 获取可信节点详情
调用[获取可信节点详情](https://support.huaweicloud.com/api-tics/getAgentDetail.html)API获取更多节点信息：
```
curl -k -v GET 'https://10.1.1.1:31000/v1/agents'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdXXXXX' 
-H 'Content-Type: application/json'
-H 'X-Language: zh-cn'
```
获取到可信节点agent_id：edc8357011b0449ca985daabd531083c。
 #### 创建连接器
调用[新建或更新连接器](https://support.huaweicloud.com/api-tics/createOrUpdateConnector.html)API创建MySQL连接，连接名称为mysql-con。这里假设MySQL数据库信息如下：
- IP地址为**1x.1.1.1。**
- 端口为**3306**。
- 登录用户为**username**。
- 密码为DB_password。
- 对应的驱动版本为mysql-connector-java-8.0.20.jar
 
如果返回状态码为201，则说明创建命令执行成功。
```
curl -k -v POST 'https://10.1.1.1:31000/v1/agents/connectors'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'Content-Type: application/json'
-H 'X-Language: zh-cn'
--form 'data_connector="{\"connector_type\":\"MYSQL\",\"name\":\"mysql-con\",\"ext_info\":\"{\\\"user_name\\\":\\\"username\\\",\\\"password\\\":\\\"DB_password\\\",\\\"jdbc_url\\\":\\\"jdbc:mysql://1xx.1.1.1:3306\\\",\\\"driver_name\\\":\\\"mysql-connector-java-8.0.20.jar\\\",\\\"properties\\\":\\\"\\\"}\",\"auth_type\":\"PWD\"}"'
--form 'file=@"/D:/mysql-connector-java-8.0.20.jar"'
```
返回体中包含连接器id：a8ad73d567e348f1ace5f5b9d499b683，保存备用。
 #### 创建数据集
连接创建成功后，调用[创建或更新数据集](https://support.huaweicloud.com/api-tics/createOrUpdateDataset.html)API创建数据集，数据集样例如下：
- 连接器选择上一步创建的mysql-con，数据集名称：dataset_test。
- 创建的数据集对应的mysql数据库名称为demo1，表名称为dim_enterprise，字段名为credit_no、ent_name。
 
如果返回状态码为201，则说明创建命令执行成功。
```
curl -k -v POST 'https://10.1.1.1:31000/v1/agents/datasets'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'Content-Type: application/json'
-H 'X-Language: zh-cn'
-d '{
"name":"dataset_test",
"connector_id":"a8ad73d567e348f1ace5f5b9d499b683",
"connector_name":"mysql-con",
"data_type":"MYSQL",
"description":"this is a test ",
"ag_dataset_table":{
"db_schema":"demo1",
"table_name":"dim_enterprise"
    },
"columns":[
        {
"column_name":"credit_no",
"data_type":"STRING",
"comments":"企业号（企业社会信用代码）",
"sql_col_privacy_type":"SENSITIVE",
"privacy_policy":"NONE"
        },
        {
"column_name":"ent_name",
"data_type":"STRING",
"comments":"企业名称",
"sql_col_privacy_type":"NON_SENSITIVE",
"privacy_policy":"NONE"
        }
    ]
}'
```
返回体中包含数据集id：35684e38484d41a0a3b8f46148a56456，保存备用。
 #### 发布数据集
调用[发布数据集到空间](https://support.huaweicloud.com/api-tics/publishDataset.html)API发布已创建的数据集
```
curl -k -v POST 'https://10.1.1.1:31000/v1/agents/edc8357011b0449ca985daabd531083c/datasets/35684e38484d41a0a3b8f46148a56456/publish'
-H 'Content-Type: application/json'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'X-Language: zh-cn'
```
 #### 创建分析型作业
edf4254ecfd64aabbf896a522693ab05为当前节点所属空间id。
调用[新建联邦分析作业](https://support.huaweicloud.com/api-tics/createSqlJob.html)API创建分析型作业。
```
curl -k -v POST 'https://10.1.1.1:31000/v1/098593b07680d2a32f62c004a482da10/leagues/edf4254ecfd64aabbf896a522693ab05/sql-jobs'
-H 'Content-Type: application/json'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'X-Language: zh-cn'
-d '{
"name":"sql-test",
"description":"",
"agent_id":"edc8357011b0449ca985daabd531083c"
}'
```
返回体中包含job_id：8aa10b98d4eb47a4852f201a8137794f，保存备用。
 #### 保存分析型作业
调用[保存联邦分析作业](https://support.huaweicloud.com/api-tics/saveSqlJob.html)API创建具体作业内容
作业sql内容为查询刚发布的数据集记录。
```
curl -k -v PUT 'https://10.1.1.1:31000/v1/098593b07680d2a32f62c004a482da10/leagues/edf4254ecfd64aabbf896a522693ab05/sql-jobs/8aa10b98d4eb47a4852f201a8137794f'
-H 'Content-Type: application/json'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'X-Language: zh-cn'
-d '{
"description":"",
"ext":"{}",
"name":"sql-test",
"sql_text":"select * from LEAGUE_CREATOR.DATASET_TEST"
}'
```
 #### 执行作业
调用[执行联邦分析作业](https://support.huaweicloud.com/api-tics/executeSqlJob.html)API执行已保存的分析作业
```
curl -k -v POST 'https://10.1.1.1:31000/v1/098593b07680d2a32f62c004a482da10/leagues/edf4254ecfd64aabbf896a522693ab05/sql-jobs/8aa10b98d4eb47a4852f201a8137794f/execute' 
-H 'Content-Type: application/json' 
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX' 
-H 'X-Language: zh-cn'
```
返回体中包含job_instance_id：63d183a021744fd3b1cbf5e2e52d9de6，保存备用。
 #### 查询作业结果
调用[查询执行结果](https://support.huaweicloud.com/api-tics/getInstanceResult.html)API查询作业结果
```
curl -k -v GET 'https://10.1.1.1:31000/v1/agents/edc8357011b0449ca985daabd531083c/job-instances/63d183a021744fd3b1cbf5e2e52d9de6/sample'
-H 'Content-Type: application/json'
-H 'X-Auth-Token: OEVPUldpcDY1NENWUDdUOWowdXXXXX'
-H 'X-Language: zh-cn'
```
至此，使用开放api接口运行一个简单的分析作业流程结束，更多接口请参见接口详情。
