
# 使用高代码服务编排自定义API
工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）不仅为用户提供了丰富的标准API（如数据实体API、关系实体API、系统管理API），还提供了高代码的服务编排能力，适配Java和JavaScript类型服务编排。当iDME提供的标准API无法满足用户的业务需求时，用户可使用服务编排能力编排原子API形成一个跨实体（表）的组合API，提高应用开发的速度与质量。
以如下示例场景及JavaScript类型服务编排为例，指导您如何使用高代码服务编排自定义API。
#### 示例场景
假设在应用运行态有如下数据实体和关系实体，并基于这些实体创建了若干实例。希望自定义一个API，该API可根据票价和余票的具体值，查询票价≤票价具体值，余票≥余票具体值的电影院和影片信息，分页显示。例如，查询票价≤19.9，余票≥8的电影院ID、影片ID、票价和余票信息。
表1实体 
| 实体类型 | 实体名称                                                                | 说明                                                                                                                      |
|:---|:---|:---|
| 数据实体 | 英文名称：Cinema 中文名称：电影院 | 用于存储电影院信息，如部门、收入等。                                                                                                      |
| 数据实体 | 英文名称：Film 中文名称：影片     | 用于存储影片信息，如电影导演、主演、简介、语言、片长、类型等。                                                                                         |
| 关系实体 | 英文名称：Play 中文名称：上映     | 为Cinema（源数据实体）和Film（目标数据实体）建立多对多关系。 关系实体属性包含票价（price）和余票（remain），均为数值型属性。 |
   
#### 步骤1：创建高代码编排
1. 登录应用运行态。
2. 在左侧导航栏中，选择"服务编排管理 \> 高代码编排"，单击"创建"。
3. 在展开的"服务定义"页面，设置如下主要信息，其他保持默认，单击"保存"。 
   图1创建服务编排   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001544665801.png "点击放大")
   表2参数信息 
   | 参数      | 说明                             |
   |:---|:---|
   | API英文名称 | 输入"QueryByPriceRemain"。        |
   | API中文名称 | 输入"按票价和余额查询"。                  |
   | API英文描述 | 输入"Query by price and remain"。 |
   | API中文描述 | 输入"按票价和余额查询"。                  |
   | API类型   | 选择"JavaScript"。                |
      
   
   
4. 选择"脚本显示"页签，根据系统提供的参考样例，输入如下JavaScript编排脚本，单击"保存"。 
   ```
   var request = "";
   var sqlCount  = "select count(*) as count from TestDME_Play_REL p "; 
   var sql = "select c.name as cinema, f.name as film, p.price, p.remain from TestDME_Play_REL p ";
   sql += "left join TestDME_Cinema c on c.id = p._sourceid ";
   sql += "left join TestDME_Film f on f.id = p._targetid ";
   if (request.price != null && request.remain!=null)
   {
       sql += " where price <=  and remain>= ";
       sqlCount += " where price <=  and remain>=  ";
   }
   ```
   - TestDME_Play_REL/TestDME_Cinema/TestDME_Film：表示Play关系实体/Cinema数据实体/Film数据实体在数据库中的表名称。
   
   - id/name/_sourceid/_targetid/price/remain：表示实体表中的属性名称，即唯一编号（ID属性），名称，源数据实体（Cinema）的唯一编号（ID属性）、目标数据实体（Film）的唯一编号（ID属性）、票价和余票。
   
   - 和：数值型属性（票价和余票）的写法。如为文本类型属性，应修改为''和''。
   
   
   
   
5. 在"模拟API-输入参数"栏中，输入price和remain的参数值，单击"保存并执行"，验证JavaScript编排脚本。 
   图2模拟API   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001558477048.png "点击放大")
   returnTotalCountFlag参数是系统自动添加，如果returnTotalCountFlag为true，输出结果将返回数据实例总数。
   
   
6. 选择"服务预览"页签，输入price和remain的参数值，单击"运行"，预览生产环境的运行效果。 
   图3服务预览   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001558636972.png "点击放大")
   
   
7. 选择"服务发布"页签，确认该服务编排的基本信息、请求参数说明、响应参数说明、请求示例、正常响应示例等信息无误后，单击"发布"。
 
#### 步骤2：验证服务编排
1. 在应用运行态左侧导航栏中，选择"数据服务管理 \> 全量数据服务"，进入全量数据服务页面。
2. 在"分类"栏中，展开服务编排，找到并选择刚创建的服务编排（QueryByPriceRemain）。 
   图4全量数据服务   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001493500168.png "点击放大")
   
   
3. 在API列表栏中，单击API英文名称，查看QueryByPriceRemain API的详细信息。 
   图5API详情   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001493674280.png "点击放大")
   
   
 
#### 步骤3：使用服务编排API
根据QueryByPriceRemain API的详细信息，在用户应用的管理系统中构造如下请求示例：
```
POST http://{Endpoint}/rdm_{appID}_app/services/rdm/basic/api/customservice/QueryByPriceRemain/execute/20/1 
Content-Type: application/json  
Content-Length: Content Length  
X-AUTH-TOKEN: XXXXXXXXXX  
{      
    "params": {          
        "price": 19.9,          
        "remain": 8,          
        "returnTotalCountFlag": true,      
    }  
}
```
其中，{Endpoint}表示数据建模引擎所在域名或IP地址，{appID}表示应用ID。
