华为云API网关APIG实战:发布与管理API
一、背景:为什么需要 API 网关
当后端服务越来越多,直接把每个服务暴露给调用方会带来一连串问题:鉴权逻辑在各服务里重复实现、无法统一限流防刷、接口版本和环境混乱、调用量无从统计。API 网关正是为此而生,它站在所有后端服务前面,统一负责认证、流控、路由、监控等“非业务”能力。
华为云 API 网关 APIG(API Gateway) 提供 API 的托管、发布、管理和运维能力,支持将 ECS、CCE、FunctionGraph 或任意 HTTP 服务开放为 API。本文以“把一个已有的 HTTP 服务开放给合作方调用”为主线,介绍 API 分组、后端服务配置、三种认证方式、流量控制、环境发布、在线调试以及使用 APP 认证调用 API 的完整过程。
二、核心概念
| 概念 | 说明 |
|---|---|
| 实例 | APIG 专享版需要先购买实例,所有 API 都运行在实例中,可选不同规格 |
| API 分组 | API 的管理单元,一个分组对应一个调试域名,可绑定自定义域名 |
| API | 定义前端请求路径、方法、认证方式,以及对应的后端服务 |
| 后端服务 | API 实际转发的目标,可以是 HTTP/HTTPS 地址、负载通道(VPC 通道)、FunctionGraph 或 Mock |
| 环境 | API 的发布目标,如 RELEASE(线上)、自定义的 test 等,同一个 API 可在不同环境发布 |
| 凭据(应用) | APP 认证下调用方的身份,包含 Key 和 Secret |
| 流量控制策略 | 按 API、用户、凭据或源 IP 限制单位时间内的调用次数 |
一次调用的链路为:客户端 → APIG(认证、流控、参数校验)→ 后端服务 → 返回结果。
三、准备工作:实例与 API 分组
- 在控制台进入“API 网关 APIG”,购买专享版实例,选择与后端服务相同的区域和 VPC,便于通过内网访问后端;如需公网调用,开启公网入口。
- 进入实例,选择“API 管理 → API 分组”,点击“创建 API 分组”,例如命名为
order-open-api。 - 分组创建后会自动分配一个调试域名,仅用于开发测试;生产环境建议在分组详情中绑定自定义域名,并配置 SSL 证书启用 HTTPS(需要先在 DNS 中将域名 CNAME 到分组的调试域名)。
四、创建 API 与配置后端服务
在分组中点击“创建 API”,配置分为前端定义和后端定义两部分。
前端定义:
- 请求协议:HTTPS(推荐)或 HTTP;
- 请求路径:例如
/v1/orders/{orderId},花括号表示路径参数; - 请求方法:GET、POST 等;
- 认证方式:APP 认证、IAM 认证或无认证(详见下一节);
- 请求参数:声明 Path、Query、Header 参数及其类型、是否必填,网关会做前置校验。
后端定义:
- HTTP/HTTPS:填写后端地址,如内网 IP 加端口;后端部署在多台 ECS 时,推荐创建“负载通道”(VPC 通道),由网关在多个后端节点间负载均衡并做健康检查;
- FunctionGraph:直接对接函数,适合 Serverless 场景;
- Mock:返回固定响应,适合前后端并行开发。
后端请求路径可以引用前端参数,例如前端的 {orderId} 映射到后端 /internal/order/{orderId},实现对外路径与内部实现解耦。还可以设置后端超时时间和常量参数(如在转发时追加固定 Header,标识请求来自网关)。
五、三种认证方式如何选择
| 认证方式 | 原理 | 适用场景 |
|---|---|---|
| APP 认证 | 调用方使用凭据的 Key/Secret 对请求签名,网关校验签名 | 开放给第三方合作伙伴、外部应用 |
| IAM 认证 | 调用方使用华为云 IAM Token 或 AK/SK 签名 | 华为云内部账号、同一组织的系统间调用 |
| 无认证 | 网关不做身份校验 | 公开数据接口,或后端自行鉴权 |
此外还支持自定义认证:将认证逻辑写在 FunctionGraph 函数中,由网关在转发前调用,适合对接已有的 Token 体系。选择“无认证”时务必配合流控和访问控制策略(IP 黑白名单),避免接口被滥用。
六、流量控制策略
在“API 策略”中创建流量控制策略,可以从多个维度限制调用:
- API 流量限制:单个 API 在时长内的总调用上限,保护后端不被打垮;
- 用户流量限制:单个账号的调用上限;
- 凭据流量限制:单个 APP 的调用上限,常用于按合作方分级;
- 源 IP 流量限制:单个 IP 的调用上限,防止恶意刷接口。
例如设置时长 1 秒、API 流量上限 200 次、凭据流量上限 50 次,并在策略的“特殊凭据”中为 VIP 合作方单独提高额度。策略创建后需绑定到 API 的指定环境才会生效。超出限制的请求会被网关直接拒绝并返回 429 类错误,不会到达后端。
七、发布到环境与在线调试
API 创建后并不能立即被调用,需要发布到环境:
- 在“环境管理”中可创建
test等自定义环境,默认已有 RELEASE 环境; - 在 API 列表中点击“发布”,选择环境并填写发布说明,每次发布都会生成历史版本,支持一键回滚;
- 调用非 RELEASE 环境时,需要在请求中携带环境标识 Header(
x-stage),网关据此路由到对应环境; - 结合“环境变量”,同一个 API 可以在不同环境中指向不同的后端地址,实现测试、生产隔离。
发布前建议先用控制台的调试功能:在 API 详情页点击“调试”,填写路径参数、Query 和 Header 后发送请求,页面会展示完整的请求与响应,便于快速定位是参数映射还是后端本身的问题。
八、使用 APP 认证调用 API
- 在“API 策略 → 凭据管理”中创建凭据,系统生成 Key 和 Secret;
- 在 API 详情中“授权”给该凭据,并选择环境;
- 调用方使用华为云提供的 APIG 签名 SDK(支持 Java、Python、Go、JavaScript 等)对请求签名。
以 Python 签名 SDK 为例,核心思路如下(apig_sdk 来自控制台“SDK”页面下载的签名示例代码):
import requests
from apig_sdk import signer
sig = signer.Signer()
sig.Key = "your-app-key" # 从环境变量或配置中心读取,勿硬编码
sig.Secret = "your-app-secret"
r = signer.HttpRequest(
"GET",
"https://api.yourdomain.com/v1/orders/1001",
)
r.headers = {"content-type": "application/json"}
sig.Sign(r) # 生成 X-Sdk-Date 与 Authorization 签名头
resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri,
headers=r.headers, data=r.body)
print(resp.status_code, resp.text)
签名会把时间戳纳入计算,因此调用方服务器时间必须准确,否则会出现签名过期错误。如果只是简单测试,也可以给凭据开启“简易认证”,在 HTTPS 请求中携带 AppCode Header 调用,但生产环境仍建议使用签名方式。
九、运维建议
- 监控告警:在 API 详情或云监控 CES 中查看调用次数、错误率、时延,为 5xx 比例设置告警;
- 日志分析:对接云日志服务 LTS,记录每次调用的状态码与耗时,便于排障;
- 安全加固:生产环境使用自定义域名 + HTTPS,配合访问控制策略限制来源 IP;
- 版本管理:通过路径前缀(如
/v1、/v2)区分 API 版本,借助发布历史快速回滚; - 后端保护:合理设置后端超时与流控上限,避免突发流量导致后端雪崩。
十、总结
API 网关 APIG 把认证、流控、路由、发布与监控统一沉淀到网关层,让后端服务只需关注业务逻辑。实践中的主线是:按业务划分 API 分组并绑定自定义域名;后端多节点时使用负载通道;对外开放优先 APP 认证,内部调用使用 IAM 认证;为每个 API 绑定流量控制策略;先在测试环境调试,再发布到 RELEASE 并保留回滚能力。掌握这些,就能在华为云上快速、安全地对外开放自己的 API 能力。
- 点赞
- 收藏
- 关注作者
评论(0)