
# 如何自定义调用脚本的URL
#### 使用说明
低代码平台支持将已启用的脚本，封装成一个新的URL地址，方便让第三方系统进行调用。
#### 操作步骤
1. 参考[登录经典应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_5025.html)中操作，登录经典版应用设计器。
2. 在页面左下方，选择"服务"。 
   图1选择服务   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932887704.png)
   
   
3. 在自定义访问控制页面，单击"新建"。
4. 在新建公共接口页面，设置接口参数，单击"保存"。 
   图2"新建自定义接口"配置页面   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933047096.png "点击放大")
   表1新建接口参数配置 
   | 参数     | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 标签     | 新建接口的标签。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 操作名称   | 新建接口的操作名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 版本     | URL对应的版本号。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | URL    | 新URL地址，其中"/service"是固定值，其次是"/*App* *名称*/版本号"，剩下部分请自定义。 自定义的URL需要符合一定规则，规则如下： - 必须以单个"/"开头。  - 可以配置多级路径，两个或者多个"/"之间必须有内容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 内容类型   | 请求中的body类型。 - application/json  - multipart/form-data  - binary-data   "multipart/form-data"和"binary-data"用于文件上传接口，选择该内容类型，只能调用POST类型的脚本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 分类     | 新建接口所属的分类。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 描述     | 新建接口的描述信息，长度不超过255个字节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 允许匿名访问 | 是否可匿名访问运行环境中，该API接口。 勾选表示允许匿名访问，通过运行环境子域名访问此接口时，如果无有效的Token认证信息，则以匿名用户身份继续访问此接口，且不需要做CSRF校验。匿名用户的权限为"Anonymous User Profile"，请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。例如，当该接口有配置业务权限凭证时，给"Anonymous User Profile"权限添加相应业务权限凭证，即可通过运行环境子域名匿名访问该接口。 - 需要支持匿名访问自定义接口的账号，必须要设置运行环境子域名。  - 带有合法认证信息来访问允许匿名访问的自定义接口时，优先以合法认证的身份权限来访问。  - 匿名用户身份访问自定义接口，不需要做CSRF校验。  - 不论以什么方式来访问， 认证身份后做的权限校验保持一致。如果配置了业务权限凭证，还是会查看用户权限是否配置相应业务权限凭证。   例如：登录业务应用接口"login"的URL为"/service/trq1__MyApp/1.0.0/login"，运行环境子域名为"test.example.com"，期望可匿名访问该自定义接口，则配置接口时请勾选"允许匿名访问"，且"Anonymous User Profile"权限配置了该接口的业务权限凭证，则匿名用户通过"https://test.example.com/service/trq1__MyApp/1.0.0/login"即可访问该接口。 |
   | 类型     | 新建接口类型。 - 服务编排：表示该定义URL调用的接口类型是服务编排。  - 脚本：表示该定义URL调用的接口类型是脚本。  - 对象：表示该定义URL是操作对象数据，包括对象数据的增删改查。   本示例选择脚本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 自定义响应  | 是否需要格式化调用该URL后，返回的响应消息。如果勾选，表示对响应消息进行格式化，删除resCode、resMsg、result外层信息，只透传返回的消息。 例如，不勾选"自定义响应"，返回如下响应消息： ``` { "resCode": "0", "resMsg": "成功", "result": [ { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ] } ``` 勾选"自定义响应"后，只返回如下响应消息： ``` { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ```                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 资源     | 调用的服务编排、脚本或操作的对象名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 对象操作   | 设置具体的操作，"类型"选择"对象"时，该参数才会显示。 - Insert Record：新增对象数据。  - Update or Insert Record：更新或新增对象数据。  - Update By ID：按记录ID，更新对象数据。  - Delete By ID：按记录ID，删除对象数据。  - Query By ID：按记录ID，查询对象数据。  - Update By Condition：按条件，更新对象数据。  - Delete By Condition：按条件，删除对象数据。  - Query By Condition：按条件，查询对象数据。                                                                                           |
   | 方法     | 映射后调用的方法名，如GET（查询）、PUT（增加）、POST（修改）和DELETE（删除）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      
   
   
