# API 驱动开发

    # API First 原则

    API First 原则即优先设计和完成 API,随后再安排其他事项,其主要优势如下:

    # 优先业务逻辑

    进行 API 设计前必须清楚梳理业务逻辑,并明确功能边界和数据交互格式。

    微服务架构要求服务单元功能内聚、职责单一,此类要求均可在 API 设计阶段作出清晰界定。高度抽象的 API 有利于刻画功能框架,从而避免过早陷入繁复的设计之中。

    相比功能设计文档,规范的 API 文档显得更为清晰、更便于维护。API 定义的结构化数据格式可直接用于后续的功能实现及场景测试。

    # 提升敏捷协同

    参与项目研发的前后端工程师、测试工程师均可基于 API 开展各自的工作。

    • 前端工程师:使用 API 完成界面呈现和交互。
    • 后端工程师:实现 API 功能并完成自测。
    • 测试工程师:基于 API 完成接口测试场景设计。

    一致的 API 可解偶依赖,有效协同各方工作,从而实现并行开发。

    微服务开发同样提倡 API First 原则,优先完成不同模块的 API 设计,确定功能边界并避免循环依赖,随后开发工程师再完成各自负责模块的功能逻辑实现。

    # API 开发测试

    # API 提供者

    API 提供者的工作流程主要包括:设计 > 发布 > 自测 > 缺陷修复。

    # API 设计

    平台基于 OpenAPI 3.0 标准协议,并通过可视化界面支持 API 编辑,同时实践 RESTful 规范,从而轻松完成 API 设计。

    平台遵循配置即代码的 GitOps 理念,在可视化编辑的同时,API 文档将自动保存至 Git 仓库,便于后续跟踪修改,并支持快速回滚。

    # API 发布并自测

    完成 API 开发后,您可将 API 直接 发布至集市,随后创建 访问管理 并进行 API 测试。

    # API 调用方

    API 调用方的工作流程主要包括:查阅 > 调用 > 联调 > 缺陷修复。

    调用方可进入 DevOps 平台 > API 管理 > API 集市 查看已发布的 API 文档,点击 申请调用 获取客户端的 ClientID 和 ClientSecret,随后完成调用端编码。

    若联调测试过程中 API 调用报错,需注意 API 定义是否发生变化,可通过 Git History 进行排查 。

    # API 自动化测试

    测试工程师通过 API 完成接口测试的流程主要包括:查阅 > 设计接口测试场景 > 执行测试 > 提交缺陷。

    设计测试用例场景时可直接搜索 API 市场,获取接口定义。

    # 运行期管理

    完成开发测试进入生产运行后,建议重新发布一份 API 文档并绑定生产环境的应用实例,随后授权客户端进行访问。

    提示

    后续迭代将持续优化 API 文档与多个运行环境的关联关系。

    # API 版本演进

    # 语义化版本

    平台采用 语义化版本 (opens new window) 机制以实现 API 文档的版本管理。版本号格式形如 major.minor.patch。

    • major 为主版本号,其变化通常表示发生了重大或不向下兼容的变更。
    • minor 为次版本号,其变化通常表示增加了新特性,仍向下兼容。
    • patch 为修订号,其变化通常表示对现有版本作较小的、局部的修正。

    版本化管理的优势在于将 API 文档的增长与应用程序的增长一视同仁,可从 API 角度审视应用程序的功能。版本号用于解释服务更迭间的兼容性和依赖关系,无论提供者抑或调用方,均可根据版本号语义清晰了解服务的变更情况。

    # 代码兼容性

    major.minor.patch 版本中 minor 和 patch 版本提升时,所有的 API 必须保持向下兼容。

    若 major 版本提升,需确保不兼容的 API 调用方已完成适配。建议通过新增 API 实现新功能,保留旧 API 并通知调用方切换至新接口,直至所有调用方均已完成切换后再行下线。

    # API 安全

    • Open API

      通过 API 网关对公网开放,并在网关上对调用者设置 认证通过+授权许可 进行管控。

      推荐使用 ClientID 和 ClientSecret 签名方式,并配置每秒请求次数的调用量限制,以保证安全稳定。

      提示

      您也可以进入DevOps 平台 > API 管理 > 访问管理 完成调用方管理。

    • 域名管控

      后端服务需避免配置域名直接对公网开放。测试 API 可使用内部地址而非公网域名。