API 网关专栏 · 第 91 章

API 网关中的 API 发现与文档管理:清单、归属与漂移

2026年09月22日
API 网关中的 API 发现与文档管理:清单、归属与漂移

API 网关知道自己被配置来处理哪些主机、路径、方法、策略和上游,因此是很有价值的 API 发现证据来源。但它不是完整的 API 清单,也无法仅凭流量或路由生成可信文档。

可靠的治理方案需要核对四种视图:经过审查的 API 契约、有效网关状态、实际暴露与流量,以及归属清单。文档应由获批契约与指南发布,差异则进入有负责人的漂移处理流程,而不是悄悄改写源文件。

核心要点

  • 把网关配置与流量视为观测证据,而不是唯一事实来源。
  • 为每个 API 指定负责人、受众、环境、版本、数据分类、生命周期状态和退役计划。
  • 使用经过审查的 OpenAPI 描述和人工编写的指南发布参考文档。
  • 核对各来源中缺失、意外、重复、过期和不可达的 API。
  • 按策略分开公开、合作伙伴、内部和管理类目录。
  • 在网关、DNS、上游、门户、客户端和数据层共同验证退役结果。

明确“已发现”的含义

不同来源回答不同问题:

来源能说明什么无法单独证明什么
OpenAPI 仓库预期操作、Schema、安全契约和版本契约已部署或准确
网关配置有效路由、插件、上游和暴露设置未记载的内部调用或应用行为
流量观测主机、路径、方法、状态、流量和活跃客户端合法归属、完整 Schema 或安全授权
服务目录负责人、系统、环境、数据分类和生命周期每个端点都只按记录方式可达
开发者门户获准消费者能够找到和阅读的内容隐藏、影子、已退役或直连后端的暴露面
DNS、负载均衡器与云清单能从外部或内部访问的表面API 语义和策略正确性

发现流程应该创建候选项或差异项,而不是自动发布 API。观测到的流量可能来自扫描器、错误路径、私有数据或过期客户端。

核对四种视图

1flowchart LR
2    C[经过审查的 OpenAPI 与指南] --> R[核对服务]
3    G[有效网关清单] --> R
4    T[观测到的主机、路径、方法和客户端] --> R
5    O[归属与生命周期目录] --> R
6    R --> D[带负责人和严重程度的漂移队列]
7    R --> P[获批文档版本]
8    P --> X[公开、合作伙伴或内部门户]
9    D -->|经审查的修正| C
10    D -->|经审查的网关变更| G

核对服务只负责比较证据,不会把运行时状态自动复制回源文件,也不会自动发布观测流量。每项修正都应由存在缺陷的制品负责人处理。

构建清单记录

使用稳定标识符,而不要只依赖显示名称。一条实用的记录应包含:

  • API 与操作 ID;
  • 负责团队和 On-call 联系方式;
  • 业务用途和受支持消费者;
  • 公开、合作伙伴、内部或管理类受众;
  • 环境、区域、主机名、基础路径和协议;
  • 契约版本与网关配置版本;
  • 认证方式、粗粒度授权和敏感数据分类;
  • 上游服务与绕过控制;
  • 生命周期状态:提议、活跃、弃用、退役或例外;
  • 弃用日期、替代版本、最后观测使用时间和退役负责人;
  • 文档 URL 与最近一次验证结果。

OWASP API Security Top 10 2023 把清单管理不当列为风险,其中包括主机、环境、版本、文档和退役状态不清。因此,API 清单是运维安全控制,而不只是门户索引。

把 OpenAPI 作为参考契约

OpenAPI 3.1.2定义了一种与编程语言无关的描述方式,让人和计算机理解 HTTP API 表面。OpenAPI Description 可以为参考文档、验证、测试和客户端工具提供输入。

它仍然需要审查。应对照实际部署行为验证路径、方法、参数、Schema、响应、服务器、安全要求、示例和外部引用。OpenAPI 还警告,外部资源可能不可信、引用循环可能耗尽工具资源,而且 Markdown 或 HTML 字段必须经过清理。

Operation Object 的 deprecated 布尔值默认为 false。设为 true 时,它会告知消费者应避免使用该操作;设为 false 或省略时,文档并不承诺无限期支持。两条路径都不会在网关关闭路由,退役仍需单独执行流量与生命周期操作。

参考文档只是其中一层。还需要补充面向任务的快速入门、认证配置、错误处理、限制、示例、变更日志、迁移指南、支持渠道和状态信息。配套文章 使用 OpenAPI 编写 API 文档进一步介绍契约编写流程。

安全收集网关证据

Apache APISIX 3.19.0 的 Admin API暴露 Route、Service、Upstream、Consumer、证书等配置资源。即使只读,访问该 API 仍属于高权限操作:配置可能泄露内部主机、插件设置、身份结构和机密信息引用。

