
# 通过函数API开放数据
#### 前提条件
- 确保业务系统所在网络与ROMA Connect的网络互通。 若通过公网互通，ROMA Connect实例需绑定弹性IP。
  
- 确保业务系统的数据库为ROMA Connect支持的数据源类型。 函数API支持的数据源请参见[支持的数据与协议](https://support.huaweicloud.com/productdesc-roma/data-protocol-supported.html#section1)。
  
- 准备一个可用的独立域名，用于作为API的访问域名。 确保已完成独立域名到"服务集成APIC连接地址"的域名解析配置，具体请参考[添加公网域名解析记录](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_0006.html)。
  若还没有独立域名，您可以通过域名注册商申请域名，并通过[备案中心](https://beian.huaweicloud.com/)完成域名备案。
  
- 如果函数API使用HTTPS请求协议，您还需要为独立域名申请SSL证书，并获取pem格式的SSL证书内容和密钥。
 
#### 业务系统开放函数API
1. 创建集成应用。 ROMA Connect实例中的资源都要归属到某个集成应用下，在创建其他资源前，您需要确保有一个集成应用。若已有可用的集成应用，可跳过此步骤。
   1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
   
   2. 在左侧的导航栏选择"集成应用"，单击页面右上角的"创建集成应用"。
   
   3. 在创建集成应用弹窗中填写集成应用的"名称"，然后单击"确认"。
    
2. 创建函数后端。
   通过自定义后端，把业务系统的数据转换为一个后端服务。
   1. 在左侧的导航栏选择"服务集成 APIC \> 自定义后端"，在"后端列表"页签中单击"创建后端"。
   
   2. 在创建后端页面配置后端信息，完成后单击"立即创建"。
      表1后端请求配置 
      | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      |:---|:---|
      | 后端名称   | 填写后端的名称，根据规划自定义。建议您按照一定的命名规则填写后端名称，方便您快速识别和查找。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      | 集成应用   | 选择后端所属的集成应用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | 后端请求方法 | 选择后端的请求方法，可选择"GET"、"POST"、"PUT"和"DELETE"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      | 后端请求路径 | 填写后端的请求路径，格式如：/getUserInfo/userId。 请求路径中的内容区分大小写。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      | 后端安全认证 | 选择后端的安全认证方式。 - 签名密钥：表示使用签名密钥的方式，对请求发送方进行认证。若使用签名密钥进行认证，调用该后端服务的API，也需要绑定相同的签名密钥。  - 无认证：表示不对调用请求进行认证。                                                                                                                                                                                                                                                                                                                                            |
      | 描述     | 填写后端的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | 高级设置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ||
      | 版本号    | 填写后端的版本号，自定义，用于区分不同的后端服务版本，如V1.0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      | 入参定义   | 根据实际需要定义后端服务的请求参数。 在"入参定义"下单击"新增入参定义"，添加自定义后端的请求参数。 - 名称：请求参数的名称，自定义。  - 参数位置：请求参数在后端服务请求中的位置，可选择"Headers"和"Parameters"。  - 测试界面默认值：仅用于后续的自定义后端测试步骤，作为参数的默认测试值。在自定义后端部署时不生效。  - 必填：在后端服务请求中，请求参数是否必填。  - 描述：填写参数的描述信息。   |
      | 返回类型   | 选择后端的响应数据格式，可选择"JSON"、"XML"和"STREAM"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
      | 是否格式化  | 是否将响应消息体按选择的返回类型进行格式化。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
         
      后端创建完成后，页面自动跳转到该后端的编辑器页面，后端类型默认为数据后端。
      
   
   3. 在编辑器的左上角单击"文件 \> 新建函数后端 \> 调用Mysql数据源示例"，在弹窗中单击"确定"，切换后端类型为函数后端。 如果是Redis或MongoDB数据源，可选择"调用Redis数据源示例"。
      
   
   4. 在右侧的语句编辑框中根据系统提供的函数脚本示例，修改数据源相关接入配置。
      ```
      importClass(com.roma.apic.livedata.client.v1.DataSourceClient);
      importClass(com.roma.apic.livedata.config.v1.DataSourceConfig);
      function execute(data){
      var config = new DataSourceConfig()
        config.setType("mysql")
        config.setUrl("jdbc:mysql://127.0.0.1:3306/db?allowPublicKeyRetrieval=true")
        config.setUser("xxxx")
        config.setPassword("xxxx")
        var ds = new DataSourceClient(config)
        return ds.execute("SELECT * FROM person where name = ? and age = ?","Tom",20);
      }
      ```
      - 在setType、setUrl、setUser和setPassword处配置数据源的连接信息，具体参数配置说明请参考[DataSourceConfig类说明](https://support.huaweicloud.com/devg-roma/apic-dev-190603053.html)。
      
      - 在ds.execute处设置SQL执行语句，通过执行语句获取要返回的数据。
       
   
   5. 完成后在页面右上角单击"保存"，保存函数后端配置。
   
   6. 测试后端功能。 在页面右上角单击"测试"，在下方的"测试参数"处，根据后端服务的定义添加请求参数，然后单击"立即测试"，发送请求。在"执行结果"栏查看后端的响应是否返回所期望的数据。
      
   
   7. 后端测试完成后，在页面右上角单击"部署"，在确认弹窗中单击"确定"，部署后端服务。
     
3. 发布函数API。
   把函数后端发布为函数API并部署到环境中，即可供其他业务系统调用。
   1. 在页面右上角单击"发布"。
   
   2. 在发布弹窗中配置前端API的相关信息，完成后单击"立即发布"，为该后端创建一个对应的前端API，并发布到环境上。
      API发布完成后，自动跳转到对应前端API的API运行页面。
      表2发布配置 
      | 参数         | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      |:---|:---|
      | 所属分组       | 选择前端API所属的API分组。若没有可用的API分组，可单击右侧的"创建分组"，创建一个API分组。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      | 发布环境       | 选择前端API要发布的环境，对外正式开放API时，应选择默认环境"RELEASE"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 前端安全认证     | 选择前端API的安全认证方式，推荐使用APP认证方式。 - APP认证：表示由ROMA Connect对API请求进行安全认证。用户调用API时，使用集成应用的Key和Secret进行API请求的安全认证。  - 华为IAM认证：表示由IAM对API请求进行安全认证。用户调用API时，使用Token或AK/SK进行API请求的安全认证。  - 自定义认证：表示使用自定义的函数API对API请求进行安全认证。  - 无认证：表示API请求不需要认证。   |
      | 自定义认证      | **仅当"前端安全认证"选择"自定义认证"时需要配置。** 选择已创建的前端类型自定义认证。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      | 前端请求协议     | 选择前端API使用的请求协议，可选择"HTTP"、"HTTPS"和"HTTP\&HTTPS"，传输重要或敏感数据时推荐使用HTTPS。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      | 后端超时 (ms)  | 后端服务请求的超时时间，默认为60000ms。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      | 重试次数       | ROMA Connect调用后端服务失败后的重试次数。 - 值为-1时，表示不开启重试功能。  - 值为0-10时，表示开启重试功能，并根据设置的值执行重试。                                                                                                                                                                                                                                                                                     |
      | 高级设置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ||
      | 前端请求方法     | 选择前端API的请求方法。"ANY"表示该API支持任意请求方法，用于获取数据库数据的API一般使用GET方法即可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 前端请求路径     | 填写前端API的请求路径，格式如：/getUserInfo/userId。 请求路径中的内容区分大小写。                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      | 支持跨域(CORS) | 是否支持跨域访问API。 浏览器出于安全性考虑，限制从页面脚本内发起的跨域请求，此时页面只能访问同源的资源。而CORS允许浏览器向跨域服务器发送XMLHttpRequest请求，从而实现跨域访问。跨域访问API请参见[配置跨域访问API](https://support.huaweicloud.com/usermanual-roma/roma_03_2124.html)。                                                                                                                                                                                                                                                                                                                                  |
         
      
     
4. 为函数API绑定独立域名。
   1. 在页面左上角选择"分组信息"，在"域名管理"下单击"绑定独立域名"。
   
   2. 在绑定独立域名弹窗中填写域名配置信息，完成后单击"确定"。
      表3独立域名配置 
      | 参数                   | 配置说明                                                                                                                                                                                                                             |
      |:---|:---|
      | 域名                   | 填写要绑定的域名。                                                                                                                                                                                                                        |
      | 支持最小TLS版本            | 选择域名访问所使用的最小TLS版本。                                                                                                                                                                                                               |
      | 支持http to https自动重定向 | 是否支持HTTP到HTTPS的重定向。 仅当API的请求协议选择"HTTPS"或"HTTP\&HTTPS"，且独立域名已绑定SSL证书时重定向生效。 说明： 由于浏览器限制，非GET或非HEAD方法的重定向可能导致数据丢失，因此API请求方法限定为GET或HEAD。 |
         
      
   
   3. （可选）如果函数API支持HTTPS请求协议，则需要为独立域名绑定SSL证书。否则跳过此步骤。
      1. 在已绑定的独立域名右侧单击"选择SSL证书"。
      
      2. 在选择SSL证书弹窗中勾选要绑定的SSL证书，完成后单击"确定"，完成SSL证书的绑定。 若证书列表中无可用的SSL证书，可单击"创建SSL证书"，新增SSL证书。
         
       
    
 
#### 其他业务系统调用API
1. 向API提供方获取API的调用信息。
   - 获取API的请求信息。 API提供方可在ROMA Connect控制台选择"服务集成 APIC \> API列表"，在列表中单击API的名称进入API运行页面，在页面中可获取API的请求方法和URL，在"前端配置"页签下，可获取API的请求参数。
     
   
   - 获取API的认证信息。
     根据API的安全认证方式不同，需要获取不同的认证信息。
     - APP认证：
       - 签名认证：向API提供方获取该API所授权凭据的Key和Secret，以及用于调用API的SDK。
       
       - 简易认证：向API提供方获取该API所授权凭据的AppCode。
       
       - 其他认证：向API提供方获取该API所授权凭据的Key和Secret。
        
     
     - 华为IAM认证：通过云服务平台的账号凭证（账号密码或者AK/SK）进行认证。如果使用AK/SK进行认证，还需要向API提供方获取用于调用API的SDK。
     
     - 自定义认证：向API提供方获取请求参数中要携带的自定义认证信息。
     
     - 无认证：无需认证信息。
       
    
2. 根据获取的API调用信息，拼接并发送API请求，获取所需数据。
 