5. （可选）开发者配置自定义接口列表的访问权限。 
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   当开发者需要将自定义接口访问控制和开发的脚本绑定在一起时，例如自定义这些接口的访问权限，需要执行该步骤。
   1. 参考[脚本开发](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0044.html)中操作，开发权限脚本，新建脚本时选择"示例权限脚本"模板，在脚本中定义权限逻辑，开发完后并启用脚本。
      例如，"示例权限脚本"模板是开发者需要通过脚本实现根据用户标识查询第三方权限数据，脚本的设计逻辑流程如下。
      1. （可选）设置数据过滤，例如根据第三方系统用户名进行数据过滤。
      
      2. （根据过滤条件）向第三方获取权限数据。
      
      3. （可选）缓存权限数据。
      
      4. 根据当前API标识，检查是否有权限。
       
   
   2. 在自定义接口列表页面，即服务页面上方"自定义访问控制"区域单击"编辑"。
   
   3. 在"配置"页面选中"与脚本绑定"， 选择前置处理脚本和后置处理脚本，单击"保存"。
      - 前置处理：一般是授权处理脚本，在访问自定义接口前，需要进行授权处理。
      
      - 后置处理：一般是敏感错误信息或者统计日志处理脚本，后置脚本没有返回参数，无论执行成功或失败都不影响自定义接口的请求处理流程。
      
      
      图3绑定权限脚本   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960286221.png "点击放大") 
   
   4. 当开发者不需要使用该权限脚本时，可在页面单击"禁用"。
   
   
   
   
6. （可选）设置访问该自定义接口的用户业务权限。 
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   当需要配置该接口的用户访问时，需要执行该步骤。若已参照上一步设置了通过脚本控制接口访问权限，则该步骤设置不生效。
   若没有参照上一步通过脚本控制接口访问权限，也没有配置业务权限且内置系统参数"bingo.permission.customapi.check"值为"否"，则只有业务用户可访问该接口，平台用户不可访问。若没有参照上一步通过脚本控制接口访问权限，也没有配置业务权限且内置系统参数"bingo.permission.customapi.check"值为"是"，则业务用户和平台用户都不可访问。若已参照上一步设置了通过脚本控制接口访问权限，则业务权限配置不生效。若没有参照上一步通过脚本控制接口访问权限，而配置了业务权限，则只有拥有该业务权限的用户才可以访问该接口。
   例如，配置只有拥有业务权限"A"的用户，才可访问该接口。
   1. 参考[设置业务权限](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_0012.html)中操作，在经典版环境配置中选择"用户管理 \> 业务权限凭证"，创建业务权限"A"。
      图4创建业务权限"A"   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124521.png "点击放大") 
   
   2. 选择"用户管理 \> 权限配置"，编辑权限，在"业务权限凭证"页签配置接入业务权限"A"。
      图5用户权限配置   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885792.png "点击放大") 
   
   3. 返回经典版应用设计器，单击"服务"，在自定义访问控制接口列表中，单击操作名，进入自定义接口详情页面。
   
   4. 在业务权限凭证中，单击"编辑"，配置业务权限，将左侧业务权限"A"加入到右侧"已选择业务权限凭证列表"中，单击"保存"。
      图6配置业务权限   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932885772.png "点击放大")
      
      业务用户访问该接口URL前，请参考[如何开发服务编排](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0601.html)中操作，创建如下服务编排，用于获取token值。其中，赋的值"PL"是一个公式变量，表达式为"PORTALUSERLOGIN("*pu1* ")"，"*pu1*"为业务用户名，配置该服务编排的出参为"token"。
      图7创建服务编排   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045180.png "点击放大")
      执行服务编排后，在如下输出信息中，获取token值。
      ```
      {
        "interviewId": "002N000000RBLY9scgDY",
        "outputs": {
          "token": "XXXXXXXXXXXXXXXXXX"
        }
      }
      ```
      
    
   
   
7. 接口创建完成后，支持在线测试。 
   1. 在自定义接口列表中，单击接口后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960126413.png)。
   
   2. 在弹出框中，单击URL后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933047100.png)。
   
   3. 单击"测试一下"，如果有输入参数，设置输入参数后，单击"执行"。 成功响应，表示接口调用成功。
      
   
   
   
   
 
