华为云用户手册

  • 操作流程 下表介绍使用FunctionGraph函数对OBS中的图片进行压缩的总体操作流程。 表2 操作流程 操作流程 说明 步骤一:创建两个OBS桶 创建两个OBS桶,源桶用于存储原始图片,目标桶用于存储压缩后图片。 步骤二:创建云服务委托 创建云服务委托,授权FunctionGraph使用其他云服务,确保能与OBS服务协同工作。 步骤三:创建图片压缩函数 创建空白函数,配置代码环境和创建OBS应用事件源触发器,以实现对OBS源桶中上传或更新的图片自动进行压缩。 步骤四:验证图片压缩 上传原始图片到OBS源桶,图片压缩函数自动执行,在OBS目标桶中生成压缩后的图片,验证图片压缩函数正常运行。
  • 函数构建类实践 表3 FunctionGraph函数构建类最佳实践 最佳实践 说明 使用已有SpringBoot项目构建HTTP函数 本章节指导使用Springboot开发应用的用户,将业务通过构建HTTP函数的方式部署到FunctionGraph。 使用Next.js项目构建HTTP函数 本章节指导使用Next.js框架开发应用的用户,将业务通过构建HTTP函数的方式部署到FunctionGraph。 使用Go语言程序构建HTTP函数 本章节指导使用Go语言开发应用的用户,将业务通过构建HTTP函数的方式部署到FunctionGraph。 使用FunctionGraph函数对MFA微服务进行Serverless化改造 本章节介绍使用函数对MetaERP业务场景进行微服务Serverless化改造。基于 函数工作流 服务可将低频使用但资源占用大的微服务逻辑,拆分成独立函数,常驻实例缩容到0;剩余微服务逻辑以Spring兼容方式进行函数化,实现函数化后的微服务快速冷启动和弹性,常驻实例减半。 使用FunctionGraph函数访问Redis数据 本章节介绍如何使用FunctionGraph和Redis客户端的能力,实现在函数内访问客户的Redis数据库。 FunctionGraph函数的冷启动优化实践 本章节介绍如何优化函数工作流冷启动的实践。
  • 数据处理类实践 表1 FunctionGraph数据处理类最佳实践 最佳实践 说明 使用FunctionGraph函数对OBS中的图片进行压缩 本章节介绍如何配置一个图片压缩函数,配合使用“OBS应用事件源”触发器实现对OBS中的图片进行压缩。 使用FunctionGraph函数为OBS中的图片打水印 本章节介绍如何配置一个为图片打水印的函数,配合使用“OBS应用事件源”触发器实现对OBS中的图片打水印。 使用FunctionGraph函数对DIS数据进行格式转换并存储到CloudTable 本章节介绍如何使用函数结合 数据接入服务 (DIS)采集IOT实时数据流,并将采集到的数据进行格式转换,存储到 表格存储服务 (CloudTable Service)中。 使用FunctionGraph函数实现通过API方式上传文件 本章节以NodeJS和Python语言为例,介绍如何配置后端解析函数,结合APIG处理端侧文件上传云服务器。 适用于例如服务运行日志的上报、Web应用图片上传等Web和App应用的场景。 使用FunctionGraph函数对IoTDA中的设备坐标数据进行转换 本章节介绍如何使用函数结合IoTDA服务,将物联网设备上报以及设备状态变动的相关数据,流转至FunctionGraph触发函数运行并进行坐标转换(将WGS84坐标转为GCJ02坐标)。 适用于例如将设备上报的数据处理后存储至如OBS;对上报的数据进行结构化,清洗后存储至数据库;根据设备状态变化进行事件通知等应用场景。 使用FunctionGraph函数对OBS中的文件进行加解密 本章节介绍如何使用函数结合华为云DEW,配合使用“OBS应用事件源”触发器实现对OBS中的文件进行加解密处理。 使用FunctionGraph函数识别LTS中的异常业务日志并存储到OBS 本章节介绍如何结合 云日志服务LTS ,配置提取告警日志功能的函数,识别LTS中的异常日志数据存储至OBS桶,再通过 消息通知 服务 SMN 推送告警短信和邮件,通知业务人员处理。 使用FunctionGraph函数对LTS中的日志进行实时过滤 本章节介绍如何结合 云日志 服务LTS,配置提取日志数据并分析和过滤关键信息后转储至LTS的函数。 使用FunctionGraph函数流对OBS中的图片进行旋转 本章节介绍如何使用函数流功能,编排函数自动化处理OBS中的图片进行旋转。 函数流功能目前支持“华北-北京四”、“华东-上海一”、“华东-上海二”、“华南-广州”、“亚太-新加坡”。 使用FunctionGraph函数流对图片进行压缩和打水印 本章节介绍如何使用函数流功能,编排函数自动化对图片进行压缩和打水印处理。 函数流功能目前支持“华北-北京四”、“华东-上海一”、“华东-上海二”、“华南-广州”、“亚太-新加坡”。
  • 功能应用类实践 表2 FunctionGraph功能应用类最佳实践 最佳实践 说明 使用FunctionGraph函数和 CTS 识别非法IP的登录登出操作 本章节介绍如何结合 云审计 服务CTS,配置获取云服务资源操作信息并对信息进行分析和处理的函数,再通过消息通知服务SMN推送告警短信和邮件,通知业务人员处理。 使用FunctionGraph函数定时开关华为云E CS 本章节介绍如何配置实现定时开启或关闭华为公有云虚拟机ECS功能的函数。 使用FunctionGraph函数作为后端实现APIG的自定义认证能力 本章节介绍如何快速创建后端服务为FunctionGraph的API,并通过APIG安全认证中的“自定义认证”鉴权方式进行调用。 使用FunctionGraph的Java函数配置Log4j2实现日志打印 本章节介绍如何使用Java函数配置Log4j2,实现日志打印功能。 使用FunctionGraph部署AI绘画Stable Diffusion应用 本章节介绍如何通过FunctionGraph的应用中心,部署AI绘画Stable-Diffusion应用,并提供多种自定义使用AI绘画应用的方法。 使用FunctionGraph部署AI绘画ComfyUI/ComfyUI+FLUX应用 本章节介绍如何通过FunctionGraph的应用中心,部署AI绘画ComfyUI应用和AI绘画ComfyUI+FLUX应用,并提供多种自定义使用AI绘画应用的方法。 使用FunctionGraph部署AI对话ChatGLM3应用 本章节介绍如何通过FunctionGraph的应用中心,部署AI对话ChatGLM3应用,并提供多种自定义使用AI对话应用的方法。 使用FunctionGraph部署DeepSeek-R1蒸馏模型 本章节介绍如何通过容器镜像HTTP函数,协同第三方客户端,快速部署DeepSeek-R1蒸馏模型,实现AI对话。
  • 操作步骤 创建一个图片压缩的函数,其中代码在处理返回数据通过 ctx.Write() 函数将结果以流式数据的形式返回: 目前只支持go函数! FunctionGraph 通过 ctx.Write() 函数提供了流式返回的能力,对开发者来说,只需要将最终结果通过流的方式返回,而不需要关注网络传输的细节。 在 FunctionGraph 的函数流控制台完成工作流编排,举例如下。 调用工作流的同步执行接口,获取最终结果的文件流,数据将以 chunked 流式返回的方式返回到客户端。
  • 技术原理 华为云FunctionGraph函数工作流提出 Serverless Streaming 的流式可编排的文件处理解决方案,步骤与步骤之间通过数据流驱动,更易于用户理解。本章通过图片处理的例子解释该方案的实现机制。 如果需要驱动一个工作流执行,工作流系统需要处理两个部分: 控制流:控制工作流的步骤间流转,以及步骤对应的 Serverless 函数的执行。确保步骤与步骤之间有序执行。 数据流:控制整个工作流的数据流转,通常来说上一个步骤的输出是下一个步骤的输入,比如上述图片处理工作流中,图片压缩的结果是打水印步骤的输入数据。 在普通的服务编排中,由于需要精准控制各个服务的执行顺序,所以控制流是工作流的核心部分。然而在文件处理等流式处理场景中,对控制流的要求并不高,以上述图片处理场景举例,可以对大图片进行分块处理,图片压缩和加水印的任务不需要严格的先后顺序,图片压缩处理完一个分块可以直接流转到下一个步骤,而不需要等待图片压缩把所有分块处理完再开始加水印的任务。 基于上述理解,华为云FunctionGraph工作流的 Serverless Streaming 方案架构设计如下图所示: 在 Serverless Streaming 的流程中,弱化控制流中步骤之间的先后执行顺序,允许异步同时执行,步骤与步骤之间的交互通过数据流驱动。其中数据流的控制通过 Stream Bridge 组件来实现。同时函数 SDK 增加流式数据返回接口,用户不需要将整个文件内容返回,而是通过 gRPC Stream 的方式将数据写入到 Stream Bridge,Stream Bridge 用来分发数据流到下一个步骤的函数 Pod 中。
  • 背景与价值 Serverless Workflow由于自身可编排、有状态、持久化、可视化监控、异常处理、云服务集成等特性,适用于很多应用场景,比如: 复杂度高需要抽象的业务(订单管理,CRM 等) 业务需要自动中断 / 恢复能力,如多个任务之间需要人工干预的场景(人工审批,部署流水线等) 业务需要手动中断 / 恢复(数据备份 / 恢复等) 需要详细监控任务执行状态的场景 流式处理( 日志分析 ,图片 / 视频处理等) 当前大部分 Serverless Workflow 平台更多关注控制流程的编排,忽视了工作流中数据流的编排和高效传输,上述场景创建函数流触发器中,由于数据流相对简单,所以各大平台支持都比较好,但是对于文件转码等存在超大数据流的场景,当前各大平台没有给出很好的解决方案。华为云FunctionGraph函数工作流针对该场景,提出了 Serverless Streaming 的流式处理方案,支持毫秒级响应文件处理。
  • 响应示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 { "flavors": [ { "id": "physical.kl1.3xlarge", "name": "physical.kl1.3xlarge", "vcpus": "24", "ram": 321729, "disk": "6707", "swap": "", "links": [ { "rel": "self", "href": "https://compute.Region.dc1.domainname.com/v2/bbf1946d374b44a0a2a95533562ba954/flavors/physical.kl1.3xlarge", "type": null }, { "rel": "bookmark", "href": "https://compute.Region.dc1.domainname.com/bbf1946d374b44a0a2a95533562ba954/flavors/physical.kl1.3xlarge", "type": null } ], "OS-FLV-EXT-DATA:ephemeral": 0, "rxtx_factor": 1, "OS-FLV-DISABLED:disabled": false, "rxtx_quota": null, "rxtx_cap": null, "os-flavor-access:is_public": false, "os_extra_specs": { "capabilities:cpu_arch": "x86_64", "baremetal:disk_detail": "SAS SSD:2*800G Raid 1 + NVMe SSD Card1.6T", "capabilities:hypervisor_type": "ironic", "baremetal:__support_evs": "true", "baremetal:extBootType": "LocalDisk", "capabilities:board_type": "o2m", "baremetal:net_num": "2", "baremetal:netcard_detail": "2 x 2*10GE", "baremetal:cpu_detail": "Intel Xeon E5-2667 V4 (2*8core* 3.2 GHz)", "resource_type": "ironic", "baremetal:memory_detail": "256GB DDR4 RAM (GB)" } } ] }
  • URI GET /v1/{project_id}/baremetalservers/flavors?availability_zone={availability_zone} 参数说明请参见表1。 表1 参数说明 参数 是否必选 描述 project_id 是 项目ID。 获取方式请参见获取项目ID。 表2 查询参数 参数 是否必选 参数类型 描述 availability_zone 否 String 可用区,需要指定可用区(AZ)的名称。 请参考地区和终端节点获取。
  • 响应参数 参数 参数类型 描述 flavors Array of objects 裸金属服务器规格列表,详情请参见表3。 表3 flavors数据结构说明 参数 参数类型 描述 id String 裸金属服务器规格的ID。 name String 裸金属服务器规格的名称。 vcpus String 该裸金属服务器规格对应的CPU核数。 ram Integer 该裸金属服务器规格对应的内存大小,单位为MB。 disk String 该裸金属服务器规格对应要求系统盘大小,0为不限制。 swap String 未使用。 OS-FLV-EXT-DATA:ephemeral Integer 未使用。 OS-FLV-DISABLED:disabled Boolean 未使用。 rxtx_factor Float 未使用。 rxtx_quota String 未使用。 rxtx_cap String 未使用。 os-flavor-access:is_public Boolean 是否是公共规格。 false:私有规格;true:公共规格 links Array of objects 规格相关快捷链接地址,详情请参见表4。 os_extra_specs Object 裸金属服务器规格的扩展字段,详情请参见表5。 attachableQuantity Object 裸金属服务器挂载卷数量,详情请参见表6。 表4 links字段数据结构说明 参数 参数类型 描述 rel String 快捷链接标记名称。取值为: self:包含版本号的资源链接,需要立即跟踪时使用此类链接。 bookmark:提供了适合长期存储的资源链接。 href String 对应快捷链接。 type String 快捷链接类型。 表5 os_extra_specs数据结构说明 参数 参数类型 描述 resource_type String 标识该规格对应的资源类型。 capabilities:cpu_arch String 裸金属服务器的CPU架构类型,取值为: x86_64(适用于x86机型) aarch64(适用于ARM机型) baremetal:disk_detail String 磁盘物理规格描述信息。 capabilities:hypervisor_type String 标示ironic类型的规格。 baremetal:__support_evs String 标识当前规格是否支持挂载云硬盘。 true false 如果裸金属服务器规格中没有此参数,表示不支持挂载云硬盘。 baremetal:extBootType String 裸金属服务器启动源。 LocalDisk:本地盘 Volume:云硬盘(快速发放) capabilities:board_type String 裸金属服务器的规格类型。格式为规格的缩写,例如规格名称为“physical.o2.medium”,则规格类型为“o2m”。 baremetal:net_num String 实际可挂载网络数量。 baremetal:netcard_detail String 网卡物理规格描述信息。 baremetal:cpu_detail String CPU物理规格描述信息。 baremetal:memory_detail String 内存物理规格描述信息。 cond:operation:status String 裸金属服务器规格状态。不配置时等同于normal。 normal:正常商用 abandon:下线(即不显示) sellout:售罄 obt:公测 promotion:推荐(等同normal,也是商用) cond:operation:az String 在某个AZ的裸金属服务器规格状态。 此参数是AZ级配置,某个AZ没有在此参数中配置时默认使用cond:operation:status参数的取值。 格式:az(xx)。()内为某个AZ下的裸金属服务器规格状态,()内必须填写状态,不填为无效配置。 例如:规格在某个区域的az0正常商用,az1售罄,az2公测,az3正常商用,其他az显示下线,可配置为: “cond:operation:status”设置为“abandon” “cond:operation:az”设置为“az0(normal), az1(sellout), az2(obt), az3(promotion)” 说明: 如果规格在某个AZ下的状态与cond:operation:status配置状态不同,必须配置该参数。 表6 attachableQuantity字段数据结构说明 参数 参数类型 描述 free_scsi Integer 可挂载的scsi卷数。 free_blk Integer 可挂载的vbd卷数。 free_disk Integer 可挂载的卷数。
  • 创建带弹性公网IP的裸金属服务器 您还可以为裸金属服务器配置弹性公网IP,只需在请求消息体中增加publicip字段即可,创建裸金属服务器的时候会同时创建一个弹性公网IP,且弹性公网IP与裸金属服务器绑定在一起。示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 { "server": { "availability_zone": "cn-north-4a", "name": "bms-test04", "imageRef": "766a545a-02e1-433e-b1d1-733b5dc95e94", "flavorRef": "physical.s3.large", "data_volumes": [ { "volumetype": "SAS", "size": 10, "shareable": false } ], "vpcid": "8df83bf2-fd2e-4ee0-9692-c0b7736513fb", "nics": [ { "subnet_id": "c6bb8788-4fd1-4a8f-adab-7eba3bed8616" } ], "extendparam": { "chargingMode": "prePaid", "periodType": "month", "periodNum": 1, "isAutoRenew": "true", "isAutoPay": "true", "regionID": "cn-north-4" }, "metadata": { "op_svc_userid": "59781460e9e54886a7d03df7d3f3fc81" }, "publicip": { "eip": { "iptype": "5_bgp", "bandwidth": { "chargemode": "bandwidth", "name": "bms-test04-bandwidth", "size": 1, "sharetype": "PER" }, "extendparam": [ "chargingMode": "prePaid" ] } }, "key_name": "$key_name" } } iptype:弹性公网IP地址类型,“5_bgp”表示全动态BGP。 chargemode:带宽的计费类型,取值包括“traffic”(按流量计费)和“bandwidth”(按带宽计费)。 name:带宽名称。 size:带宽大小,单位为Mbit/s,输入大小范围为[1,2000]。 sharetype:带宽的共享类型,“PER”表示独享。 extendparam.chargingMode:弹性公网IP的计费模式,“prePaid”表示预付费,即包年包月。
  • 创建带数据盘的裸金属服务器 您还可以为裸金属服务器配置数据盘,只需在请求消息体中增加data_volumes字段即可,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 { "server": { "availability_zone": "cn-north-4a", "name": "bms-test03", "imageRef": "766a545a-02e1-433e-b1d1-733b5dc95e94", "flavorRef": "physical.s3.large", "data_volumes": [ { "volumetype": "SAS", "size": 10, "shareable": false } ], "vpcid": "8df83bf2-fd2e-4ee0-9692-c0b7736513fb", "nics": [ { "subnet_id": "c6bb8788-4fd1-4a8f-adab-7eba3bed8616" } ], "extendparam": { "chargingMode": "prePaid", "periodType": "month", "periodNum": 1, "isAutoRenew": "true", "isAutoPay": "true", "regionID": "cn-north-4" }, "metadata": { "op_svc_userid": "59781460e9e54886a7d03df7d3f3fc81" }, "key_name": "$key_name" } } volumetype:数据盘的类型,“SAS”表示“高IO”。 size:数据盘大小,容量单位为GB,输入大小范围为[10,32768]。 shareable:是否为共享磁盘。“true”为共享盘,“false”为普通云硬盘。
  • 创建快速发放裸金属服务器 如下示例是创建快速发放裸金属服务器最简单的配置。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "server": { "availability_zone": "cn-north-4a", "name": "bms-test02", "imageRef": "766a545a-02e1-433e-b1d1-733b5dc95e94", "flavorRef": "physical.h2.large", "root_volume": { "volumetype": "SAS", "size": 150 }, "vpcid": "8df83bf2-fd2e-4ee0-9692-c0b7736513fb", "nics": [ { "subnet_id": "c6bb8788-4fd1-4a8f-adab-7eba3bed8616" } ], "extendparam": { "chargingMode": "prePaid", "periodType": "month", "periodNum": 1, "isAutoRenew": "true", "isAutoPay": "true", "regionID": "cn-north-4" }, "metadata": { "op_svc_userid": "59781460e9e54886a7d03df7d3f3fc81" }, "key_name": "$key_name" } } 相比创建本地盘裸金属服务器,此场景的不同之处是选择启动源为云硬盘的规格,以及设置系统盘参数。 volumetype:系统盘的类型,“SAS”表示“高IO”,您还可以指定其他类型,具体请参见创建裸金属服务器中的参数解释。 size:系统盘大小,容量单位为GB,输入大小范围为[40,1024]。系统盘大小取值应不小于镜像中系统盘的最小值(min_disk属性),您可以通过查询镜像列表API查询镜像的min_disk参数值。
  • 创建本地盘裸金属服务器 如下示例是创建本地盘裸金属服务器最简单的配置。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 { "server": { "availability_zone": "cn-north-4a", "name": "bms-test01", "imageRef": "766a545a-02e1-433e-b1d1-733b5dc95e94", "flavorRef": "physical.s3.large", "vpcid": "8df83bf2-fd2e-4ee0-9692-c0b7736513fb", "nics": [ { "subnet_id": "c6bb8788-4fd1-4a8f-adab-7eba3bed8616" } ], "extendparam": { "chargingMode": "prePaid", "periodType": "month", "periodNum": 1, "isAutoRenew": "true", "isAutoPay": "true", "regionID": "cn-north-4" }, "metadata": { "op_svc_userid": "59781460e9e54886a7d03df7d3f3fc81" }, "key_name": "$key_name" } } availability_zone:服务所在区域的可用区,您可以在地区和终端节点查询。例如,“cn-north-4a”表示“华北-北京四”的“可用区1”。 name:裸金属服务器的名称,由您自定义,例如取名为“bms-test01”。 imageRef:镜像ID,即创建裸金属服务器使用哪个镜像(操作系统)。镜像ID可以在 镜像服务 控制台查询。 flavorRef:裸金属服务器使用的规格ID,格式为physical.x.x。规格ID可以从裸金属服务器控制台获取,并参考前提条件判断规格的启动源,此处选择启动源为本地盘的规格,例如“physical.s3.large”。 vpcid:裸金属服务器所在VPC(虚拟私有云)的ID,您可以在虚拟私有云控制台查询,也可以通过查询VPC列表API获取。 nics.subnet_id:VPC内子网的网络ID,您可以在虚拟私有云控制台查询,也可以通过查询子网列表API获取。 extendparam:“chargingMode”表示计费模式,“prePaid”为预付费,即包年/包月;“periodType”表示订购周期类型,“month”表示按月;“periodNum”表示订购周期数,本例中的“1”表示一个月;“isAutoRenew”表示是否自动续订;“isAutoPay”表示下单订购后,是否自动从客户的账户中支付,而不需要客户手动去支付;“regionID”表示服务所在的区域ID,您可以在地区和终端节点查询。 metadata.op_svc_userid:用户ID,您可以在我的凭证查询。 key_name:密钥对名称。如果使用SSH密钥方式登录裸金属服务器,需要指定已有密钥的名称。您可以在密钥对控制台查询。
  • 前提条件 您需要规划裸金属服务器所在的区域信息,并根据区域确定调用API的Endpoint,详细信息请参见终端节点。 裸金属服务器的启动源分为本地盘和云硬盘,对应的裸金属服务器为本地盘裸金属服务器,和快速发放裸金属服务器。有两种方式查看启动源是本地盘还是云硬盘: 在裸金属服务器控制台选择某一规格后,如果“磁盘”配置项中出现“系统盘”参数,表示该规格的启动盘为云硬盘。反之为本地盘。 调用查询规格详情和规格扩展信息列表API,在响应参数中查找“baremetal:extBootType”取值,“LocalDisk”表示启动源为本地盘,“Volume”表示启动源为云硬盘。
  • 文档修订记录 文档修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。 修订记录 发布日期 第二十五次正式发布。本次变更说明如下:增加了SDK代码示例。 2024-03-08 第二十四次正式发布。本次变更说明如下: 增加了添加指定工作项工时。 增加了查询项目下的工时类型。 增加了获取指定工作项停留时间。 增加了高级查询我的待办工作项。 增加了查询项目模板。 2023-06-08 第二十三次正式发布。本次变更说明如下: issueUser对象中增了两个字段:user_id和user_num_id。 2022-12-06 第二十二次正式发布。本次变更说明如下: 增加了下载工作项附件。 增加了删除附件。 增加了查询当前工作项已经关联的代码提交记录 / 分支创建记录。 2022-11-04 第二十一次正式发布。本次变更说明如下: 增加响应示例和请求示例。 2022-10-28 第二十次正式发布。本次变更说明如下: 增加了下载图片。 增加了上传工作项附件。 增加了Scrum项目的领域。 2022-09-16 第十九次正式发布。本次变更说明如下: 修改了API概览。 修改了终端节点。 NewCustomField中增加了字段“field_name”。 2022-08-23 第十八次正式发布。本次变更说明如下: 修改了API概览。 增加了Scrum项目的模块。 2022-06-30 第十七次正式发布。本次变更说明如下: 增加了查询项目的工作项。 增加了查询项目下所有工作项的历史记录。 增加了查询Scrum项目的工作项流转配置。 增加了查询当前工作项已经关联的工作项。 增加了查询当前工作项已经关联的关联Wiki。 增加了查询当前工作项已经关联的代码提交记录 / 分支创建记录。 增加了查询关联用例。 增加了查询Scrum工作项自定义字段。 增加了查询看板项目下工作项的状态历史记录。 增加了查询看板项目下的工作项。 增加了查询看板项目的工作项流转配置。 修改了创建工作项。 2022-06-06 第十六次正式发布。本次变更说明如下: 增加了查看迭代历史记录。 增加了更新子用户昵称。 修改了高级查询工作项。 修改了获取指定项目的迭代列表。 2022-02-28 第十五次正式发布。本次变更说明如下: 修改了高级查询工作项。 修改查询缺陷密度。 2021-11-26 第十四次正式发布。本次变更说明如下: 增加了细粒度权限用户创建工作项。 修改了错误码。 2021-11-10 第十三次正式发布。本次变更说明如下: 修改了API字段信息。 迭代详情和迭代列表添加了返回字段status。 获取工作项的历史记录添加了id和name。 2021-09-28 第十二次正式发布。本次变更说明如下: 修改了错误码。 2021-06-11 第十一次正式发布。本次变更说明如下: 修改了错误码。 2021-05-12 第十次正式发布。本次变更说明如下: 修改了错误码。 2021-05-08 第九次正式发布。本次变更说明如下: 修改了接口字段信息。 2021-04-22 第八次正式发布。本次变更说明如下: 删除约束与限制。 2021-03-26 第七次正式发布。本次变更说明如下: 修改API概览。 2021-03-10 第六次正式发布。本次变更说明如下: 修改应用示例。 2021-02-05 第五次正式发布。本次变更说明如下: 增加应用示例。 2020-08-31 第四次正式发布。本次变更说明如下: 修改“4.1 API”。 2020-08-18 第三次正式发布。本次变更说明如下: 修改基本概念。 修改构造请求。 修改认证鉴权。 2020-08-06 第二次正式发布。本次变更说明如下: 修改终端节点。 2020-07-01 第一次正式发布。 2020-03-30
  • 状态码 状态码如表1所示。 表1 状态码 状态码 编码 错误码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 附录
  • 步骤1:查询用户的工作项列表 接口信息 URI:Post /v4/projects/{project_id}/issues API文档详情请参见:高级查询工作项 API Explorer 在线调试请参见: 高级查询工作项 请求示例 Post https://projectman-ext.cn-north-4.myhuaweicloud.com/v4/projects/526cefde62004de2b62b5e8dd2c2b3af/issues 请求体: { "status_ids": [1], "limit":1 } 响应示例 { "issues": [ { "id": 1692040, "name": "测试", "done_ratio": 0, "tracker": { "id": 2, "name": "Task" }, "priority": { "id": 2, "name": "中" }, "severity": { "id": 12, "name": "一般" }, "status": { "id": 1, "name": "新建" }, "updated_time": "2020-09-17 10:18:31", "begin_time": "1970-01-01", "end_time": "1970-01-01", "project": { "project_num_id": 3694732, "project_id": "526cefde62004de2b62b5e8dd2c2b3af", "project_name": "sdfsdfdsf" }, "parent_issue": { "id": 1684959, "name": "testDemo阿达萨达" }, "module": { "id": null, "name": null }, "domain": { "id": null, "name": null }, "iteration": { "id": null, "name": null }, "expected_work_hours": 0.0, "actual_work_hours": 0.0, "created_time": "2020-09-17 10:18:31", "custom_fields": [], "assigned_cc_user": null, "assigned_user": { "id": 4091, "name": "test001", "nick_name": "pcedgeXXXXXXX" }, "creator": { "id": 4091, "name": "test001", "nick_name": "pcedgeXXXXXXX" }, "developer": { "id": 0, "name": null, "nick_name": null } } ], "total": 24 }
  • 操作步骤 请求示例 GET https://projectman-ext.cn-north-4.myhuaweicloud.com/v4/projects/3cea7d4d77134eee8251825918a8bd7a/iterations 响应示例 { "iterations": [ { "id": 707961817, "name": "迭代1", "description": "", "begin_time": "2020/06/07", "end_time": "2020/07/06" }, { "id": 707961818, "name": "迭代2", "description": "", "begin_time": "2020/07/07", "end_time": "2020/08/06" }, { "id": 707961819, "name": "迭代3", "description": "", "begin_time": "2020/08/07", "end_time": "2020/09/06" } ], "total": 3 }
  • 操作步骤 请求示例 GET https://projectman-ext.cn-north-4.myhuaweicloud.com/v4/projects?project_type=scrum&search=ProjectTestCase&offset=0&limit=1 响应示例 { "projects": [ { "project_num_id": 3844012, "project_id": "ec147b681fb64e019a6bcd73ebdf3597", "project_name": "ProjectTestCaseYRXl", "description": "fdas", "created_time": 1600417972000, "updated_time": 1600417972000, "project_type": "scrum", "creator": { "user_num_id": 4090, "user_id": "665b542eb4c14b53a15ead449f28b0ba", "user_name": "test001", "domain_id": "70d11a2d7275425689347ec104af2ad8", "domain_name": "projectman_l00382124_01", "nick_name": "英国队长" } } ], "total": 48 }
  • 响应消息体 响应消息体通常以结构化格式返回,与响应消息头中Content-type对应,传递除响应消息头之外的内容。 对于获取用户Token获取请求认证接口,返回如下消息体。为篇幅起见,这里只展示部分内容。 { "token": { "expires_at": "2019-02-13T06:52:13.855000Z", "methods": [ "password" ], "catalog": [ { "endpoints": [ { "region_id": "cn-north-1", ...... 当接口调用出错时,会返回错误码及错误信息说明,错误响应的Body体格式如下所示。 { "error_msg": "The format of message is error", "error_code": "AS.0001" } 其中,error_code表示错误码,error_msg表示错误描述信息。
  • AK/SK认证 AK/SK签名认证方式仅支持消息体大小12M以内,12M以上的请求请使用Token认证。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。 Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用接口时,请求body中auth.scope的取值需要选择project,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 获取Token 后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 GET https://iam.cn-north-1.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ABCDEFJ....
  • 请求消息体 请求消息体通常以结构化格式发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于获取用户Token获取请求认证接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,加粗的斜体字段需要根据实际值填写,其中username为用户名,domainname为用户所属的账号名称,********为用户登录密码,xxxxxxxxxx为project的名称,如cn-north-1,您可以从终端节点中获取。 scope参数定义了Token的作用域,下面示例中获取的Token仅能访问project下的资源。您还可以设置Token额作用域为某个账号下所有资源或账号的某个project下的资源,详细定义请参见获取用户Token获取请求认证。 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token获取请求认证接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求URI 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 请求URI由四部分构成:{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string} 参数 说明 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器 域名 或IP,不同服务不同区域的Endpoint不同,您可以从终端节点中获取。 例如 IAM 服务在“华北-北京一”区域的Endpoint为“iam.cn-north-1.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径,从具体API的URI模块获取。例如,获取用户Token接口的resource-path为/v3/auth/tokens。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个?,形式为参数名=参数取值。例如,limit=10表示查询不超过10条数据。 例如,您需要获取IAM在“华北-北京一”区域的Token,则需使用“华北-北京一”区域的Endpoint(iam.cn-north-1.myhuaweicloud.com),并在获取用户Token获取请求认证的URI部分找到resource-path(/v3/auth/tokens),拼接起来如下所示。 https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 Content-Type:消息体的类型(格式),必选,默认取值为“application/json”,有其他取值时会在具体接口中专门说明。 X-Auth-Token:用户Token,可选,当使用Token方式认证时,必须填充该字段。用户Token也就是调用获取用户Token获取请求认证接口的响应值,该接口是唯一不需要认证的接口。 公有云API同时支持使用AK/SK认证,AK/SK认证是使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参见认证鉴权。 X-Project-ID:子项目ID,可选,在多项目场景中使用。 X-Domain-ID:账号ID。 对于获取用户Token获取请求认证接口,由于不需要认证,所以只添加“Content-Type”即可,添加消息头后的请求如下所示。 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源,如删除对象等。 HEAD:请求服务器资源头部。 PATCH:请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 在获取用户Token获取请求认证的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens
  • 基本概念 账号 用户注册华为云时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在IAM中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region。 通用Region指面向公共租户提供通用云服务的Region。 专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone) 一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 用户在需求管理中创建的项目,根据模板创建项目,根据您选择的项目模板,还包含有预置的工作项、代码或资源等。通过管理项目IAM用户(即“团队成员”)所需的权限。将IAM用户作为团队成员添加到项目,给每个团队成员分配角色并赋予项目及其资源的操作权限。 项目模板 使用模板创建项目,模板项目是指默认预置模板类型的项目,即基于Scrum和看板形式,由需求管理预置好一些工作项和流程。选择项目模板后,会自动生成对应样例模板,供用户参考和使用,用户也可以新建自己的开发任务。 企业项目 企业项目是项目的升级版,针对企业不同项目间资源的分组和管理,是逻辑隔离。企业项目中可以包含多个区域的资源,且项目中的资源可以迁入迁出。 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理服务用户指南》。 父主题: 使用前必读
  • 概述 需求管理(CodeArts Req)为敏捷开发团队提供简单高效的团队协作服务,包含多项目的管理、敏捷迭代、看板协作、需求管理、缺陷跟踪、文档管理、Wiki在线协作、仪表盘自定制报表等功能。 您可以使用本文档提供API对需求管理进行相关操作,如创建、删除、查询任务等,支持的全部操作请参见API概览。 在调用API之前,请确保已经充分了解需求管理基本概念,详细信息请参见产品介绍。 父主题: 使用前必读
  • API概览 表1 API概览 类型 说明 Scrum项目的工作项 Scrum项目工作项的创建、删除、修改、查询等相关接口。 Scrum项目的迭代 Scrum项目迭代的创建、删除、修改、查询等相关接口。 用户信息 获取当前用户信息,更新用户昵称,获取当前用户角色。 项目成员 添加、查询、删除、退出项目成员等接口信息。 项目信息 创建、更新、查询、删除项目等相关的接口。 项目指标 查询人均bug,查询需求按时完成率,查询缺陷密度。 项目统计 获取bug,需求统计信息,获取项目概览。 看板项目的工作项 查询看板项目下工作项的相关接口。 Scrum项目的模块 Scrum项目模块的创建、查询、更新和删除相关接口。 Scrum项目的领域 Scrum项目领域的创建、查询、更新和删除相关接口。 IPD项目计划管理 发布、迭代增加、删除、修改、查询相关接口。 IPD工作项管理 工作项增加、删除、修改、查询相关接口。 IPD统计概览 统计IPD的需求、缺陷数据,数据会有5~10分钟延迟。 OpenAPI管理 查询项目列表,增加/删除/编辑特性集等相关接口。 IPD模块管理 查询模块树形列表,创建、更新、删除模块相关接口。 IPD配置管理 查询字段列表和查询工作项状态列表。 IPD评审单管理 查询评审单列表和详情。 IPD标签管理 增加、删除、修改、查询标签相关列表。
共100000条