华为云用户手册

  • 总览 成本中心的总览页面如下图所示。 序号 说明 1 通过左侧导航,可以根据成本洞察、成本组织、预算管理、成本优化的目标快速定位到相关功能。 2 将月初至今成本、月末成本预测、已超预算数/预测超预算数、近30天异常成本数、预计月度可节省成本进行信息聚合展示。 3 支持切换汇总维度查看当月成本数据。汇总维度支持:产品类型、企业项目、成本标签、成本单元、关联账号、区域。 4 查看当月成本、上月成本、预测成本趋势。 5 通过产品类型、企业项目、成本标签、成本单元和关联账号维度展示成本环比上月增长的Top5。 6 展示最近成本中心特性版本的功能发布情况。 7 提供成熟度评分和洞察建议,帮助客户提升成本管理成熟度。 8 按照企业项目、成本标签及成本单元三种成本分配方式统计您的成本分配情况,选取最优的分配情况进行来评分。
  • 开通功能 成本中心的部分功能默认为关闭状态,需要开通操作后才能使用。开通操作无需任何费用,且开通完成后,次日可使用对应功能。 启用资源优化建议 成本中心可以通过监控您的历史消费情况和资源使用率,为您提供云主机资源的空闲识别和优化建议,寻找节约成本的机会。 登录“成本中心”。 选择“选项”。 打开“启用E CS 资源优化建议”的滑动按钮。 开通财务托管的企业子客户不能进行关闭操作,只能由企业主客户统一操作。 启用按需转包年包月成本优化评估 该功能默认开通,如果不需要使用,您也可以进行关闭操作。开通统一财务管理的企业子客户不能进行关闭操作,只能由企业主客户统一操作。 启用共同成本分拆 客户购买的共享资源可能由 多个域名 或IP共同使用,开通共同成本分拆功能后,可以根据 域名 或IP上设置的标签、企业项目进行成本分摊。 登录“成本中心”。 选择“选项”。 打开“启用共同成本分拆”的滑动按钮。 该功能开启后不支持关闭。 功能开通成功后,您可以在次月4-5号后进入“成本分析”页面,查看摊销成本的分拆结果。
  • 预测和估算成本 云支出是可变的,本质上很难预测,没有一种预测方法可以适用所有场景。 结合基于趋势(以历史支出作为输入)的预测和基于业务驱动因素(例如新业务上云或区域扩张)的预测,可以有效改进并提升企业的财务预测准确率。 使用成本中心的成本分析,可以根据客户的历史支出预测未来时间范围的成本。成本分析的成本和使用量预测,会参考不同的计费模式特征,结合机器学习和基于规则的模型来分别预测所有消费模式的成本和使用量。 图2 成本和用量预测 使用成本分析确定基于趋势的预测之后,您还可以利用华为云的价格计算器,根据新业务上云或区域扩展所需的产品和使用量,自主搭配产品进行未来成本的估算。 图3 价格计算器
  • 合理规划组织 云财务管理 的基础是树立成本责任制,让各部门、各业务团队、各负责人参与进来,为各自消耗云服务产生的成本负责。 华为云为客户提供了多种工具,以帮助客户合理规划组织,确保成本可追溯。 大型企业或集团公司可以使用企业组织+多账号的方式,通过账号隔离资源和成本,方便业务快速拓展; 中小型企业以及单账号客户,建议优先使用人财物权管理相对完善的企业项目来映射组织。如果存在更多维度、更细粒度规划的诉求,可以使用标签作为组织规划的补充。比如用标签来区分资源归属的产品团队和负责人。 综上所述,无论是采用哪种方式,您都需要尽早完成组织规划,并确保规划的规则能始终如一的执行下去。 图1 组织规划
  • 精细化跟踪成本 完成组织和成本的规划后,您还需要跟踪规划的执行情况。 华为云提供了通用的预算管理工具,您可以根据企业实际规划的预算,用预算管理工具跟踪起来,并可以设置细粒度的过滤条件,精细化跟踪具体产品、团队、项目的成本。 图4 预算管理 除了在成本中心查看预算进展外,您还可以为指定预算设置预算提醒,当实际使用或预测使用达到提醒阈值时,及时接收系统发出的短信或邮件预警,从而及时采取下一步措施。 图5 设置预算提醒 您还可以设置预算报告,定期将指定预算的执行情况以日报、周报、月报的形式周知给企业内部相关角色,比如业务部门、财务、CTO,达到成本透明的目的。 图6 设置预算报告
  • 简介 近年来,伴随全球数字经济的高速发展以及企业数字化转型的深入推进,越来越多的企业将业务迁移上云。企业用云实现更高的业务敏捷性、灵活性和生产效率。但由于云的可变特点,云上消费模式与传统IT采购模式完全不同,云支出难以控制,企业的云财务管理面临诸多挑战: 如何将云支出完全分配到企业内部,从而明确成本责任,追溯成本变化的原因? 如何准确的预测未来成本,提前做好预算准备? 如何更有效的跟踪和控制消费来保持预算? 目前消费方式是否合理,是否存在浪费?都有哪些优化成本的空间? ...... 为帮助企业适应这一变化,更好的利用云的特点,完成云财务管理转型,华为云提供一整套解决方案,来帮助您以准确、高效的方式分配、控制和优化云成本。这些解决方案有助于树立注重成本的企业文化,在企业内部形成问责制,更高效的利用云的特点,在满足业务性能和创新速度的同时,不过度开支,确保投资实现预期的业务结果。 父主题: 华为云云财务管理解决方案
  • 选择合适的计费模式 华为云为客户提供了按需、包年包月、资源包、竞价实例等多种计费模式,不同的计费模式有着不同的适用场景。企业合理利用云资源的不同计费模式,来适配不同的业务形态,可以有效降低费率,实现成本节省。 按需计费:适用于临时、突发的业务场景。 包年包月:通过预付一定周期的资源使用费用,来获取优惠的计费模式。一般适用于资源长期使用,业务较稳定的场景。 资源包:一种特殊的包年包月,可通过预付一定周期下某种资源使用量的费用,来获取优惠的计费模式。资源包可以抵扣多个资源的用量,适用于长期使用且用量比较稳定的场景。 竞价计费:适应于业务稳定性不高,中断也不影响业务的场景,目前仅ECS支持。
  • 了解账单和多维度对账 多样化的费用图表可以帮助您快速了解账单情况,完成账单的多维度对账。 华为云为客户提供多种维度的账单介绍,您可以重点关注总体的消费走势、Top产品类型、Top企业项目、Top区域、Top计费模式,从而快速评估月度消费是否符合预期。您还可以获取流水账单和明细账单,按月度查看资金流水和资源扣费的详细信息。消费总计、付款情况、账单的明细数据等。 图1 账单概览 客户可以将华为云导出的账单和公司自己财务生成的账单进行多维度对账,以确认资源的购买、使用和账户的实际支出是否一致。
  • 资金监控和资源包预警 华为云分别从账户资金余额和资源包剩余使用量的角度跟踪是否有异常支出,避免产生额外消费。 开启可用额度预警,您可以及时接收系统发出的可用额度不足预警,从资金账户的角度跟踪支出是否存在异常。 图2 余额预警 如果您购买了资源包,可使用费用中心的资源包管理功能,及时了解已购买资源包的剩余用量情况;并开启资源包的剩余使用量预警,在资源包用尽前及时接收预警,从而通过限制按需使用或补充购买新资源包的方式,避免意外按需消费的产生。 图3 资源包预警
  • 示例说明 以使用MD5算法为例: 回源请求对象: http://hwcdn.example.com/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3 密钥设为:huaweicloud12345(用户自行设置) 用户访问客户源服务器时间为:201706301000(格式为:YYYYMMDDHHMM) CDN服务器构造一个用于计算md5hash的签名字符串: huaweicloud12345201706301000/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3 CDN服务器根据该签名字符串计算md5hash: md5hash = md5sum("huaweicloud12345201706301000/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3") =668f28d134ec6446a8ae83a43d0a554b 请求CDN时URL: http://hwcdn.example.com/201706301000/668f28d134ec6446a8ae83a43d0a554b/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3 如果请求在有效时间内(请求时间小于等于2017年6月30日10:30:00),并且计算出来的md5hash与用户请求中带的md5hash值(668f28d134ec6446a8ae83a43d0a554b)一致,则鉴权通过。
  • 校验方法 CDN服务器收到请求后,会按照如下步骤进行校验: 是否携带鉴权参数。如果没有携带鉴权参数,认为请求非法,返回HTTP 403错误。 时间校验:CDN服务器接收到客户端请求后,判断鉴权URL中的“timestamp参数 + 鉴权URL有效时长”是否大于当前时间。 如果“timestamp参数 + 鉴权URL有效时长”小于当前时间,认为过期失效并返回HTTP 403错误。 如果“timestamp参数 + 鉴权URL有效时长”大于或等于当前时间,则通过时间校验,继续执行步骤3。 加密串校验:时间校验通过后,则以sstring方式构造出一个字符串(参考以下sstring构造方式)。然后使用md5(sha256)算法算出HashValue,并和用户请求中带来的md5hash(sha256)进行对比。结果一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。HashValue计算方式如下: sstring = “PrivateKeytimestampFilename” HashValue = sha256sum(sstring) 或: sstring = “PrivateKeytimestampFilename” HashValue = md5sum(sstring)
  • 准备环境 准备待用的签名密钥的Key和Secret。 已在控制台创建签名密钥,并绑定API,具体请参见创建并使用签名密钥。 下载SDK的最新版本。 获取并安装Python安装包(可使用2.7或3.X),如果未安装,请至Python官方下载页面下载。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已在IntelliJ IDEA中安装Python插件,如果未安装,请按照图1所示安装。 图1 安装Python插件
  • 前提条件 准备待用的签名密钥的Key和Secret。 已在控制台创建签名密钥,并绑定API,具体请参见创建并使用签名密钥。 下载SDK的最新版本。 已获取apigateway-backend-signature-demo。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已安装Java Development Kit 1.8.111或以上版本,如果未安装,请至Oracle官方下载页面下载。
  • 生成签名 生成签名的方式和APP认证相同,用AK代替APP认证中的AppKey,SK替换APP认证中的AppSecret,即可完成签名和请求。您可使用Java、Go、Python、C#、JavaScript、PHP、C++、C、Android进行签名和访问。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 API网关(即API管理)除了校验时间格式外,还会校验该时间值与网关收到请求的时间差,如果时间差大于15分钟,API网关将拒绝请求。
  • 调用API示例 获取Token ,并设置成环境变量,Token用于后续调用其他接口鉴权。 获取用户Token,请求内容示例如下: curl -X POST https://{iam_endpoint}/v3/auth/tokens -H 'content-type: application/json' -d '{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "{user_name}", "domain": { "name": "{user_name}" }, "password": "{password}" } } }, "scope": { "project": { "id": "{project_id}" } } } }' -vk 上述命令中,部分参数请参见以下说明进行修改,具体请参考《 统一身份认证 服务API参考》的获取用户Token接口: {iam_endpoint}请参见地区和终端节点获取。 {user_name}和{password}分别替换为连接 IAM 服务器的用户名和密码。 {project_id}为项目ID。在管理控制台,将鼠标移至用户名,在下拉列表中单击“我的凭证”,查看“项目ID”。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值,如下图所示: 图1 从返回消息的Header中获取X-Subject-Token 使用如下命令将token设置为环境变量,方便后续事项。 export Token={X-Subject-Token} X-Subject-Token即为1.a获取到的token,命令示例如下: export Token=MIIDkg******BZQMEAgEwg 调用API,请参考认证前准备获取域名、请求方法和URL,并在请求消息头中增加“X-Auth-Token”,“X-Auth-Token”的取值为1中获取的Token。参数请根据实际情况填写。 curl -X 请求方法 域名+URL -H "x-auth-token: $Token" -vk
  • 步骤4:添加签名信息到请求头 在计算签名后,将它添加到Authorization的HTTP消息头。Authorization消息头未包含在已签名消息头中,主要用于身份验证。 伪代码如下: Authorization header创建伪码: Authorization: algorithm Access=APP key, SignedHeaders=SignedHeaders, Signature=signature 需要注意的是算法与Access之前没有逗号,但是SignedHeaders与Signature之前需要使用逗号隔开。 得到的签名消息头为: Authorization: SDK-HMAC-SHA256 Access=FM9RLCN************NAXISK, SignedHeaders=host;x-sdk-date, Signature=01cc37e53d821da93bb7239c5b6e1640b184a748f8c20e61987b491e00b15822 得到签名消息头后,将其增加到原始HTTP请求内容中,请求将被发送给API网关,由API网关完成身份认证。身份认证通过后,该请求才会发送给后端服务进行业务处理。
  • 步骤2:创建待签字符串 对HTTP请求进行规范并取得请求的哈希值后,将其与签名算法、签名时间一起组成待签名字符串。 StringToSign = Algorithm + \n + RequestDateTime + \n + HashedCanonicalRequest 伪代码中参数说明如下。 Algorithm 签名算法。对于SHA 256,算法为SDK-HMAC-SHA256。 RequestDateTime 请求时间戳。与请求消息头X-Sdk-Date的值相同,格式为YYYYMMDDTHHMMSSZ。 HashedCanonicalRequest 经过哈希处理的规范请求。 上述例子得到的待签字符串为: SDK-HMAC-SHA256 20191111T093443Z af71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 步骤1:构造规范请求 使用APP方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与API网关使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。 HTTP请求规范伪代码如下: CanonicalRequest = HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HexEncode(Hash(RequestPayload)) 通过以下示例来说明规范请求的构造步骤。 假设原始请求如下: GET https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?b=2&a=1 HTTP/1.1 Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com X-Sdk-Date: 20191111T093443Z 构造HTTP请求方法(HTTPRequestMethod),以换行符结束。 HTTP请求方法,如GET、PUT、POST等。请求方法示例: GET 添加规范URI参数(CanonicalURI),以换行符结束。 释义: 规范URI,即请求资源路径,是URI的绝对路径部分的URI编码。 格式: 根据RFC 3986标准化URI路径,移除冗余和相对路径部分,路径中每个部分必须为URI编码。如果URI路径不以“/”结尾,则在尾部添加“/”。 举例: 示例中的URI:/app1,此时规范的URI编码为: GET /app1/ 计算签名时,URI必须以“/”结尾。发送请求时,可以不以“/”结尾。 添加规范查询字符串(CanonicalQueryString),以换行符结束。 释义: 查询字符串,即查询参数。如果没有查询参数,则为空字符串,即规范后的请求为空行。 格式: 规范查询字符串需要满足以下要求: 根据以下规则对每个参数名和值进行URI编码: 请勿对RFC 3986定义的任何非预留字符进行URI编码,这些字符包括:A-Z、a-z、0-9、-、_、.和~。 使用%XY对所有非预留字符进行百分比编码,其中X和Y为十六进制字符(0-9和A-F)。例如,空格字符必须编码为%20,扩展UTF-8字符必须采用“%XY%ZA%BC”格式。 对于每个参数,追加“URI编码的参数名称=URI编码的参数值”。如果没有参数值,则以空字符串代替,但不能省略“=”。 例如以下含有两个参数,其中第二个参数parm2的值为空。 parm1=value1&parm2= 按照字符代码以升序顺序对参数名进行排序。例如,以大写字母F开头的参数名排在以小写字母b开头的参数名之前。 以排序后的第一个参数名开始,构造规范查询字符串。 举例: 示例中包含两个可选参数:a、b GET /app1/ a=1&b=2 添加规范消息头(CanonicalHeaders),以换行符结束。 释义: 规范消息头,即请求消息头列表。包括签名请求中的所有HTTP消息头列表。消息头必须包含X-Sdk-Date,用于校验签名时间,格式为ISO8601标准的UTC时间格式:YYYYMMDDTHHMMSSZ。如果API发布到非RELEASE环境时,需要增加自定义的环境名称。 客户端须注意本地时间与时钟服务器的同步,避免请求消息头X-Sdk-Date的值出现较大误差。 API网关除了校验时间格式外,还会校验该时间值与网关收到请求的时间差,如果时间差大于15分钟,API网关将拒绝请求。 格式: CanonicalHeaders由多个请求消息头共同组成,CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ...,其中每个请求消息头(CanonicalHeadersEntry)的格式为Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\n' Lowercase表示将所有字符转换为小写字母的函数。 Trimall表示删除值前后的多余空格的函数。 最后一个请求消息头也会携带一个换行符。叠加规范中CanonicalHeaders自身携带的换行符,因此会出现一个空行。 消息头名称要保持唯一性,出现多个相同消息头名称时,无法完成认证。 举例: GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z 规范消息头需要满足以下要求: 将消息头名称转换为小写形式,并删除前导空格和尾随空格。 按照字符代码对消息头名称进行升序排序。 例如原始消息头为: Host: c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\n Content-Type: application/json;charset=utf8\n My-header1: a b c \n X-Sdk-Date:20191111T093443Z\n My-Header2: "a b c" \n 规范消息头为: content-type:application/json;charset=utf8\n host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com\n my-header1:a b c\n my-header2:"a b c"\n x-sdk-date:20191111T093443Z\n 添加用于签名的消息头声明(SignedHeaders),以换行符结束。 释义: 用于签名的请求消息头列表。通过添加此消息头,向API网关告知请求中哪些消息头是签名过程的一部分,以及在验证请求时API网关可以忽略哪些消息头。X-Sdk-date必须作为已签名的消息头。 格式: SignedHeaders = Lowercase(HeaderName0) + ';' + Lowercase(HeaderName1) + ";" + ... 已签名的消息头需要满足以下要求:将已签名的消息头名称转换为小写形式,按照字符代码对消息头进行排序,并使用“;”来分隔多个消息头。 Lowercase表示将所有字符转换为小写字母。 举例: 以下表示有两个消息头参与签名:host、x-sdk-date GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z host;x-sdk-date 基于HTTP或HTTPS请求正文中的body体(RequestPayload),使用SHA-256哈希函数创建哈希值。 释义: 请求消息体。消息体需要做两层转换:HexEncode(Hash(RequestPayload)),其中Hash表示生成消息摘要的函数,当前支持SHA-256算法。HexEncode表示以小写字母形式返回摘要的Base-16编码的函数。例如,HexEncode("m") 返回值为“6d”而不是“6D”。输入的每一个字节都表示为两个十六进制字符。 计算RequestPayload的哈希值时,对于“RequestPayload==null”的场景,直接使用空字符串""来计算。 举例: 本示例为GET方法,body体为空。经过哈希处理的body(空字符串)如下: GET /app1/ a=1&b=2 host:c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com x-sdk-date:20191111T093443Z host;x-sdk-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 对构造好的规范请求进行哈希处理,算法与对RequestPayload哈希处理的算法相同。经过哈希处理的规范请求必须以小写十六进制字符串形式表示。 算法伪代码:Lowercase(HexEncode(Hash.SHA256(CanonicalRequest))) 经过哈希处理的规范请求示例: af71c5a7ef45310b8dc05ab15f7da50189ffa81a95cc284379ebaa5eb61155c0
  • 步骤3:计算签名 将APP secret和创建的待签字符串作为加密哈希函数的输入,计算签名,将二进制值转换为十六进制表示形式。 伪代码如下: signature = HexEncode(HMAC(APP secret, string to sign)) 其中HMAC指密钥相关的哈希运算,HexEncode指转十六进制。伪代码中参数说明如表1所示。 表1 参数说明 参数名称 参数解释 APP secret 签名密钥 string to sign 创建的待签字符串 假设APP secret为FWTh5tqu2Pb9ZGt8NI09XYZti2V1LTa8useKXMD8,则计算得到的signature为: 01cc37e53d821da93bb7239c5b6e1640b184a748f8c20e61987b491e00b15822
  • 调用API示例 使用JavaScript SDK生成curl命令。 下载JavaScript SDK的最新版本,并解压。在浏览器中打开demo.html,页面如下图所示。 填入Key、Secret、方法名、请求协议、域名和url。例如: 1 2 3 4 Key=4f5f626b-073f-402f-a1e0-e52171c6100c Secret=****** Method=POST Url=https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com 填入json格式的Query和Headers,填入Body。 单击“Send request”,生成curl命令。将curl命令复制到命令行,访问API。 $ curl -X POST "https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/" -H "X-Sdk-Date: 20180530T115847Z" -H "Authorization: SDK-HMAC-SHA256 Access=071fe245-9cf6-4d75-822d-c29945a1e06a, SignedHeaders=host;x-sdk-date, Signature=9e5314bd156d517******dd3e5765fdde4" -d "" Congratulations, sdk demo is running SDK生成的curl命令不符合Window下cmd终端格式,请在git bash下执行生成的curl命令。
  • 调用API示例 在Android工程中的“app/libs”目录下,加入SDK所需jar包。其中jar包必须包括: java-sdk-core-x.x.x.jar joda-time-2.10.jar 在“build.gradle”文件中加入okhttp库的依赖。 在“build.gradle”文件中的“dependencies”下加入“implementation 'com.squareup.okhttp3:okhttp:3.14.2'”。 dependencies { ... ... implementation 'com.squareup.okhttp3:okhttp:3.14.3' } 创建request,输入AppKey和AppSecret,并指定域名、方法名、请求uri和body。 Request request = new Request(); try { request.setKey("4f5f626b-073f-402f-a1e0-e52171c6100c"); request.setSecrect("******"); request.setMethod("POST"); request.setUrl("https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1"); request.addQueryStringParam("name", "value"); request.addHeader("Content-Type", "text/plain"); request.setBody("demo"); } catch (Exception e) { e.printStackTrace(); return; } 对请求进行签名,生成okhttp3.Request对象来访问API。 okhttp3.Request signedRequest = Client.signOkhttp(request); OkHttpClient client = new OkHttpClient.Builder().build(); Response response = client.newCall(signedRequest).execute();
  • 准备环境 已获取API的域名、请求url、请求方法、AppKey和AppSecret等信息,具体参见认证前准备。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 获取并安装PHP安装包,如果未安装,请至PHP官方下载页面下载。 将PHP安装目录中的“php.ini-production”文件复制到“C:\windows”,改名为“php.ini”,并在文件中增加如下内容。 1 2 3 extension_dir = "php安装目录/ext" extension=openssl extension=curl 已在IntelliJ IDEA中安装PHP插件,如果未安装,请按照图1所示安装。 图1 安装PHP插件
  • 调用API(Node.js)示例 在工程中引入signer.js。 var signer = require('./signer') var http = require('http') 生成一个新的Signer,填入AppKey和AppSecret。 var sig = new signer.Signer() sig.Key = "4f5f626b-073f-402f-a1e0-e52171c6100c" sig.Secret = "******" 生成一个Request对象,指定方法名、请求uri和body。 var r = new signer.HttpRequest("POST", "c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?a=1"); r.body = '{"a":1}' 给请求添加x-stage头,内容为环境名。如有需要,添加需要签名的其他头域。 r.headers = { "x-stage":"RELEASE" } 进行签名,执行此函数会生成请求参数,用于创建http(s)请求,请求参数中添加了用于签名的X-Sdk-Date头和Authorization头。 var opts = sig.Sign(r) 访问API,查看访问结果。如果使用https访问,则将“http.request”改为“https.request”。 var req=http.request(opts, function(res){ console.log(res.statusCode) res.on("data", function(chunk){ console.log(chunk.toString()) }) }) req.on("error",function(err){ console.log(err.message) }) req.write(r.body) req.end()
  • 准备环境 已获取API的域名、请求url、请求方法、AppKey和AppSecret等信息,具体参见认证前准备。 获取并安装Nodejs安装包,如果未安装,请至Nodejs官方下载页面下载。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已在IntelliJ IDEA中安装NodeJS插件,如果未安装,请按照图1所示安装。 图1 安装NodeJS插件
  • 获取SDK 下载SDK的最新版本,获取“ApiGateway-javascript-sdk.zip”压缩包,解压后目录结构如下: 名称 说明 signer.js SDK代码 node_demo.js Nodejs示例代码 demo.html 浏览器示例代码 demo_require.html 浏览器示例代码(使用require加载) test.js 测试用例 js\hmac-sha256.js 依赖库 licenses\license-crypto-js 第三方库license文件 licenses\license-node
  • 调用API示例 在工程中引入sdk。 1 using APIGATEWAY_SDK; 生成一个新的Signer, 填入AppKey和AppSecret。 1 2 3 Signer signer = new Signer(); signer.Key = "4f5f626b-073f-402f-a1e0-e52171c6100c"; signer.Secret = "******"; 生成一个HttpRequest对象,指定域方法名、请求url和body。 1 2 3 HttpRequest r = new HttpRequest("POST", new Uri("https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?query=value")); r.body = "{\"a\":1}"; 给请求添加x-stage头,内容为环境名。如有需要,添加需要签名的其他头域。 1 r.headers.Add("x-stage", "RELEASE"); 进行签名,执行此函数会生成一个新的HttpWebRequest,并在请求参数中添加用于签名的X-Sdk-Date头和Authorization头。 1 HttpWebRequest req = signer.Sign(r); 访问API,查看访问结果。 1 2 3 4 5 6 var writer = new StreamWriter(req.GetRequestStream()); writer.Write(r.body); writer.Flush(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var reader = newStreamReader(resp.GetResponseStream()); Console.WriteLine(reader.ReadToEnd());
  • 获取SDK 下载SDK的最新版本,获取“ApiGateway-csharp-sdk.zip”压缩包,解压后目录结构如下: 名称 说明 apigateway-signature\Signer.cs SDK代码 apigateway-signature\HttpEncoder.cs sdk-request\Program.cs 签名请求示例代码 backend-signature\ 后端签名示例工程 csharp.sln 工程文件 licenses\license-referencesource 第三方库license文件
  • 准备环境 已获取API的域名、请求url、请求方法、AppKey和AppSecret等信息,具体参见认证前准备。 获取并安装Python安装包(可使用2.7.9+或3.X),如果未安装,请至Python官方下载页面下载。 Python安装完成后,在cmd/shell窗口中使用pip安装“requests”库。 pip install requests 如果pip安装requests遇到证书错误,请下载并使用Python执行此文件,升级pip,然后再执行以上命令安装。 获取并安装IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。 已在IntelliJ IDEA中安装Python插件,如果未安装,请按照图1所示安装。 图1 安装Python插件
  • 调用API示例 在工程中引入apig_sdk。 1 2 from apig_sdk import signer import requests 生成一个新的Signer,填入AppKey和AppSecret。 1 2 3 sig = signer.Signer() sig.Key = "4f5f626b-073f-402f-a1e0-e52171c6100c" sig.Secret = "******" 生成一个Request对象,指定方法名、请求uri、header和body。 1 2 3 4 r = signer.HttpRequest("POST", "https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?a=1", {"x-stage": "RELEASE"}, "body") 进行签名,执行此函数会在请求参数中添加用于签名的X-Sdk-Date头和Authorization头。 X-Sdk-Date是一个必须参与签名的请求消息头参数。 1 sig.Sign(r) 访问API,查看访问结果。 1 2 3 resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri, headers=r.headers, data=r.body) print(resp.status_code, resp.reason) print(resp.content)
  • 调用API示例 在工程中引入sdk(signer.go)。 import "apig-sdk/go/core" 生成一个新的Signer,输入AppKey和AppSecret。 s := core.Signer{ Key: "4f5f626b-073f-402f-a1e0-e52171c6100c", Secret: "******", } 生成一个新的Request,指定域名、方法名、请求url、query和body。 r, _ := http.NewRequest("POST", "http://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/api?a=1&b=2", ioutil.NopCloser(bytes.NewBuffer([]byte("foo=bar")))) 给请求添加x-stage头,内容为环境名。如有需要,添加需要签名的其他头域。 r.Header.Add("x-stage", "RELEASE") 进行签名,执行此函数会在请求中添加用于签名的X-Sdk-Date头和Authorization头。 s.Sign(r) 访问API,查看访问结果。 resp, err := http.DefaultClient.Do(r) body, err := ioutil.ReadAll(resp.Body)
共100000条