
# 创建API的数据后端
#### 概述
ROMA Connect支持把数据源定义为后端服务，实现从数据源中读写数据，并以API的形式对外开放。
#### 约束与限制
- 数据源存储的单行数据大小建议不超过2KB，若超过该限制会导致自定义后端响应异常。
- 当数据源返回numeric类型数据时，如果该数据的小数位精度超过6位，且数值为0时，数据后端会把该数据值转换为科学计数法。因此，不建议把numeric类型数据的小数位精度设置为超过6位。
 
#### 前提条件
- ROMA Connect已接入数据源，具体请参考[接入后端数据源](https://support.huaweicloud.com/usermanual-roma/roma_03_2117.html)。
- 如果后端服务需要使用签名密钥请求发送方进行认证，请提前[创建签名密钥](https://support.huaweicloud.com/usermanual-roma/roma_03_2155.html#roma_03_2155__section11685173710412)（密钥类型为HMAC）。
 
#### 创建API的数据后端
1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
2. 在左侧的导航栏选择"服务集成 APIC \> 自定义后端"，在"后端列表"页签中单击"创建后端"。
3. 在创建后端页面配置后端信息，完成后单击"立即创建"。
   后端创建完成后，页面自动跳转到该后端的编辑器页面，后端类型默认为数据后端。
   表1后端配置 
   | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   |:---|:---|
   | 后端名称   | 填写后端的名称，根据规划自定义。建议您按照一定的命名规则填写后端名称，方便您快速识别和查找。 支持汉字、英文、数字、中划线、下划线、点、斜杠、中英文格式下的小括号和冒号、中文格式下的顿号，且只能以英文、汉字和数字开头，3-100个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 集成应用   | 选择后端所属的集成应用。若没有可用的集成应用，可单击右侧的"新建集成应用"，创建一个集成应用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 后端请求方法 | 选择后端的请求方法，可选择"GET"、"POST"、"PUT"和"DELETE"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 后端请求路径 | 填写后端的请求路径，格式如：/getUserInfo/userId。 请求路径中的内容区分大小写。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 后端安全认证 | 选择后端的安全认证方式。 - 签名密钥：使用签名密钥对后端请求进行认证。若使用签名密钥进行认证，该后端服务对应的前端API也需要绑定相同的签名密钥。  - 无认证：不对调用请求进行认证。                                                                                                                                                                                                                                                                                                                                                          |
   | 描述     | 填写后端的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 高级设置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ||
   | 版本号    | 填写后端的版本号，自定义，用于区分不同的后端服务版本，如V1.0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 入参定义   | 根据实际需要定义后端服务的请求参数。 在"入参定义"下单击"新增入参定义"，添加自定义后端的请求参数。 - 名称：请求参数的名称，自定义。  - 参数位置：请求参数在后端服务请求中的位置，可选择"Headers"和"Parameters"。  - 测试界面默认值：仅用于后续的自定义后端测试步骤，作为参数的默认测试值。在自定义后端部署时不生效。  - 必填：在后端服务请求中，请求参数是否必填。  - 描述：填写参数的描述信息。   |
   | 返回类型   | 选择后端的响应数据格式，可选择"JSON"、"XML"和"STREAM"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      
   
4. 配置数据后端。
   1. 在编辑器页面左侧单击"添加数据源"。
   
   2. 在添加数据源弹窗中配置数据源信息，完成后单击"立即添加"。
      表2数据源配置 
      | 参数       | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      |:---|:---|
      | 选择数据源    | 选择[接入后端数据源](https://support.huaweicloud.com/usermanual-roma/roma_03_2117.html)中已创建的数据源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      | 选择执行语句类型 | 选择执行语句的类型，可选择"SQL"和"SP"（Stored Procedure）。 如果是Redis或MongoDB数据源，选择"SQL"，实际执行语句为NoSQL。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      | 高级设置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ||
      | 返回对象     | 填写返回对象的名称，执行语句的执行结果将封装在该对象中返回。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      | 结果分页选项   | 执行语句的执行结果是否支持分页返回。若同一个数据后端添加多个数据源时，不支持配置"结果分页选项"。 若开启结果分页选项，可在后端请求中添加查询参数pageNum和pageSize，对查询结果进行分页，并指定返回第几页的数据。 - pageNum：分页时指定要返回第几页的数据，从1开始。  - pageSize：分页时每页包含的数据条数。   开启和关闭结果分页选项时，响应结果的结构会有所不同，具体请参见[结果分页示例说明]。 说明： 结果分页当前仅支持2000条以内数据的分页，且返回的total字段指的是当前返回结果内的数据条目数，并非总数据条目数。如果数据查询总条目数超过2000条，不建议开启结果分页选项，因为这种情况下无法进行正确的分页，建议在执行语句中携带offset和limit参数进行分页，但这种情况下返回结果格式有变动，不再含有total等字段。未开启"预编译"时，使用示例如下： ``` select * from table01 limit ${limit} offset ${offset} ``` 其中offset和limit参数key在后端服务请求的Headers、Parameters或Body中传递。 若数据源开启了"预编译"，则还需要调用相应的函数对offset和limit参数进行数据类型转换，具体请参见[自定义后端开发（数据后端）](https://support.huaweicloud.com/devg-roma/apic-dev-190514002.html)。 |
      | 预编译      | 是否对执行语句进行预编译，可以防止SQL注入风险。 说明： 数据后端分页查询语句只能在取消预编译的条件下执行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
         
      **结果分页示例说明**
      假设"返回对象"设置为"mydata"，执行语句从数据源查询返回了5条数据结果。
      - 在不开启"分页结果选项"时，会把全部5条数据作为响应结果返回给用户，响应结果示例如下。
        ```
        {
          "mydata": [
            {
              "id": 1,
              "name": "aaa"
            },
            {
              "id": 2,
              "name": "bbb"
            },
            {
              "id": 3,
              "name": "ccc"
            },
            {
              "id": 4,
              "name": "ddd"
            },
            {
              "id": 5,
              "name": "eee"
            }
          ]
        }
        ```
        
      
      - 在开启"分页结果选项"时，假设请求参数pageNum=1，pageSize=2，则执行语句查询到的5条数据会根据pageSize进行分页，每页2条数据，并根据pageNum只把第1页的2条数据作为响应结果返回给用户，响应结果中total为执行语句查询到的数据总条数5。响应结果示例如下：
        ```
        {
          "mydata": {
            "total": 5,
            "data": [
              {
                "id": 1,
                "name": "aaa"
              },
              {
                "id": 2,
                "name": "bbb"
              }
            ],
            "pageSize": 2,
            "pageNum": 1
          }
        }
        ```
        
       
   
   3. 添加数据源后，在编辑器左侧选择数据源，然后可以在右侧的语句编辑框中编写执行语句。
      ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
      编写执行语句时请注意，不能在执行语句中添加注释内容。
      具体请参见[自定义后端开发（数据后端）](https://support.huaweicloud.com/devg-roma/apic-dev-190514002.html)。
      如果是Redis或MongoDB数据源，实际为Redis或MongoDB的数据处理命令。
      
   
   4. 完成后在页面右上角单击"保存"，保存数据后端配置。
    
5. 测试后端功能。
   在页面右上角单击"测试"，在下方的"测试参数"处，根据后端的定义添加请求参数，然后单击"立即测试"，发送请求。
   - 在"执行结果"处，可查看后端的响应结果。
   
   - 在"执行历史"处，可查看后端的历史测试记录。单击测试记录，可以将历史测试参数导入到左侧测试参数中，并再次测试。
     
6. 部署后端。 后端测试完成后，在页面右上角单击"部署"，在确认弹窗中单击"确定"，部署后端服务。
   
 
