云服务器内容精选

  • 如何定义API接口 参考登录经典应用设计器中操作,进入经典版应用设计器。 单击页面左下角的“服务”,进入服务管理页面。 图1 服务 图2 服务管理界面 私有接口:使用私有接口,可以将服务编排的URL映射到内部网关,提供给内部脚本、服务编排等流程调用。对于BO可以定义私有接口。 公共接口:使用公共接口,可以将服务编排、脚本或对象的URL映射到外部网关,第三方可以通过OAuth2.0调用。 内部网关:仅当前租户能够访问映射到内部网关中的自定义接口,即只有同一租户下的脚本、服务编排等才能调用发布的私有接口。 外部网关:其他租户或第三方系统均可访问映射到外部网关中的自定义接口。 单击“新建”,设置接口参数后,单击“保存”。 标签:新建API接口的标签。 操作名称:新建API接口的操作名称。 版本:API接口的版本,格式为“x.y.z”。 URL:API接口路径, 固定以 /service/{命名空间}__{应用名}/{版本} 开头, 后面接API的具体路径。 内容类型:请求中的body类型。 其中,“multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用post类型的脚本。 分类:API接口所属的分类。 描述:自定义API接口的描述信息。 允许匿名访问:是否可以匿名访问运行环境中该API接口。 勾选表示允许匿名访问,通过运行环境子 域名 访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做 CS RF校验。匿名用户的权限为“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" } 资源:根据类型选择需要绑定的资源,如脚本,服务编排或操作的对象名称。 如果找不到需要绑定的服务编排或脚本,请检查服务编排或脚本是否启用。如果没有启用,请进入服务编排或脚本设计页面,单击页面左上角的图标,启用服务编排(图3)或脚本(图4)。 图3 启用服务编排 图4 启动脚本 对象操作:“类型”选择“对象”时,该参数才会显示。 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接口调用。 图5 API接口请求参数信息 图6 API接口返回参数信息 API接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 自定义OAuth2授权码模式接入鉴权 配置OAuth管理中介绍了第三方系统访问AstroZero时,如何配置接入鉴权,通过鉴权认证的第三方系统才可访问AstroZero。在AstroZero中开发的应用也可以通过自定义OAuth2授权码模式接入鉴权,当应用配置鉴权后,只有通过鉴权的第三方系统才可访问应用。 参考配置OAuth管理中操作,获取鉴权ID“client_id”和鉴权密钥“client_secret”。 在经典版应用设计器的服务中,开发者通过自定义接口,给第三方接入调用,用于第三方系统获取授权码code。 应用调用脚本API,判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时匹配。 如果匹配,则由平台应用自定义接口,实现登录跳转和授权跳转。在授权完成后,再调用脚本API获取授权码code,并将需要展示给第三方的授权用户信息,通过该API传给AstroZero,AstroZero会返回一个code,然后应用重定向到“redirect_url”,并携带code。 判断第三方客户端的鉴权ID“client_id”和重定向地址“redirect_url”是否和注册接入鉴权时,匹配的API样例如下: // Here's your code. import * as oauth from 'oauth' let handle = oauth.getAuthorizeHandle() let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c", } let pass = handle.checkURL(clientDatas) console.log(pass) //true if (pass){ //判断是否登录,做登录跳转 //判断是否授权,做授权跳转 } 获取授权码code的脚本API样例如下: // Here's your code. import * as oauth from 'oauth' let handle = oauth.getAuthorizeHandle() //前面步骤已经走完 let clientDatas: oauth.clientDataFromApp = { redirect_uri: "http://10.26.30.68:14000/appauth/code", client_id: "bff4398905ee4a918722debec98b594c", } let userInfo = { "name": "jack", "phone": "1256287222", "email": "example.com" } let code = handle.getAuthCode(clientDatas, userInfo) console.log(code) //WEUcqXbeQDKUHxcn8til3Q 第三方系统接收到该请求,并解析出code后,在自己的后端访问AstroZero接口获取access_token,其步骤和配置OAuth管理中一致。 第三方系统在获取到access_token后,使用该凭证访问平台“https://AstroZero域名/u-route/baas/oauth/v1.0/third/userinfo”接口,来获取授权用户的信息。 响应示例如下: { "resCode": "0", "resMsg": "成功", "result": { "email": "example.com", "name": "jack", "phone": "1256287222" } }
  • Oozie Java接口介绍 Java API主要由org.apache.oozie.client.OozieClient提供。 表1 接口介绍 方法 说明 public String run(Properties conf) 运行job public void start(String jobId) 启动指定的job public String submit(Properties conf) 提交job public void kill(String jobId) 删除指定的job public void suspend(String jobId) 暂停指定的job public void resume(String jobId) 恢复指定的job public WorkflowJob getJobInfo(String jobId) 获取job信息 父主题: 常用Oozie API接口介绍
  • 如何使用自定义错误码 自定义错误码创建完成后,可在脚本中使用。在脚本中,调用抛出错误信息的error函数I18nError('ErrorCodeName','变量1','变量2')。该函数中,输入参数为错误码名称"t__testErrorCode"和错误码信息中所携带的变量("val1"和"val2")。 创建脚本。 在经典版应用设计器中,将鼠标放在某个文件夹上,单击加号,选择“脚本”。 图3 选择脚本 设置脚本的名称,模板选择“空脚本”,单击“添加”。 图4 创建一个空脚本 在脚本编辑器中,输入如下代码。 // test custom error func , get diff language error by user lang import * as error from 'error'; export class TestDemo { @action.method({ label: 'test', description: 'error code', input: 'No input', output: 'No output' }) public test() { //使用I18nError函数设定错误码和错误码信息携带变量 throw new error.I18nError('t__testErrorCode', ["val1", "val2"]); } } 其中,“t__testErrorCode”为自定义错误码名称,请根据实际情况配置。 单击,保存脚本后,单击,启用脚本。 按照如何开放API接口中操作,绑定上述开发的脚本,进行测试。 图5 自定义错误信息测试
  • 自定义错误码 参考登录经典应用设计器中操作,登录经典版应用设计器。 在页面左下方,单击“配置”。 图1 选择配置 在自定义错误码页签,单击“新建”,进入新建错误码页面。 也可以单击“导入”,选择系统中已创建的错误码进行导入。 设置错误码参数,单击“保存”。 图2 新建错误码 名称:自定义的错误码,建议以字母开头,长度不超过64个字节,包括命名空间。 类别:新建错误码所属的分类。 Http状态码:选择Http协议状态码。 语言:根据需要,选择所需的语言类型。单击“新增”,可添加多语言错误码。若待添加的语言不存在,可单击语言后的。在提示信息中,单击“翻译工作台”,跳转至翻译工作台配置页面进行添加。 格式:错误码的信息描述,支持使用{Number}表示变量名。例如 ,{0} 表示第一个输出变量,{1} 表示第二个输出变量,以此类推。
  • Oozie Java接口介绍 Java API主要由org.apache.oozie.client.OozieClient提供。 表1 接口介绍 方法 说明 public String run(Properties conf) 运行job public void start(String jobId) 启动指定的job public String submit(Properties conf) 提交job public void kill(String jobId) 删除指定的job public void suspend(String jobId) 暂停指定的job public void resume(String jobId) 恢复指定的job public WorkflowJob getJobInfo(String jobId) 获取Job信息 父主题: 常用Oozie API接口介绍
  • Oozie Java接口介绍 Java API主要由org.apache.oozie.client.OozieClient提供。 表1 接口介绍 方法 说明 public String run(Properties conf) 运行Job。 public void start(String jobId) 启动指定的Job。 public String submit(Properties conf) 提交Job。 public void kill(String jobId) 删除指定的Job。 public void suspend(String jobId) 暂停指定的Job。 public void resume(String jobId) 恢复指定的Job。 public WorkflowJob getJobInfo(String jobId) 获取Job信息。 父主题: 常用Oozie API接口介绍
  • 创建执行动作 连接器需要添加执行动作(连接器具有的功能)并发布后,才能被使用。 在连接器详情界面,在“执行动作”页签,单击“创建执行动作”。 配置执行动作基本信息,如图3所示,请参考表2。 图3 配置执行动作基本信息 表2 执行动作基本信息说明 参数 说明 示例 名称 必填项。 执行动作的名称,根据规划自定义。建议您按照一定的命名规则填写执行动作的名称,方便您快速识别和查找。 IP地址查询 类型 必选项。 API:通过调用API的方式创建执行动作。 函数:通过自定义函数的方式创建执行动作。函数类型支持 CDM 集成。 流:通过编排流的方式创建执行动作。 API 可见性 必选项。 可见:在流编排中该执行动作可见。缺省值为“可见”。 隐藏:在流编排中该执行动作不可见。 可见 描述 选填项。 连接器的描述信息,该描述将显示在连接器的详情中,帮助用户了解连接器。 IP地址查询 单击“下一步”。 配置执行动作输入信息,如图4所示,请参考表3。 根据被调用的接口请求信息配置参数。 图4 配置执行动作输入信息 表3 执行动作输入信息说明 参数 说明 示例 接口路径 请求方式:被调用API的请求方式。 请求路径:被调用API的请求路径。 GET /lundear/qryip 输入参数 请求头(Header) HTTP请求消息的组成部分之一,请求头负责通知服务器有关于客户端请求的信息。 - 请求体(Body) 当请求方式为“GET”或“DELETE”时,此参数不可配置。 HTTP请求消息的组成部分之一,请求体呈现发送给服务器的数据。 - 查询参数(Query) 查询参数会追加到URL。 参数名称:ip 显示字段:ip地址 必填:勾选 参数类型:string 路径参数(Path) 路径与路径模板一起使用,其中参数值实际上是操作URL的一部分。 - 单击“下一步”。 配置输出信息。 根据被调用的接口响应信息配置参数。 如图5所示,请参考表4。 单击“确定”,在批量导入的参数中填写显示字段别名方便阅读。如图6所示。 图5 配置执行动作输出信息1 图6 配置执行动作输出信息2 表4 执行动作输出信息说明 参数 说明 示例 添加响应 被调用API的响应码信息。缺省值为“200(请求成功)”。 200(请求成功) 输出参数 响应体(Body) HTTP响应消息的组成部分之一,响应体呈现发送给服务器的数据。 说明: 如果响应体使用XML格式,XML header参数必须配置。 { "status": 0, "message": "Success", "request_id": "2dd71feb-2f7a-4426-b905-4c3ff4dcceb4", "result": { "ip": "112.36.236.188", "location": { "lat": 36.68013, "lng": 117.06533 }, "ad_info": { "nation": "中国", "province": "山东省", "city": "济南市", "district": "历城区", "adcode": 370112 } } } 响应头(Header) HTTP响应消息的组成部分之一,响应头负责通知服务器有关于客户端请求的信息。 - 单击“保存”。 创建执行动作后,系统自动返回至连接器详情页面,执行动作显示在“执行动作”页签列表中。连接器“状态”变为“待发布”。
  • 响应示例 状态码: 200 OK { "result" : { "steps" : [ { "properties" : { "image" : "maven3.5.3-jdk8-open", "snapshotArtifact" : { "displayName" : "", "value" : "" }, "userPrivateRepositories" : [ ], "deal" : "notDeal", "dependencyCheckParam" : " ", "userPublicRepositories" : [ ], "settingMode" : "auto", "doCheck" : "disable", "junitCoverageSwitch" : false, "coverageReportPath" : "**/site/jacoco", "releaseArtifact" : { "displayName" : "", "value" : "" }, "cacheOption" : "cached", "command" : "# 功能: 打包\n# 参数说明:\n#\t\t-Dmaven.test.skip=true:跳过单元测试\n#\t\t-U:每次构建检查依赖更新,可避免缓存中快照版本依赖不更新问题,但会牺牲部分性能\n#\t\t-e -X :打印调试信息,定位疑难构建问题时建议使用此参数构建\n#\t\t-B:以batch模式运行,可避免日志打印时出现ArrayIndexOutOfBoundsException异常\n# 使用场景: 打包项目且不需要执行单元测试时使用\nmvn package -Dmaven.test.skip=true -U -e -X -B\n\n#功能:打包;执行单元测试,但忽略单元测试用例失败,每次构建检查依赖更新\n#使用场景: 需要执行单元测试,且使用构建提供的单元测试报告服务统计执行情况\n# 使用条件:在”单元测试“中选择处理单元测试结果,并正确填写测试结果文件路径\n#mvn package -Dmaven.test.failure.ignore=true -U -e -X -B\n\n#功能:打包并发布依赖包到私有依赖库\n#使用场景: 需要将当前项目构建结果发布到私有依赖仓库以供其它maven项目引用时使用\n#注意事项: 此处上传的目标仓库为CodeArts私有依赖仓库,注意与软件发布仓库区分\n#mvn deploy -Dmaven.test.skip=true -U -e -X -B", "file" : "**/TEST*.xml", "dependencyProjectDir" : "./", "ignoreTest" : false, "pomMode" : "no", "dependencySettings" : "~/.m2/settings.xml" }, "module_id" : "devcloud2018.codeci_action_20043.action", "name" : "Maven构建", "version" : null, "enable" : true }, { "properties" : { "image" : "shell4.2.46-git1.8.3-zip6.00", "buildVersion" : "", "file" : "**/target/*.?ar", "groupId" : "", "name" : "" }, "module_id" : "devcloud2018.codeci_action_20018.action", "name" : "上传软件包到软件发布库", "version" : null, "enable" : true } ], "arch" : "x86-64", "project_id" : "a287e712be6c404ca26e5f69040fa12b", "job_name" : "oychap213i2", "job_id" : "35b6c7da9e644dbbb7e333579f89dcda", "auto_update_sub_module" : "false", "flavor" : "2u8g", "parameters" : [ { "name" : "hudson.model.StringParameterDefinition", "params" : [ { "name" : "name", "value" : "codeBranch", "limits" : null }, { "name" : "type", "value" : "normalparam", "limits" : null }, { "name" : "defaultValue", "value" : "master", "limits" : null }, { "name" : "description", "value" : "代码分支,系统预定义参数", "limits" : null }, { "name" : "deletion", "value" : "false", "limits" : null }, { "name" : "defaults", "value" : "true", "limits" : null }, { "name" : "staticVar", "value" : "false", "limits" : null }, { "name" : "sensitiveVar", "value" : "false", "limits" : null } ] } ], "scms" : [ { "branch" : "master", "url" : "git@codehub.devcloud.cn-north-7.ulanqab.huawei.com:soso-test00001/an.git", "is_auto_build" : false, "scm_type" : "codehub", "end_point_id" : null, "web_url" : "https://devcloud.cn-north-7.ulanqab.huawei.com/codehub/2111746211/home", "source" : null, "build_type" : "branch", "depth" : "1", "repo_id" : "2111746211" } ], "host_type" : "devcloud" }, "error" : null, "status" : "success" }
  • 前提条件 已有通过实名认证的华为企业账号或 IAM 用户。 已开通MSSI服务。 如何开通MSSI服务,请参考开通并购买MSSI服务。 使用API接口创建流指导用户快速将API接口封装为连接器,进行流编排。这里以“通过邮件将IP地址查询结果发送到个人”为例。 用户将IP地址查询能力接口封装为连接器,其余连接器使用系统预置的公共连接器。 操作流程,如图1所示。 图1 操作流程图 父主题: 使用API接口创建流
  • URI URI格式 /federated/v1/agent/report 参数说明,如表1所示。 表1 参数说明 参数 是否必选 类型 说明 agentId Y String 本次联邦注册唯一标识ID taskId N String 当前联邦任务ID。如果为空,表示当前上报信息为联邦任务前指标上报,如准确率。 taskStatus N String 任务状态。 取值如下所示: Accepted:接收 Running:运行中 Finished:完成 Failed:失败 reportData Y String 上传json格式的KPI数据,如数据量、训练时长、准确率等。
  • 请求 请求样例 post https://endpoint/federated/v1/agent/report { "agentId": "agentId-xxx","taskId": "training_taskId-xxx","taskStatus": "Finished","reportData": "{"spendTime":"6000","dataNumber":"10000","xxx":"xxx"}",}