华为云用户手册

  • 敏感信息加解密 配置文件中配置密文信息。可以解密的配置有devspore.dcs.redis.servers.dc1.password,devspore.dcs.redis.servers.dc1.sentinelPassword,devspore.dcs.etcd.password devspore: dcs: redis: servers: dc1: hosts: password: 密文信息 type: cluster 需做以下两步操作,实现敏感信息的解密。 新建一个Decipher接口的实现类。 1 2 3 4 5 6 7 8 9 10 11 12 13 import com.huawei.devspore.mas.password.Decipher; public class MyDecipher implements Decipher { @Override public String decode(String s) { if (s == null) { return null; } // 使用自定义的解密算法 return s; } } 在配置文件中将属性devspore.dcs.props.decipherClassName配置为实现类的全类名。 1 2 3 4 devspore: dcs: props: decipher-class-name: com.demo.MyDecipher 父主题: Mas-Redis-SDK使用手册
  • single-read-async-double-write(单边读异步双写) 使用须知:另起线程进行数据同步,不能保证异步写成功、不能保证两端数据的一致性。 图1 single-read-async-double-write部署图 读写指定异步双写,适用于读多写少场景,使用sdk同步两个redis,一条写命令会先在指定redis上执行,成功后,异步写到另一端。 本地读异步双写场景具体操作: 对于用户,不感知多个redis。 对于SDK 读操作:同步路由到到指定的redis。 写操作:同步路由到指定的redis,同时异步发送到远端redis。 此场景下可切换指定的redis。 当不同实例内SDK操作同一个redis key时,不能保证两个redis的一致性。 当SDK发生redis切换时,切换前产生的异步双写命令和切换后主流程写操作同一个redis的key时,两者不保证顺序:即有主流程写的值被异步双写覆盖。 spop命令双写不适用。 父主题: 使用场景
  • 读写分离 场景四: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。跟场景三不同之处在于,场景四中存在从库,进行读写分离,写操作在主库,读操作在从库进行。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher azs: az1 # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 数据库直接点配置, 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource // 数据源类型,自定义,目前只支持com.zaxxer.hikari.HikariDataSource,org.apache.commons.dbcp2.BasicDataSource,com.alibaba.druid.pool.DruidDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 routeAlgorithm: local-read-single-write nodes: dc1: master: ds1 loadBalance: ROUND_ROBIN slaves: - ds1-slave0 - ds1-slave1 azs: az1 dc2: master: ds2 loadBalance: ROUND_ROBIN slaves: - ds2-slave0 - ds2-slave1 azs: az2 父主题: 本地读单边写
  • local-read-async-double-write-support-readable(本地读异步双写) 使用须知:另起线程进行数据同步,不能保证异步写成功、不能保证两端数据的一致性。 本地读异步双写场景具体操作 对于用户,不感知多个redis。 对于SDK 读操作:当local redis的readable == true(在mas管理页面有设置)同步路由到到local redis, 否则, 同步路由到active redis。 写操作:当local redis的readable == true(在mas管理页面有设置)同步路由到近端redis,同时异步发送到远端redis。否则同步路由到active redis。异步写另外一端。 readable为MAS管理页面可以为redis设置的值,含义:是否可读。 图1 local-read-async-double-write-support-readable 部署图 图2 local-read-async-double-write-support-readable 部署图 (az2的redis readable==false) 父主题: 使用场景
  • 读写分离 场景二: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。跟场景一类似,同样在单边进行读写,不同之处在于,场景二中存在从库,进行读写分离,写操作在主库,读操作在从库进行。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 数据库直接点配置, 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource // 数据源类型,自定义,目前只支持com.zaxxer.hikari.HikariDataSource,org.apache.commons.dbcp2.BasicDataSource,com.alibaba.druid.pool.DruidDataSource ds1-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds1-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave0:// 从数据库节点,需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave0 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 ds2-slave1: driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1_slave1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 routeAlgorithm: single-read-write nodes: dc1: master: ds1 loadBalance: ROUND_ROBIN slaves: - ds1-slave0 - ds1-slave1 dc2: master: ds2 loadBalance: ROUND_ROBIN slaves: - ds2-slave0 - ds2-slave1 父主题: 单边读写
  • 使用场景 本模块客户端创建支持single-read-write(单读写),local-read-single-write(本地读单写),double-write(本地读双写)3种模式,其中redis节点可配置cluster(集群), master-slave(主从), normal(普通)redis服务,搭配MAS可实现多活容灾;同时内置故障注入功能可创建带有注入故障的实例,进行相关业务场景的模拟,配置修改请参考故障注入Redis配置示例。 该模块具有如下特性: 多活容灾能力 多活容灾能力是指在同城场景下实现多活故障自动切换,由SDK和MAS服务配合完成。 数据双写 读写分离由SDK实现,支持内存双写、文件双写。 故障注入 支持带注入故障的实例创建,包含延时(波动)、预设异常的故障配置。 single-read-write 单读写类似于主备库,MAS监控各节点健康状态,active节点故障自动切换至其他节点,保证多活容灾能力,节点之间进行数据同步,保证数据一致。 读操作:同步路由到active的redis。 写操作:同步路由到active的redis。 local-read-single-write 本地读单写适用于读多写少场景,读操作会根据路由算法读取近端节点,写操作遵循写入至active节点,MAS监控各节点健康状态,active节点故障自动切换至其他节点,节点之间进行数据同步。 读操作:同步路由到近端redis。 写操作:同步路由到active的redis。 double-write 本地读双写同样适用于读多写少场景,读操作直接读取近端节点,写操作在近端执行完会异步写到远端节点,不需要外部进行数据同步。 读操作:同步路由到近端redis。 写操作: 内存双写:同步路由到近端redis,同时异步发送到远端redis。 文件双写:同步路由到近端redis,同时异步写文件,定时扫描发送至远端redis。 父主题: Redis
  • 无从库 场景三: 如上图,实线为DCG指示激活AZ1,虚线为DCG指示激活为AZ2。,正常场景下,不管DCG激活哪个AZ,读操作都在本地进行;只有写操作是根据DCG激活指示,在相应的AZ进行。当某AZ 本地数据库故障,不可读时,读操作根据DCG激活指示。 配置如下: # 基础信息 - 可选项, 当配置etcd后为必选 props: version: v1 // 项目版本号,自定义 appId: xxx // 应用名称,从MAS服务实例页面查询获取 monitorId: xxx // 监控器ID,从MAS服务实例页面查询获取 databaseName: xxx // 监控器标签,从MAS服务实例页面查询获取 decipherClassName: xxx.xxx.xxx // 加解密类,需要实现基类 com.huawei.devspore.mas.password.Decipher,默认值为com.huawei.devspore.mas.password.DefaultDecipher azs: az1 // 本地的az信息,根据实际环境所属az进行填写 # etcd配置,对接MAS服务关键配置,本地模式则无需配置 etcd: address: 127.0.0.2:2379,127.0.0.2:2379,127.0.0.2:2379 //etcd地址, 从MAS服务实例页面查询获取 apiVersion: v3 // etcd版本,v3 username: etcduser // etcd用户名,从MAS服务实例页面查询获取 password: etcdpwd // etcd密码,从MAS服务实例页面查询获取 httpsEnable: false // 是否启用https certificatePath: xxx // 启用https时证书路径,忽略证书场景或不启用https场景,该配置可以不填 # 数据源配置 - 必选 sources: ds1: // 需要和MAS服务中连接池中命名一致,如果没有对接MAS服务, 下面的配置项与本地保持一致 driverClassName: com.mysql.jdbc.Driver // 驱动名称,自定义 jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds0 // 数据库地址,和MAS服务配置一致 username: datasourceuser // 用户名,和MAS服务配置一致 password: datasourcepwd // 密码,和MAS服务配置一致 type: com.zaxxer.hikari.HikariDataSource props: // 连接池参数 connectionTimeout: 30000 maximumPoolSize: 200 ds2: // 需要和MAS服务中连接池中命名一致 driverClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/ds1 username: datasourceuser password: datasourcepwd type: com.zaxxer.hikari.HikariDataSource props: connectionTimeout: 30000 maximumPoolSize: 200 # 路由配置 - 必选 router: active: dc1 // 当前激活节点 routeAlgorithm: local-read-single-write // 路由策略 nodes: dc1: master: ds1 azs: az1 dc2: master: ds2 azs: az2 父主题: 本地读单边写
  • 操作步骤 使用华为账号,登录华为云网站,在顶部导航栏右侧单击“控制台”,进入华为云控制台。 在左侧导航栏上方,单击,选择服务实例所在的区域项目。 单击,在查找框中搜索“云审计服务CTS”,单击查找到的结果,即可进入云审计服务信息页面。 在左侧导航栏中,选择“事件列表”,进入事件列表信息页面。 事件列表支持通过筛选来查询对应的操作事件。当前事件列表支持四个维度的组合查询,详细信息如下: 事件来源、资源类型和筛选类型。 在下拉框中,选择查询条件。其中,筛选类型选择事件名称时,还需选择某个具体的事件名称。 选择资源ID时,还需选择或者手动输入某个具体的资源ID。 选择资源名称时,还需选择或手动输入某个具体的资源名称。 操作用户:在下拉框中选择某一具体的操作用户,此操作用户指用户级别,而非租户级别。 事件级别:可选项为“所有事件级别”、“normal”、“warning”和“incident”,只可选择其中一项。 时间范围:可选择查询最近七天内任意时间段的操作事件。 展开需要查看的事件,查看详细信息。 在需要查看的记录右侧,单击“查看事件”,弹窗中显示了该操作事件结构的详细信息。 更多关于云审计的信息,请参见《云审计服务用户指南》。
  • 如何定义API接口 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成 ”。 也可以在“开始”页面,直接单击“新建开放接口”。 单击开放接口后的“+”,设置开放接口参数,单击“保存”。 图1 新建开放接口 标签:新建API接口的标签。 操作名称:新建API接口的操作名称。 版本:API接口的版本,格式为“x.y.z”。 URL:API接口路径, 固定以 /service/{命名空间}__{应用名}/{版本} 开头, 后面接API的具体路径。 内容类型:请求中的body类型。 其中“multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用post类型的脚本。 分类:API接口所属的分类。 描述:自定义API接口的描述信息。 允许匿名访问:是否可以匿名访问运行环境中该API接口。 勾选表示允许匿名访问,通过运行环境子域名访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做CSRF校验。匿名用户的权限为“Anonymous User Profile”,请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。例如,当该接口有配置业务权限凭证时,给“Anonymous User Profile”权限添加相应业务权限凭证,即可通过运行环境子域名匿名访问该接口。 需要支持匿名访问自定义接口的账号,必须要设置运行环境子域名。 带有合法认证信息来访问允许匿名访问的自定义接口时,优先以合法认证的身份权限来访问。 匿名用户身份访问自定义接口,不需要做CSRF校验。 不论以什么方式来访问, 认证身份后做的权限校验保持一致。如果配置了业务权限凭证,还是会查看用户权限是否配置相应业务权限凭证。 例如:登录业务应用接口“login”的URL为“/service/命名空间__MyApp/1.0.0/login”,运行环境子域名为“test.example.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.example.com/service/命名空间__MyApp/1.0.0/login”即可访问该接口。 类型:选择资源类型,只有服务编排类型的接口能够在服务编排中被调用,其他类型接口只能通过API的形式进行调用。 服务编排:定义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" } 资源:根据类型选择需要绑定的资源,如脚本,服务编排或操作的对象名称。 如果找不到需要绑定的服务编排或脚本,请检查服务编排或脚本是否启用。如果没有启用,请进入服务编排或脚本设计页面,单击页面左上角的图标,启用服务编排(图2)或脚本(图3)。 图2 启用服务编排 图3 启用脚本 对象操作:“类型”选择“对象”时,该参数才会显示。 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:按条件查询对象数据。 方法:API接口的HTTP方法。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源。 PATCH:请求服务器更新资源的部分内容。当资源不存在时,PATCH可能会去创建一个新的资源。 返回“集成”页面,单击已创建接口后的,选择“查看”,进入接口预览页面。 单击接口后的,可查看定义的API信息。 单击“测试一下”,可模拟API接口调用。 图4 API接口请求参数信息 图5 API接口返回参数信息 API接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 步骤3:进行代码托管 将AstroZero上开发的应用代码元数据归档到代码仓库。这里以归档某开发环境某个应用为例进行说明,您可对多个配置代码库的AstroZero环境的多个应用进行代码托管。 返回AstroZero开发环境首页,单击某一需要归档代码的应用,进入应用开发工作台。 在左侧导航栏中单击“代码管理”,您可以直接输入代码仓库地址,即新建代码仓库中获取的代码仓库的HTTPS方式访问地址。您也可以选定已绑定的代码仓库,单击“确认绑定”,即可绑定代码仓库。 参考图8和图9,在代码仓库下方单击“待提交”,首次归档应用代码,所有代码显示在“未暂存”下,单击后面的“+”,单击“提交到仓库”,设置归档描述信息,单击“确认”,即可归档该应用所有代码。 支持选择部分代码归档,在需要归档的代码目录后单击“+”进行操作即可。 图8 归档代码 图9 设置归档描述 在代码仓库页面的“已提交”菜单下,可查看已提交的记录。 图10 已提交记录查询 在代码仓库页面的“分支”菜单下,可查看当前代码仓库下的分支列表,支持合并到此分支。 在代码仓库页面的“分支”菜单下,单击具体需要合并的分支操作列的,单击“合并到此分支”。 图11 合并分支 在合并分支的选择分支页面单击“下一步”,检查冲突。 图12 选择分支 页面显示冲突为0,单击“下一步”,创建合并请求。 图13 创建合并请求 当存在代码冲突时,您可在代码仓库页面的“分支”菜单下,单击“解决冲突”,进入解决冲突页面。解决代码冲突后,再进入待提交页面,提交代码。 图14 解决冲突 在“仓库信息”后单击“前往仓库”,打开代码仓库首页。 在代码仓库“代码”页签下,单击“Application”,可查看应用的归档代码。 图15 查看归档应用
  • 背景信息 软件开发生产线(CodeArts)是集华为近30年研发实践、前沿研发理念、先进研发工具为一体的一站式云端DevOps平台,面向开发者提供的云服务,即开即用,让开发者快速而又轻松地开启云端开发之旅。更多介绍,请参见软件开发生产线(CodeArts)产品文档。 代码托管CodeArts Repo(原CodeHub)源自华为千亿级代码管理经验,基于Git,提供企业代码托管的全方位服务,为软件开发者提供基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支/Code Review等功能。更多介绍,可参见代码托管(CodeArts Repo)帮助文档。
  • 操作步骤 参考如何登录经典应用设计器中操作,登录经典版应用设计器。 将鼠标放在应用的某个文件夹上(如Logic),单击“+”,选择“事件流”。 开启事件流License权限后,才会有新建事件流的入口。 单击“新建”,进入“事件流”页面。 在“事件流”页面右侧,单击“设置”,进行数据配置。 图2 设置页面 窗口长度:事件流处理的数据采集时间间隔,单位为分钟。建议时间间隔不要配置过小,否则系统频繁的建表和执行SQL语句,会影响系统性能。例如:配置为“1”表示spark streaming每隔1分钟去kafka获取事件数据。 在“事件流”页面右侧,单击“图元”,拖拽“输入源”中Kafka图元至左侧画布区域,并配置基本信息,单击“保存”。 输入源中Kafka图标表示数据来自Kafka。 图3 数据来源Kafka基本信息页面 标签:新建数据源Kafka的标签名,用于在界面展示。 名称:新建数据源Kafka的名称,系统自动生成。 事件:需要订阅的事件。例如,配置为温度监测事件“temperature”。 从外部接收:是否从外部Kafka接收事件。 关闭该开关,从与AstroZero相连的Kafka接收事件。 打开该开关,从外部Kafka接收事件。本示例中关闭该开关,使用与AstroZero相连的Kafka。 Kafka集群地址:数据源Kafka的集群地址。多个节点服务器地址可用“,”间隔,格式为“Kafka节点1的ip:节点1端口号,Kafka节点2的ip:节点2端口号,...”。 获取Kafka的IP和端口号方法:登录每台Kafka节点服务器,查看“${KAFKA_HOME}/config”目录下,“server.properties”中“listeners”的取值。 订阅主题:获取的事件数据来源,即来自于kafka集群的哪个Topic。 从“图元”中,拖拽“投影”图元至左侧画布区域数据源Kafka下方,并在弹出的“添加投影器”页面配置基本信息,单击“保存”。 图4 “添加投影器”页面 标签:新建投影的标签名,用于在界面展示。 名称:新建投影的名称,系统自动生成。 输入字段:订阅事件的所有事件参数。选择所需的参数,单击,选中的参数会出现在“输出字段”中。 输出字段:从订阅事件的事件参数进行筛选后,用到的事件参数。 从“图元”中,拖拽“过滤”图元至左侧画布区域投影下方,并在弹出的“添加过滤器”页面配置基本信息和过滤条件,单击“保存”。 图5 设置过滤条件 标签:新建过滤的标签名,用于在界面展示。 名称:新建过滤的名称,系统自动生成。 条件设置:设置过滤条件。例如,图中的配置表示提取温度大于60度的事件。 字段:上一步筛选后的事件参数。 比较符:操作符,直接在下拉框中选择。 值:字段值。 (可选)从“图元”页面中,拖拽“分组”图元至左侧画布区域过滤器下方,并在弹出的“添加分组器”页面配置基本信息和分组条件,单击“保存”。 图6 “添加分组器”页面配置 标签:新建分组的标签名,用于在界面展示。 名称:新建分组的名称,系统自动生成。 分组设置:设置分组条件。例如,图中配置表示按照相同位置的大于60度的温度取温度平均值。 在“图元”页面右侧,拖拽输出源中的Kafka图元至左侧画布区域最下方,设置spark streaming输出事件和输出事件数据的接收方,单击“保存”。 可以拖拽多个Sink中的Kafka图元,设置多个事件接收方。 图7 数据接收方配置 标签:数据接收方Kafka的标签名,用于在界面展示。 名称:数据接收方Kafka的名称,系统自动生成。 事件:spark streaming输出的事件。本示例此处配置为高温报警事件“fire_alarm”。温度监测事件“temperature”中的“position”,对应高温报警事件“fire_alarm”中的“positionalarm”。温度监测事件的“temperature”,对应高温报警事件“fire_alarm”中的“temperaturealarm”。 发送到外部:是否发送到外部Kafka。若关闭该开关,表示发送到与AstroZero相连的Kafka。若打开该开关,表示发送到外部Kafka,需要配置“Kafka集群地址”和“订阅主题”。本示例中关闭该开关,使用与AstroZero相连的Kafka。 Kafka集群地址:接收事件的Kafka集群地址,例如10.136.14.56:9092。 多个节点服务器地址可用“,”间隔,格式为“Kafka节点1的ip:节点1端口号,Kafka节点2的ip:节点2端口号,...”。 获取Kafka的IP和端口号方法:登录每台Kafka节点服务器,查看“${KAFKA_HOME}/config”目录下,“server.properties”中“listeners”的取值。 接收事件的kafka集群,不需要一定配置为和AstroZero相连。 订阅主题:接收事件数据的kafka Topic,例如__BINGO_PROD_SYS_TOPIC。 事件属性/属性、值:配置输出事件与接收事件中,已定义参数的对应关系。 单击页面右上方保存按钮,设置“事件流”基本参数。 图8 该“事件流”基本参数页面 标签:新建事件流的标签名,用于在界面展示。 名称:新建事件流的名称,系统自动生成。 描述:新建事件流的描述信息。 单击页面上方的,启用事件流。
  • 结果验证 创建一个服务编排“fire_alarm”,创建后启用该服务编排,实现当kafka中出现高温报警事件时,AstroZero需要接收该事件,再向第三方系统发送该告警邮件。 鼠标放在应用下的Logic文件夹上,单击“+”,选择“服务编排”。 选择“创建一个新的服务编排”,设置标签和名称为“fire_alarm”,单击“添加”。 在服务编排设计页面左侧,拖拽“逻辑”下的“等待”图元至画布中。 单击,在“可编辑的事件”中,单击“新增”,新增“event0”分支。 配置该分支事件为高温报警事件,当系统中出现该事件时,会执行该分支。 图9 配置等待图元 拖拽“基本”下的“发送邮件”图元至画布中。 单击,设置发送邮件参数。 配置高温报警邮件的主题和内容,地址填入第三方系统的邮件接收地址。 图10 配置发送邮件图元 直接编辑:手动设置邮件信息。 基于模板:基于同一账号或基线中已有的邮件模板,设置邮件主题和内容,方便用户增加效率。 模板:选择“基于模板”时,需要选择邮件模板。 主题:设置邮件标题。 选中“直接编辑”时,需要配置邮件标题。 选中“基于模板”时,该参数配置区域置灰。 内容:设置邮件内容。 选中“直接编辑”时,需要配置邮件内容。 选中“基于模板”时,该参数配置区域置灰。 自定义变量:选中“基于模板”时,需要配置模板中的参数。在“值”中,直接输入参数取值或者从全局上下文拖拽变量。 地址:接收人的邮箱地址。 字符串:直接输入分号分隔的字符串或从全局上下文拖拽变量。 集合:从全局上下文拖拽集合变量。 抄送:抄送人员的邮箱地址,直接输入分号分隔的字符串或者从全局上下文拖拽变量。 密送:密送发送人员的邮箱地址,直接输入分号分隔的字符串或者从全局上下文拖拽变量。 按照下图连接所有图元,等待图元和发送邮件图元之间选择“event0”分支。 图11 连接所有图元 单击页面上方的,保存服务编排。 保存成功后,单击,启用服务编排。 创建一个服务编排“send_fire_event”,将温度监测事件“temperature”中位置参数“position”赋值为仓储公司某区域,温度“temperature”赋值为70度,启用该Flow,用于模拟事件发送。 鼠标放在应用下的Logic文件夹上,单击“+”,选择“服务编排”。 选择“创建一个新的服务编排”,设置标签和名称为“send_fire_event”,单击“添加”。 在服务编排编辑器页面左侧,拖拽“基本”下的“发送事件”图元至画布中。 单击,设置发送事件参数。 图12 配置发送事件图元 事件:选择待发送的事件。 分区字段:从事件中选择一个自定义参数用作Kafka的分区字段,则根据该字段值进行路由,相同的值将路由到同一个Kafka分区。如果不指定,则默认随机路由到不同Kafka分区,从而提升并发处理性能。 发送到外部:系统内部有配置与AstroZero相连Kafka的固定Topic“__BINGO_SYS_TOPIC”。若不勾选“发送到外部”,表示将事件数据发到默认的Topic上。若勾选“发送到外部”,则表示将事件数据发送到与AstroZero相连Kafka的其他Topic上。 延迟到事务结束(提交或回滚)后才发送:是否延迟到该服务编排事务结束后,才发送事件。 主题:勾选“发送到外部”时,才显示该参数,表示非系统配置的默认Topic。 目标/源:配置事件数据。 本示例中,“目标”请从下拉框中选择事件的自定义参数“temperature”和“position”,在“源”中给目标赋值。 按照下图连接所有图元。 图13 连接图元 单击页面上方的,保存服务编排。 保存成功后,单击,启用服务编排。 在“事件流”列表页面,单击该事件流程所在行的,运行该事件流程。 单击服务编排“send_fire_event”编辑器上方的,执行服务编排。 不用输入任何输入参数,直接单击“运行”。 参考上一步,执行服务编排“fire_alarm”。 不用输入任何输入参数,单击“运行”。 打开第三方系统邮箱,成功收到高温警报邮件,验证成功。
  • 前提条件 请联系运维,开启事件流License权限。开启后,才可新建、查看并管理事件流。 已创建并启用温度监测事件“temperature”,该事件中自定义参数为文本类型“position”和数字类型“temperature”,分别表示位置和温度,具体操作步骤请参考如何自定义事件。 已创建并启用高温报警事件“fire_alarm”,该事件中自定义参数为文本类型“positionalarm”和数字类型“temperaturealarm”,分别表示高温报警位置和温度,具体操作步骤请参考如何自定义事件。
  • 背景信息 首先,您需要理解以下概念: kafka:是由Apache开发的一个开源流处理平台,是分布式发布、订阅消息系统。kafka主要用于处理活跃的流数据,一般kafka部署为集群模式。 Topic:用来区分kafka集群中,不同类型消息的主题。例如,应用程序A订阅了Topic1,应用程序B订阅了Topic2而没有订阅Topic1,那么发送到Topic1中的数据将只能被应用程序A读到,而不会被应用程序B读到。 spark streaming:大规模流式数据处理工具,第三方工具。
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成”。 单击开放接口后的,进入新建开放接口页面。 设置接口参数,单击“保存”。 图1 新建接口 表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/命名空间__MyApp/1.0.0/login”,运行环境子域名为“test.example.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.example.com/service/命名空间__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(删除)。 接口创建完成后,支持在线测试。 在新版应用设计器的导航栏中,选择“集成”。 在开放接口中,单击对应接口后的,选择“查看”,进入接口预览页面。 在接口预览页面,单击URL后的。 单击“测试一下”,如果有输入参数,设置输入参数后,单击“执行”。 成功响应,表示接口调用成功。
  • 如何导入导出数据 实例化数据可以通过AstroZero平台的“数据导出”功能,以对象的方式导出到本地。安装实例化数据,可以通过平台的“数据导入”功能实现。关于数据的导入导出操作,请参见如何导入导出数据。 数据修改后,升级没变化:不是同一条数据,即ID不一致。 对象存在,但数据导出里面找不到该表:开发界面里对象属性“允许API批量访问”未勾上。 报错“parsing request parameters content of JSON failed: 'record'”:表中存在lookup/masterdetail类型的字段,该字段的值必须为id,不能是普通的值。 报错“file server exception, receive response failed, TrackerTask RecvHeader recv resp status 28 != 0”:文件服务器异常,需要咨询运维处理。
  • 什么是实例化数据包 实例化数据是应用需要自带的预设数据,用于支持应用的默认行为。 在AstroZero平台中,实例化数据包是由以下三种类型数据的整体或部分构成的数据压缩包: 系统对象数据 AstroZero系统定义的实例化数据主要是用户在开发应用过程中平台产生或用户使用平台功能生成的,在应用安装完成后能够进行配置的数据。 标准对象数据 AstroZero平台内部自带的或第三方提供的标准对象数据,标准对象实例化数据包括了平台内置的(例如Account、Contact)以及订购了基线应用所提供的对象的实例化数据。 自定义对象数据 由用户通过建立自定义对象,并通过界面或接口生成的记录数据。 应用在发布时,包含一些初始化的数据,可通过单击,使用SQL语句查询对象及对象的数据,详情可参考使用控制台分析查询SQL。
  • 步骤1:创建自定义连接器 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成”。 单击“连接器”中的“ 连接器实例”,进入连接器实例页面。 在类型中,选择“自定义连接器”,进入自定义连接器页面。 单击“+”,配置连接器信息,单击“保存”。 图2 创建自定义连接器 标签:REST服务的标签名。 名称:REST服务的名称,系统会自动在该名称前添加命名空间__。 图标:REST服务的图标。 描述:REST服务的相关描述信息。 在“动作”页签中,新建自定义连接器动作,设置动作的基本信息,单击“下一步”。 图3 新建动作-设置基本信息 (可选)设置消息头入参,单击“下一步”。 若此接口没有消息头输入参数,则不需要配置参数,请删除第一行参数。若有消息头输入参数,且有多个,请单击“新增”。 图4 消息头入参配置页面 设置输入参数,单击“下一步”。 该步骤配置的是请求的路径或消息体对应的内容,由参数的“参数位置”决定是路径参数还是消息体参数。 此案例中,我们要配置一个URL查询参数为key,请求体参数request的入参。 图5 输入参数配置页面 设置输出参数,单击“保存”。 配置输出的参数,取决于“参数位置”,该参数可能来自于响应消息头或者请求消息头。此案例中,我们了解到响应体有一个response的参数。 图6 输出参数配置页面 在动作页签,单击该动作所在行的,启用该动作。
  • 场景描述 通过使用AstroZero的自定义连接器、服务编排或脚本功能,带您快速对接一个外部服务的接口并暴露为自己的接口。在此案例中,假设您需要对接一个已有的Rest服务,通过Rest服务获取数据并加工,最终暴露为自己的服务接口。 以表1中的Rest服务接口为例,介绍如何在AstroZero中配置对应的自定义连接器。 表1 Rest服务接口 参数 值 路径 https://example.com/path/to/data?key=value 请求方法 POST 请求头 X-Header 请求体类型 application/json 请求体参数 { “request”: “value” } 响应体类型 application/json 响应体参数 { “response”: “value” }
  • Astro Bot权限管理 只有华为账号或具有表1中相关权限的IAM用户,才能使用华为云Astro智能助手(Astro Bot)中的相关功能。例如,进行技能开发时,IAM用户需要具备“OneTalk DeveloperAccess”权限。进行技能审核时,需要具备“OneTalk FullAccess”权限。如何给IAM用户授权,请参见给IAM用户授权。 表1 权限说明 权限 作用范围 权限说明 OneTalk DeveloperAccess 区域级项目 华为云Astro智能助手(Astro Bot)技能、版本和API开发权限。 OneTalk ReadonlyAccess 区域级项目 华为云Astro智能助手(Astro Bot)只读权限。 OneTalk FullAccess 区域级项目 华为云Astro智能助手(Astro Bot)所有权限。 OneTalk AdminAccess 区域级项目 华为云Astro智能助手(Astro Bot)技能、版本、API开发权限及审核发布权限。 父主题: 初识Astro Bot
  • 使用说明 为了降低应用开发成本,让用户通过拖拽的方式,快速完成应用的搭建,低代码平台提供了丰富的应用模板。用户可以直接使用应用模板快速创建应用,也可以使用标准页面模板创建页面。页面模板包括预置模板(通用模板)和自定义模板两大类。 预置模板(通用模板) 基础表单:基本的表单页面。 多区域表单:有间隔区域的多区域表单页面。 基础表格:单张表生成表格模板,包含增、删、改、查。 基础详情页面:基础的详情页面。 自定义模板(我的模板) 用户自定义的页面模板,开发好页面后,单击上方的另存为,即可创建自定义页面模板。创建后,该开发者用户、注册AstroZero的华为账号、华为账号下其他AstroZero用户都可直接使用该页面模板来创建标准页面。
  • 通过REST接口调用连接器 可以通过调用REST接口,完成表1中功能。如何调用接口,请参见连接器API。 表1 调用连接器 接口 说明 上传文件 将本地文件上传到存储中。使用该API上传文件,默认只会上传到连接器下配置的第一个桶中。待上传的文件可以是任何类型,如文本文件、图片、视频等。 下载文件 从存储中下载文件。 删除文件 从存储中删除无用的文件。 删除目录 从存储中删除某目录。如果目录下不为空,删除目录的同时也会删除该目录下文件。 列举目录下文件 列举存储中某目录下文件。 分段上传 对于较大文件上传,可以切分成段上传。用户可以在如下的应用场景内(但不仅限于此),使用分段上传的模式: 上传超过100MB大小的文件。 网络条件较差,和OBS等存储服务端之间的链接经常断开。 上传前无法确定将要上传文件的大小。 获取endpoint,即文件存储地址的前缀 endpoint为文件存储地址的前缀,该前缀加上传对象的路径,是实际访问对象的全路径。 分享Token 获取临时Token,用户只要使用该临时Token即可访问文件,不用再使用access-token进行鉴权。
  • 前提条件 使用OBS前,需要拥有一个华为账号或一个可用于访问OBS的IAM用户,即先注册华为云并实名认证、创建IAM用户、充值以及购买资源包,具体操作请参见使用OBS前需要做的准备工作。 获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对,具体操作请参见获取AK/SK。 已在华为OBS上,创建存储桶(例如“bing.testonly.1”),用于后续存储对象使用,具体操作请参见如何创建桶,请记录创建桶时选择的区域。
  • 应用安装场景 应用开发编译发布成应用包后,可在开发环境、沙箱环境和运行环境中安装使用。应用包典型安装场景,有如下两种: 应用包的开发者租户,可以在当前租户的运行环境以及沙箱环境安装应用资产包,安装后进行测试或直接部署运行该应用。 其他租户可以在开发环境安装应用源码包,进行二次开发、参考或查看。在沙箱环境、运行环境中安装应用资产包,进行测试或直接部署运行该应用。 什么是源码包?与资产包有什么区别,详情介绍请参见导入导出应用源码包。
  • 安装应用有哪些方式 AstroZero低代码平台提供了如何通过导入方式安装应用和如何在我的仓库安装应用两种应用安装方式,请根据实际操作场景,选择安装应用的方式。应用安装场景及对应的安装方式介绍,如表1所示。 表1 应用安装场景及方式 场景 应用包来源 安装方式 安装环境 用途 安装当前租户 我的仓库 我的仓库 沙箱、运行环境 测试、部署运行 线下获取的应用资产包 导入方式 沙箱、运行环境 测试、部署运行 安装其他租户的应用 线下获取的应用源码包/资产包 导入方式 开发环境 二次开发、参考或查看 说明: 导入应用源码包支持二次开发,导入资产包只支持查看。如何编译应用包,请参见导入导出应用源码包。 线下获取的应用资产包 导入方式 沙箱、运行环境 测试、部署运行
  • 在脚本中调用连接器 在脚本中,调用已创建的连接器,实现用户登录微信公众号。 在微信客户端的H5页面,发起AJAX请求,用于获取code。 请求示例如下: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。 参考脚本开发实例中操作,创建一个空白脚本。 在脚本编辑器中,输入如下代码。 import * as wechat from 'wechat'; let connectorID = "whchat" let code = "xxxxx" let client = wechat.NewClient(connectorID) let res = client.GetAccessToken(code) console.log(res) 其中,“connectorID”为连接器的名称,“code”为1获取的code取值。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,执行脚本。 不用输入请求报文,直接单击测试窗口右上角的。 在日志页签,查看到已获取“access_token”和“openid”,可用于登录微信公众号。 { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
  • 服务编排基本能力 拖拉拽式编排流程 以往的传统编程,需要进行变量的声明并编写相应逻辑代码进行服务的开发。使用服务编排进行服务开发,能够通过拖拉拽的方式,将配置项创建的变量以及服务编排中提供的各种功能进行编排,并以流程的方式将服务所要实现的功能展现出来。整个开发过程中无需进行代码的编写,简单快捷,并能够图形化展示服务的逻辑。 逻辑处理 服务编排中提供了逻辑处理的图形化元件,包括赋值、循环、跳出循环、决策和等待。通过这些图元能够实现基本的逻辑处理,并图形化展示,便于开发者理解,详情可参见操作步骤中对逻辑处理图元的使用。 对象处理 服务编排中提供了对象处理的图形化元件,包括记录创建、记录查询、记录更新和记录删除。通过这些图元能够对通过平台创建的自定义对象或标准对象进行相应的增、删、改、查操作,简化处理对象数据的流程,提高开发效率,详情可参见如何使用服务编排开发数据的增删改查中对象处理图元的使用。 服务单元组合脚本、原生服务、BO和第三方服务 服务编排中提供了服务单元组合的图形化元件,包括脚本、子服务编排、原生服务、BO和连接器。通过这些图元能够将平台中已开发完成的服务集成到服务编排中,并重新进行组合,快速扩展出更丰富的业务功能。
  • 服务编排与模块间调用关系 服务编排将平台提供的部分功能模块进行了封装,并提供了平台其他模块调用服务编排的能力,下面介绍其他模块与服务编排是如何进行相互调用的。 脚本 在服务编排中,可通过配置脚本图元,选择当前应用中的脚本,进行脚本的调用。 在脚本中,可以通过引入sys库,再执行“sys.invokeFlow({Flow_Name})”,进行服务编排的调用。其中,“Flow_Name”为服务编排的名称。 对象 在服务编排中,可以通过配置记录创建、查询、更新和删除图元,对当前应用中的对象记录进行增删改查,详情请参见如何使用服务编排开发数据的增删改查。 标准页面 在标准页面的模型视图中,新建服务模型,能够绑定服务编排,进行服务编排的调用。 工作流 在工作流中,可以通过配置“调用服务编排”活动,选择相应的服务编排,进行服务编排的调用。 API接口 在新建接口时,选择资源类型为“服务编排”,并选择相应的服务编排,即可将服务编排绑定到服务接口上,通过API接口进行服务编排的调用。 BO 在服务编排中,调用BO(BO是封装了完整的数据模型、业务逻辑、页面展现的软件单元)进行使用,详情请参见BO图元。 连接器 在服务编排中,调用与第三方系统对接的接口,如对接短信发送、云存储、系统中已定义的Action等,详情请参见连接器图元。 服务编排中只允许调用当前应用工程下的资源,如对象、脚本。例如,服务编排A中需要调用脚本B,请确保A和B处于同一应用中。若需要调用的资源不在同一应用中,则在服务编排A所在的应用中新建脚本B,或选择“使用已有脚本”导入脚本B,再在服务编排A中调用该脚本。 图1 通过“使用已有脚本”导入脚本
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成”。 在开放接口后,单击,进入新建开放接口页面。 设置开放接口参数。 图1 开放接口配置页面 表1 新建开放接口参数说明 参数 参数说明 标签 新建接口的标签。 操作名称 新建接口的操作名称。 版本 URL对应的版本号。 URL 新URL地址,其中“/service”为固定值,其次是“/App名称/版本号”,剩下部分进行自定义。 自定义的URL需要符合一定规则,规则如下: 必须以单个“/”开头。 可以配置多级路径,两个或者多个“/”之间必须有内容。 内容类型 请求中的body类型。 application/json multipart/form-data binary-data “multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用POST类型的脚本。 分类 新建接口所属的分类。 描述 新建接口的描述信息,建议设置为API的作用。 允许匿名访问 是否可匿名访问运行环境中,该API接口。 勾选表示允许匿名访问,通过运行环境子域名访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做CSRF校验。匿名用户的权限为“Anonymous User Profile”,请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。如当该接口有配置业务权限凭证时,给“Anonymous User Profile”权限添加相应业务权限凭证,即可通过运行环境子域名匿名访问该接口。 说明如下: 需要支持匿名访问自定义接口的账号,必须要设置运行环境子域名。 带有合法认证信息来访问允许匿名访问的自定义接口时,优先以合法认证的身份权限来访问。 匿名用户身份访问自定义接口,不需要做CSRF校验。 不论以什么方式来访问, 认证身份后做的权限校验保持一致。如果配置了业务权限凭证,还会查看用户权限,是否配置了相应的业务权限凭证。 例如:登录业务应用接口“login”的URL为“/service/命名空间__MyApp/1.0.0/login”,运行环境子域名为“test.example.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.example.com/service/命名空间__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(删除)等。 输入参数/输出参数 展示服务编排的入参、出参,同时支持修改未受保护资源的参数描述。由于开发人员在开发服务编排过程中,可能未设置或未精确添加参数的描述信息,导出自定义接口的yaml描述文档时对参数的描述就会缺失或模糊。在开放接口二次封装服务编排时,可对参数描述进行编辑补充。 当“类型”选择为“服务编排”时,该参数才会显示。 设置完成后,单击“保存”。 保存后,进入接口详情页。在接口详情页的“基本信息”区域,勾选“是否已废弃”后,可配置是否推荐使用该接口。若不推荐使用,勾选“是否已废弃”,勾选后,在后续使用到该接口时,会显示该接口“已废弃”的提示,但接口仍可被调用。 接口创建完成后,支持在线进行测试。 在新版应用开发设计器左侧的导航栏中,选择“集成”。 在开放接口中,单击对应接口后的,选择“查看”,进入接口预览页面。 在接口预览页面,单击URL后的。 单击“测试一下”,如果有输入参数,设置输入参数后,单击“执行”。 返回成功响应,表示接口调用成功 。
共100000条