
# 配置示例
#### 前提条件
- 已获取IAM和ROMA Connect服务所在区域的Endpoint地址。
- 已获取ROMA Connect实例的实例ID，以及实例所在区域的项目ID。
- 在调用ROMA Connect的接口时，需要为调用请求添加认证信息。有Token认证和AK/SK认证两种认证方式，您可以选择其中一种进行认证鉴权，具体操作请参见[认证鉴权](https://support.huaweicloud.com/api-roma/roma_06_0005.html)。推荐使用AK/SK认证，其安全性比Token认证要高。
 
 #### 获取集成应用ID
在ROMA Connect实例中创建的资源（如数据源、API等）都要归属到某个集成应用下，在创建资源前需要获取资源所归属的集成应用ID。
- 如果有可用的集成应用，则调用"查询应用列表"接口，获取集成应用ID。
  **请求示例：**
  ```
  GET /v2/{project_id}/instances/{instance_id}/apps
  ```
  其中加粗部分需要根据接口参数说明，替换为实际的数据值。
  **响应示例：**
  ```
  {
     "total" : 1,
     "size" : 1,
     "apps" : [ {
       "id" : "b2e6b145********f4b8029f95a3",
       "name" : "AppName",
       "remark" : "example"
     } ],
      ...
  }
  ```
  响应消息中"apps"的值为查询到的集成应用信息列表，找到要使用的集成应用，其中"id"的值即为集成应用ID，保存并留待后续步骤使用。
  
- 如果没有可用的集成应用，则调用"创建应用"接口，创建一个集成应用并获取集成应用ID。
  **请求示例：**
  ```
  POST /v2/{project_id}/instances/{instance_id}/apps
  {
    "name" : "AppName",
    "key" : "xxxxxx",
    "secret" : "******"
  }
  ```
  其中加粗部分需要根据接口参数说明，替换为实际的数据值。
  **响应示例：**
  ```
  {
     "id" : "b2e6b145********f4b8029f95a3",
     "name" : "AppName",
     "remark" : "example",
      ...
  }
  ```
  响应消息中"id"的值即为集成应用ID，保存并留待后续步骤使用。
  
 
 #### 接入数据源
调用"创建数据源"接口，接入需要开放数据的数据库，并获取返回的数据源ID。此处以MySQL数据库为例进行说明，其他类型数据库请参考接口的参数说明。
**请求示例：**
```
POST /v2/{project_id}/fdi/instances/{instance_id}/datasources
{
   "datasource_name" : "fdi_ds_mysql",
   "datasource_type" : "MYSQL",
   "content" : {
     "host" : "10.10.10.10",
     "port" : "3306",
     "database_name" : "romatest",
     "user_name" : "romatest",
     "password" : "******",
     "mode" : "default"
   },
   "app_id" : "xxxxxx",
   "description" : "test"
}
```
其中加粗部分需要根据接口参数说明，替换为实际的数据值。**xxxxxx** 为[获取集成应用ID]中获取并保存的集成应用ID。
**响应示例：**
```
{
   "datasource_id" : "0fd3669d********ed3160ed051",
   "datasource_name" : "fdi_ds_api_v2",
   "datasource_type" : "API",
    ...
}
```
响应消息中"datasource_id"的值即为数据源ID，保存并留待后续步骤使用。
 #### 创建数据后端
通过创建数据后端，把要开放的数据库转换为API的后端服务。
1. 调用"创建后端API"接口，创建一个自定义后端，并获取返回的后端API编号。
   **请求示例：**
   ```
   POST /v2/{project_id}/apic/instances/{instance_id}/livedata-apis
   {
      "name" : "data_api_demo",
      "path" : "/data/test",
      "method" : "GET",
      "roma_app_id" : "xxxxxx",
      "version" : "1.0",
      "content_type" : "json",
      "return_format" : false,
      "parameters" : [
         {
            "name" : "param1",
            "in" : "Parameters",
            "required" : true
         } 
      ]
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**xxxxxx** 为[获取集成应用ID]中获取并保存的集成应用ID。"parameters"下可根据实际需要设置多个后端请求参数，或不设置请求参数。
   **响应示例：**
   ```
   {
      "id" : "bd42841c********c6d8a06e37",
      "name" : "data_backend",
      "roma_app_id" : "98df09fb********2b55ca6f3d5d",
      "content_type" : "json",
       ...
   }
   ```
   响应消息中"id"的值即为后端API编号，保存并留待后续步骤使用。
   
2. 调用"创建后端API脚本"接口，配置数据后端。
   **请求示例：**
   ```
   POST /v2/{project_id}/apic/instances/{instance_id}/livedata-apis/{ld_api_id}/scripts
   {
      "api_type" : "data",
      "scripts" : [ 
         {
            "ds_id" : "xxxxxx",
            "type" : "SQL",
            "object_name" : "data",
            "content" : "ZnVuY3Rpb24g******cmxkISIKfQ=="
         }
      ]
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{ld_api_id}** 为[创建自定义后端]时获取并保存的后端API编号，**xxxxxx** 为[接入数据源]中获取并保存的数据源ID。
   
 
 #### 获取API分组ID
API分组是同一类业务API的集合，每个API都要归属到某个API分组下，在发布数据API前需要获取API所归属的API分组ID。
API只有在发布到环境后，才能被外部用户调用，在发布数据API前需要获取API要发布的环境ID。
- 如果有可用的API分组，则调用"查询分组列表"接口，获取分组ID。
  **请求示例：**
  ```
  GET /v2/{project_id}/apic/instances/{instance_id}/api-groups
  ```
  其中加粗部分需要根据接口参数说明，替换为实际的数据值。
  **响应示例：**
  ```
  {
     "total" : 2,
     "size" : 2,
     "groups" : [ {
       "name" : "api_group_001",
       "id" : "c77f5e81d********ef2b0ac7600",
       "remark" : "group1",
        ...
     },
     ...
    ] 
  }
  ```
  响应消息中"groups"的值为查询到的API分组列表，找到要使用的API分组，其中"id"的值即为API分组ID，保存并留待后续步骤使用。
  
- 如果没有可用的API分组，则调用"创建API分组"接口，创建一个API分组并获取分组ID。
  **请求示例：**
  ```
  POST /v2/{project_id}/apic/instances/{instance_id}/api-groups
  {
     "name" : "api_group_001",
     "version" : "V2",
     "roma_app_id" : "xxxxxx"
  }
  ```
  其中加粗部分需要根据接口参数说明，替换为实际的数据值。**xxxxxx** 为[获取集成应用ID]中获取并保存的集成应用ID。
  **响应示例：**
  ```
  {
     "name" : "api_group_001",
     "id" : "c77f5e81d********ef2b0ac7600",
     "remark" : "group1",
      ...
  }
  ```
  响应消息中"id"的值即为API分组ID，保存并留待后续步骤使用。
  
 
 #### 部署并发布数据API
1. 调用"部署后端API"接口，部署数据后端并发布一个数据API，获取返回的前端数据API编号。
   **请求示例：**
   ```
   POST /v2/{project_id}/apic/instances/{instance_id}/livedata-apis/{ld_api_id}/deploy
   {
      "deploy_front_api" : true,
      "roma_app_id" : "xxxxxx"
      "auth_type" : "APP",
      "group_id" : "yyyyyy",
      "env_id" : "DEFAULT_ENVIRONMENT_RELEASE_ID",
      "method" : "GET",
      "path" : "/data/test",
      "protocol" : "HTTPS",
      "backend_timeout" : 5000,
      "cors": false
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{ld_api_id}** 为[创建数据后端]时获取并保存的后端API编号，**xxxxxx** 为[获取集成应用ID]中获取并保存的集成应用ID，**yyyyyy** 为[获取API分组ID]中获取并保存的API分组ID。
   **响应示例：**
   ```
   {
      "id" : "5e19590f54444d8a9b8fe698ce26e9fe",
      "deploy_time" : "2020-09-19T06:58:13Z",
      "api_id" : "1d0432f1a********ae7bd96ca6",
      "env_id" : "DEFAULT_ENVIRONMENT_RELEASE_ID",
       ...
   }
   ```
   响应消息中"api_id"的值即为前端数据API的编号，保存并留待后续步骤使用。
   
2. （可选）在[发布数据API]时无法为数据API添加请求参数，若需要为数据API添加请求参数，则调用"修改API"接口为数据API添加请求参数。
   **请求示例：**
   ```
   PUT /v2/{project_id}/apic/instances/{instance_id}/apis/{api_id}
   {
      "name": "Data_API",
      "type": 1,
      "req_protocol": "HTTPS",
      "req_method": "GET",
      "req_uri": "/data/test",
      "auth_type": "APP",
      "backend_type": "HTTP",
      "group_id": "c77f5e81d********ef2b0ac7600",
      "req_params": [
          {
              "name": "param01",
              "type": "STRING",
              "location": "QUERY"
          }
      ],
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{api_id}** 为[发布数据API]时获取并保存的前端数据API编号，"req_protocol"、"req_method"、"req_uri"、"auth_type"、"group_id"需与[发布数据API]时设置的值保持一致。"parameters"下可根据实际需要设置多个后端请求参数，或不设置请求参数。
   
 
 #### 为数据API绑定独立域名
开放的API需要绑定独立域名，用户通过独立域名访问API。
1. 调用"绑定域名"接口，为数据API绑定一个独立域名，并获取返回的域名编号。
   **请求示例：**
   ```
   POST /v2/{project_id}/apic/instances/{instance_id}/api-groups/{group_id}/domains
   {
      "url_domain" : "www.example.com"
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{group_id}** 为[获取API分组ID]中获取并保存的API分组ID。
   **响应示例：**
   ```
   {
      "url_domain" : "www.example.com",
      "id" : "c5e0d5ba********ae22c1a17",
      "status" : 3,
      "min_ssl_version" : "TLSv1.1"
   }
   ```
   响应消息中"id"的值即为域名编号，保存并留待后续步骤使用。
   
2. （可选）若[部署并发布数据API]时配置了使用HTTPS协议，则需要调用"绑定域名证书"接口为独立域名添加SSL证书。
   **请求示例：**
   ```
   POST /v2/{project_id}/apic/instances/{instance_id}/api-groups/{group_id}/domains/{domain_id}/certificate
   {
      "name" : "cert_demo",
      "private_key" : "-----Start certificate----********-----End certificate-----",
      "cert_content" : "-----Start RSA private key----- ********-----End RSA private key-----"
   }
   ```
   其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{group_id}** 为[获取API分组ID]中获取并保存的API分组ID，**{domain_id}** 为[绑定独立域名]时获取并保存的域名编号。
   
 
 #### 获取数据API的调用信息
调用"查询API详情"接口，查看并保存API的调用信息，包括API的请求协议、请求方式、请求路径、访问域名、请求参数和认证方式。
**请求示例：**
```
GET /v2/{project_id}/apic/instances/{instance_id}/apis/{api_id}
```
其中加粗部分需要根据接口参数说明，替换为实际的数据值。**{api_id}** 为[部署并发布数据API]中获取并保存的前端数据API编号。
**响应示例：**
```
{
   "name": "API_test",
   "type": 1,
   "version": "V1.0",
   "req_protocol": "HTTP",
   "req_method": "GET",
   "req_uri": "/api/demo",
   "auth_type": "APP",
    ...
   "domain_name": "www.example.com",
    ...
   "req_params": [],
    ...
}
```
响应消息中，"req_protocol"为请求协议，"req_method"为请求方式，"req_uri"为请求路径，"domain_name"为访问域名，"req_params"为请求参数信息，"auth_type"为认证方式。
把API调用信息提供给其他用户，其他用户通过调用数据API，获取开放的业务数据。不同的API认证方式，调用数据API的操作有所不同，具体请参考[调用开放的API](https://support.huaweicloud.com/usermanual-roma/roma_03_2123.html)。
