云服务器内容精选

  • 自定义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": "dsfsdf.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": "dsfsdf.com", "name": "jack", "phone": "1256287222" } }
  • 创建执行动作 连接器需要添加执行动作(连接器具有的功能)并发布后,才能被使用。 在连接器详情界面,在“执行动作”页签,单击“创建执行动作”。 配置执行动作基本信息,如图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响应消息的组成部分之一,响应头负责通知服务器有关于客户端请求的信息。 - 单击“保存”。 创建执行动作后,系统自动返回至连接器详情页面,执行动作显示在“执行动作”页签列表中。连接器“状态”变为“待发布”。
  • 手动导入 通过主页面的“更多功能”选项或单击左上角搜索框旁边的,可以展示当前支持的导入选项,可根据需要选择。 导入文件 选择响应格式的文件并上传,然后选择文件中系统识别出来的接口和数据模型导入。 一个文件导入后,将会视为一个根目录,一个根目录中不允许存在URL相同的接口。 文件重复导入,则新接口默认覆盖原接口。 Postman支持Collections和Environment数据集ZIP包的全量导入,也支持单个Collection文件导入。 导入URL 选择“导入Swagger URL”,输入URL,即可完成文档导入。 通过Swagger URL导入时,需要填写json数据文件的URL,而非Swagger UI的URL。
  • 手动导入 通过主页面的“更多功能”选项或单击左上角搜索框旁边的,可以展示当前支持的导入选项,可根据需要选择。 导入文件 选择响应格式的文件并上传,然后选择文件中系统识别出来的接口和数据模型导入。 一个文件导入后,将会视为一个根目录,一个根目录中不允许存在URL相同的接口。 文件重复导入,则新接口默认覆盖原接口。 Postman支持Collections和Environment数据集ZIP包的全量导入,也支持单个Collection文件导入。 导入URL 选择“导入Swagger URL”,输入URL,即可完成文档导入。 通过Swagger URL导入时,需要填写json数据文件的URL,而非Swagger UI的URL。
  • 如何定义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接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 响应示例 状态码: 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" }
  • 响应参数 状态码: 400 表3 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应参数 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 OK { "total" : 1, "jobs" : [ { "id" : "2a86c3c1ed18416399279fe6........", "job_name" : "demo", "job_creator" : "ae22fd035f354cfa8d82a3f1........", "user_name" : "test", "last_build_time" : 1608004535000, "health_score" : 75, "source_code" : "test", "last_build_status" : "blue", "is_finished" : true, "disabled" : true, "favorite" : true, "is_modify" : true, "is_delete" : true, "is_execute" : true, "is_copy" : true, "is_forbidden" : true, "is_view" : true } ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 jobs Array of Job objects 任务列表 total Integer 任务总数 表5 Job 参数 参数类型 描述 id String 任务ID job_name String 任务名称 job_creator String 任务创建者 user_name String 用户名称 last_build_time Number 最新执行时间 health_score Integer 健康分值 source_code String 代码来源 last_build_status String 最新构建状态 is_finished Boolean 是否已结束 disabled Boolean 是否已禁用 favorite Boolean 是否已收藏 is_modify Boolean 是否有修改任务权限 is_delete Boolean 是否有删除任务权限 is_execute Boolean 是否有执行任务权限 is_copy Boolean 是否有复制任务权限 is_forbidden Boolean 是否有禁用任务权限 is_view Boolean 是否有查看任务权限 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表10 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • URI GET /v3/{project_id}/jobs 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String CodeArts项目ID,32位数字、小写字母组合。 表2 Query参数 参数 是否必选 参数类型 描述 page_index 是 Integer 分页页码, 表示从此页开始查询, page_index大于等于0 page_size 是 Integer 每页显示的条目数量,page_size小于等于100
  • 响应示例 状态码: 200 OK { "success" : true, "result" : { "id" : "eb9d73c7-61b3-4823-b476-a7c00c493b8a", "build_project_id" : "31581e9f-5772-4053-a50c-d5690578c8fd", "build_record_id" : "9d6169b9-022d-458c-9dc8-48cc94cc4083", "parent_record_id" : null, "devcloud_project_id" : "b4d3971c3988463b865f6f920846149e", "codeci_job_id" : "68491d9bc97b4774adb93e29b46d2dc6", "user_id" : "ae22fd035f354cfa8d82a3f1c8940446", "build_no" : 532, "daily_build_num" : "20221011.29", "execution_id" : "j_YE1bu9Z7", "repo_name" : "maven", "repo_id" : "2111616838", "branch" : "buildflow_env", "tag" : null, "commit" : null, "commit_message" : null, "commit_create_time" : "2022-10-11T08:28:42.000+00:00", "trigger_type" : "MANUAL", "build_type" : "branch", "status" : "SUCCESS", "domain_id" : "60021bab32fd450aa2cb89226f425e06", "create_time" : "2022-10-11T08:28:42.000+00:00", "schedule_time" : "2022-10-11T08:28:45.000+00:00", "queued_time" : "2022-10-11T08:28:45.000+00:00", "start_time" : "2022-10-11T08:28:47.000+00:00", "runnable_time" : "2022-10-11T08:16:04.000+00:00", "finish_time" : "2022-10-11T08:30:27.000+00:00", "duration" : 100068, "record_status" : null, "use_private_slave" : 0, "region" : "cn-north-7", "err_msg" : null, "build_config_type" : "YAML" } }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 success Boolean 状态 message String 消息 err_code String 错误码 result result object 结果 表4 result 参数 参数类型 描述 id String id build_project_id String 构建工程ID,唯一对应codeci_job_id build_record_id String 构建记录ID parent_record_id String 父构建记录ID devcloud_project_id String 项目ID codeci_job_id String codeci任务ID,唯一对应build_project_id user_id String 用户ID build_no Integer 构建编号 daily_build_num String 每日构建编号,每日从1开始 execution_id String 八爪鱼任务ID repo_name String 仓库名称 repo_id String 仓库id branch String 仓库分支 tag String 仓库tag commit String 仓库commit ID commit_message String 仓库commit提交信息 commit_create_time String commit创建时间 trigger_type String 触发类型 build_type String 构建类型 status String 构建状态 domain_id String 租户ID create_time String 任务创建时间 schedule_time String 构建下发耗时 queued_time String 构建排队耗时 start_time String 开始构建时间 runnable_time String 八爪鱼真正开始构建时间 finish_time String 构建结束时间 duration Float 构建时长 record_status String record状态 use_private_slave Integer 是否使用自定义执行机 region String 租户所在region err_msg String 错误信息 build_config_type String 构建配置类型,YAML或ACTION 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 401 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 403 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 500 表9 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 前提条件 已有通过实名认证的华为企业账号或IAM用户。 已开通MSSI服务。 如何开通MSSI服务,请参考开通并购买MSSI服务。 使用API接口创建流指导用户快速将API接口封装为连接器,进行流编排。这里以“通过邮件将IP地址查询结果发送到个人”为例。 用户将IP地址查询能力接口封装为连接器,其余连接器使用系统预置的公共连接器。 操作流程,如图1所示。 图1 操作流程图 父主题: 使用API接口创建流
  • 请求 请求样例 post https://endpoint/federated/v1/agent/report { "agentId": "agentId-xxx","taskId": "training_taskId-xxx","taskStatus": "Finished","reportData": "{"spendTime":"6000","dataNumber":"10000","xxx":"xxx"}",}