华为云API网关APIG实战:发布与管理API

举报
yd_282720827 发表于 2026/11/04 16:23:05 2026/11/04
【摘要】 本文以将已有HTTP服务开放给合作方为主线,详解APIG的API分组与自定义域名、后端服务与负载通道配置、APP/IAM/无认证三种方式选择、流量控制策略、环境发布与在线调试,以及使用APP认证签名SDK调用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 分组

  1. 在控制台进入“API 网关 APIG”,购买专享版实例,选择与后端服务相同的区域和 VPC,便于通过内网访问后端;如需公网调用,开启公网入口。
  2. 进入实例,选择“API 管理 → API 分组”,点击“创建 API 分组”,例如命名为 order-open-api。
  3. 分组创建后会自动分配一个调试域名,仅用于开发测试;生产环境建议在分组详情中绑定自定义域名,并配置 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 创建后并不能立即被调用,需要发布到环境:

  1. 在“环境管理”中可创建 test 等自定义环境,默认已有 RELEASE 环境;
  2. 在 API 列表中点击“发布”,选择环境并填写发布说明,每次发布都会生成历史版本,支持一键回滚;
  3. 调用非 RELEASE 环境时,需要在请求中携带环境标识 Header(x-stage),网关据此路由到对应环境;
  4. 结合“环境变量”,同一个 API 可以在不同环境中指向不同的后端地址,实现测试、生产隔离。

发布前建议先用控制台的调试功能:在 API 详情页点击“调试”,填写路径参数、Query 和 Header 后发送请求,页面会展示完整的请求与响应,便于快速定位是参数映射还是后端本身的问题。

八、使用 APP 认证调用 API

  1. 在“API 策略 → 凭据管理”中创建凭据,系统生成 Key 和 Secret;
  2. 在 API 详情中“授权”给该凭据,并选择环境;
  3. 调用方使用华为云提供的 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 调用,但生产环境仍建议使用签名方式。

九、运维建议

  1. 监控告警:在 API 详情或云监控 CES 中查看调用次数、错误率、时延,为 5xx 比例设置告警;
  2. 日志分析:对接云日志服务 LTS,记录每次调用的状态码与耗时,便于排障;
  3. 安全加固:生产环境使用自定义域名 + HTTPS,配合访问控制策略限制来源 IP;
  4. 版本管理:通过路径前缀(如 /v1、/v2)区分 API 版本,借助发布历史快速回滚;
  5. 后端保护:合理设置后端超时与流控上限,避免突发流量导致后端雪崩。

十、总结

API 网关 APIG 把认证、流控、路由、发布与监控统一沉淀到网关层,让后端服务只需关注业务逻辑。实践中的主线是:按业务划分 API 分组并绑定自定义域名;后端多节点时使用负载通道;对外开放优先 APP 认证,内部调用使用 IAM 认证;为每个 API 绑定流量控制策略;先在测试环境调试,再发布到 RELEASE 并保留回滚能力。掌握这些,就能在华为云上快速、安全地对外开放自己的 API 能力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。