应使用受限运维网络和托管凭据,只导出清单所需字段,脱敏机密信息,并记录源集群、版本和采集时间。成功读取只能说明所选控制面返回了什么,无法证明所有数据面都已应用相同版本,也无法证明不存在绕过网关的上游直连。

可以把路由证据标准化为如下稳定字段:

1{
2  "gateway_cluster": "prod-eu-a",
3  "route_id": "orders-v2-get",
4  "hosts": ["api.example.com"],
5  "methods": ["GET"],
6  "paths": ["/v2/orders/*"],
7  "service_id": "orders-v2",
8  "observed_config_revision": "sha256:example",
9  "collected_at": "2026-09-22T00:00:00Z"
10}

这是清单数据结构,不是 APISIX Admin API 响应 Schema。摘要只是占位符,必须替换为运维人员实际掌握的发布证据。

先给漂移分类,再修复

差异可能的负责人安全的后续操作
契约中的操作未出现在网关交付或发布负责人新建路由前先确认环境与发布意图
网关路由未出现在契约API 与平台负责人判断它是内部、应急、过期还是影子路由
已弃用版本仍有流量产品与客户端负责人找到获准客户端并执行迁移计划
门户页面指向旧契约文档负责人从获批版本重新构建,并验证链接与示例
DNS 或负载均衡器绕过网关网络与服务负责人关闭替代路径,或显式纳入治理
负责人缺失或无法联系平台治理团队升级处理;必要时限制暴露,并分配负责人

不要自动删除意外路由。它可能是获得授权的事故应急措施。应记录操作者、目的、到期时间和跟进项,再通过审查完成核对。

面向目标受众发布

目录可见性和运行时授权是两种不同控制。隐藏门户页面不会保护路由,发布文档也不会授予访问权限。

在 API7 Enterprise 3.10.x 中,API Product可以把网关 Service 组合为开发者门户中的产品,并根据关联的 OpenAPI 规范生成文档。该文档区分了网关产品与外部产品:外部产品不由 API7 Gateway 代理,也不使用相同的订阅或凭据路径。这是特定产品与版本的发布选项,不是 Apache APISIX 开源版能力。

发布前应确认:

  • 产品只包含预期的 Service、主机和版本;
  • 可见性符合公开或已认证受众策略;
  • 认证说明与已部署网关一致;
  • 示例使用非生产占位符,并能在目标沙箱中成功;
  • 限制、错误响应和弃用通知均为最新;
  • 不包含内部名称、机密信息引用和敏感 Schema;
  • 门户版本能够关联到获批契约版本。

把 API 退役作为多系统变更

弃用用于传达意图,退役用于终止受支持的使用。受控退役应完成以下步骤:

  1. 识别客户端和负责人,但不要把相关性字段当成可信身份;
  2. 发布替代方案与截止日期;
  3. 在适用时停止发放新的订阅或凭据;
  4. 监控允许的遗留使用并联系负责人;
  5. 在批准时间删除或拒绝网关路由;
  6. 关闭 DNS、负载均衡器和上游直连暴露;
  7. 删除门户页面或将其标记为归档证据;
  8. 验证旧流量按设计失败,而且保留数据符合策略。

保留决策与最终检查的审计证据。某条路由近期没有流量,并不能证明没有客户端依赖它;必须考虑观测窗口、季节性使用和遥测缺失。

发现与文档检查清单

  • 每个活跃 API 是否都有明确负责人和支持渠道?
  • 契约、网关、流量和目录版本是否分别记录?
  • 清单能否区分公开、合作伙伴、内部和管理类暴露?
  • 外部 OpenAPI 引用是否固定、受限且经过清理?
  • 观测路径是否被当作候选项,而不是自动发布的 API?
  • 高权限网关配置是否脱敏并受到访问控制?
  • 每个漂移项是否指出有缺陷的制品及其负责人?
  • 门户可见性与网关授权是否始终作为独立控制?
  • 弃用是否包含客户端证据、替代方案、截止日期和退役操作?
  • 路由删除后是否检查了绕过暴露?

常见问题

网关能否生成完整的 API 文档?

不能。它可以提供路由和策略证据,但通常缺少完整 Schema、领域语义、示例、错误含义和用户任务。

是否可以安全地自动发布从流量中发现的 API?

不能。流量可能包含无负责人、恶意、错误、私有或已弃用的路径。应先分诊,再将它映射到获批契约与负责人。

是否应该把网关导出作为事实来源?

通常不应该。把经过审查的契约和策略保留为期望状态,把网关导出作为用于核对的观测状态。

后续步骤

将清单连接到 OpenAPI 驱动的网关运维、API 文档编写和治理式 API 交付。

获取方案