假设你走进一家连锁餐厅,无论身处北京还是成都的分店,点同一道招牌菜,端上来的色泽、口味几乎一模一样。这背后的秘密不是某位大厨天赋异禀,而是一本写满主料、辅料、计量、步骤、出餐标准的“标准化菜谱”。供应商照着它备货,前厅照着它推荐,后厨照着它出菜——一本菜谱,把三方的话说到了一起。 在AI软件工程的世界里,这本“菜谱”就是API文档。前端是传菜员,后端是掌勺大厨,测试与运维是供应商,而API文档,就是让大家步调一致的那份契约。今天,我们就从这本菜谱说起,把API文档的价值、结构、规范、自动化、版本与协作实践,一一道来。

岗位关联

掌握API文档实践,是AI工程师从“独自写代码”走向“团队交付产品”的分水岭。它让协作从反复口头确认,升级为一纸契约走天下。

目录
  1. 可视化演示
  2. 契约先行:API文档的协作价值
  3. 结构设计:一份完整的API契约
  4. 编写规范:让文档清晰可信
  5. 自动化生成:让文档与代码同步
  6. 版本管理:让变更有序演进
  7. 协作流程:让团队持续运转
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示API接口契约要素、OpenAPI自动生成流程、版本管理向后兼容策略及设计先行协作流程,步进切换深入理解API文档工程化最佳实践。

本节配有交互动效(进入视口后自动加载,约 3KB)。

接口契约:API文档定义端点参数响应 端点路径+HTTP方法+请求参数+响应格式构成完整契约 API文档是提供方与消费方之间的接口契约 API = Endpoint + Method + Params + Response 清晰的接口契约是协作的基础。

契约先行:API文档的协作价值

一家连锁餐厅的老板发现,无论分店开到哪里,只要每位厨师手里都有一本标准的菜谱,出品的菜就不会跑偏。食材供应商照着菜谱备货,前厅服务员照着菜谱推荐,后厨照着菜谱出菜——菜谱就是这家餐厅的灵魂契约。API文档对软件团队而言,正是这样一份契约。它不只是一份说明文件,而是前后端、测试、运维之间共同遵守的“君子协定”。

在没有API文档的团队里,前端问后端“这个接口返回什么”,后端答“你看代码”,前端看着满屏业务逻辑一脸茫然;联调时才发现字段名对不上、类型不一致、错误码含义靠猜。有了规范的API文档,前后端各自照着同一份约定开发,即使不面对面,也能步调一致。文档写在前、开发放在后,就是“契约先行”。

API文档的协作价值可以用一个公式衡量:协作效率等于文档准确度乘以可达性,再除以沟通成本。文档越准确、越容易被找到,团队的协作效率越高;反之,每次接口变动都靠口头传话、翻聊天记录,沟通成本就会吞噬掉研发产能。准确度是文档与真实实现的一致性,可达性是开发者检索文档的便利程度,沟通成本则是所有隐性确认的耗时。

就像那家连锁餐厅的菜谱,既精确到克量,又贴在每个后厨随手可翻的位置,厨师与服务员之间自然少了大呼小叫,出菜又快又稳。API文档的契约价值,正在于把“人跟人确认”变成“人跟文档确认”。

E=A×RCE = \frac{A \times R}{C}
公式中 E 代表协作效率,A 代表文档准确度,R 代表可达性,C 代表沟通成本。这个公式告诉我们:提高准确度、保证可达性、削减无效沟通,协作自然提速。
  1. A文档准确度:指接口描述与实际代码行为的一致程度。准确度越高,调用方越不需要猜。
    AA
  2. R可达性:指开发者能否在需要时快速找到对应文档,检索越快、入口越统一,可达性越高。
    RR
  3. C沟通成本:指每次接口疑问带来的口头确认、群聊等待、翻源码的耗时总量,放在分母意味着它越小越好。
    CC
  4. E协作效率:准确度与可达性相乘后除以沟通成本,是衡量文档投资回报的方向性指标。
    E=A×RCE = \frac{A \times R}{C}

结构设计:一份完整的API契约

一本好菜谱总有一个固定的目录:食材清单、调料用量、烹饪步骤、注意事项。新人厨师拿到手,就知道去哪里找答案、按什么顺序准备。API文档也需要这样一套“固定目录”,让任何开发者在面对陌生接口时都能按图索骥,快速找到自己关心的信息。

标准化API文档通常包含四大块:请求参数、响应格式、错误码表、鉴权方式。请求参数说明包括接口地址、请求方法、每个参数的名字、类型、是否必填、取值范围;响应格式说明包括状态码、数据结构、每个字段的含义与类型;错误码表把每种异常情况翻译成人话;鉴权方式说明调用者如何证明自己有权访问。这四块组合在一起,才构成一份闭环的契约。

从集合的角度看,API文档 D 就是这四个要素集合的并集。缺了请求参数,调用方不知道发什么;缺了响应格式,调用方不知道拿什么;缺了错误码表,出了问题只能干瞪眼;缺了鉴权方式,接口大门形同虚设。四要素齐全,文档才算“结构完整”。

就像菜谱的食材清单交代品种、调料用量交代克数、步骤交代火候、注意事项交代禁忌,四样齐全,徒弟也能复刻主厨的菜。API文档的结构完整,就是让任何接手的人都能“照单做菜”。

D={Req,Resp,Err,Auth}D = \{Req, Resp, Err, Auth\}
D 代表完整API文档,Req 是请求约定集合,Resp 是响应约定集合,Err 是错误约定集合,Auth 是鉴权约定集合。四者缺一不可。
  1. Req请求约定集合:涵盖接口路径、HTTP方法、参数名、类型、必填性与取值范围,告诉调用方“该发什么”。
    ReqReq
  2. Resp响应约定集合:涵盖状态码、数据结构、字段类型与示例值,告诉调用方“会收到什么”。
    RespResp
  3. Err错误约定集合:用统一的错误码与消息格式解释失败原因,避免排查问题靠猜谜。
    ErrErr
  4. Auth鉴权约定集合:说明令牌如何获取、放在哪个Header、有效期多久,回答“凭什么能调”。
    AuthAuth
  5. D完整API文档:四个集合取并集,缺一块,契约闭环就断裂。
    D={Req,Resp,Err,Auth}D = \{Req, Resp, Err, Auth\}

编写规范:让文档清晰可信

同样是菜谱,有的写着“盐适量”,有的写着“盐3克”。前者让徒弟抓瞎,后者让结果稳定。API文档的质量差距,往往就藏在这些细节里。一份“看着写了”的文档,和一份“写着能用”的文档,中间隔着的就是编写规范。

高质量的API文档强调三个要点:命名一致、示例完整、描述精准。命名一致指参数和字段的命名风格在全文档中统一,比如始终采用 camelCase 或 snake_case,同一个业务概念永远用同一个名字出现;示例完整指每个接口至少有一个真实的请求示例和响应示例,让调用方可以照着改;描述精准指用词不含糊,明确枚举值、默认值与边界条件,而不是丢下一句“酌情处理”。

文档质量可以拆解为准确度乘以完整度,再减去歧义噪声。准确度是信息与真实实现一致的程度;完整度是覆盖所有场景的比率,比如是否包含分页、限流、超时等边界说明;歧义噪声则来自“等”“适当”“若干”这类模糊词,以及过时冗余的段落。噪声越多,文档的可信度越低,最终抵消掉前面所有的加分项。

一份好菜谱从不说“看情况”,而是告诉你“油温六成热”“大火三分钟”。API文档也应在每个可能含糊的地方给出确定的答案,让读文档的人不猜、不等、不返工。

Q=Acc×Cpl−NoiseQ = Acc \times Cpl - Noise
Q 代表文档质量,Acc 是准确度,Cpl 是完整度,Noise 是歧义噪声。这个公式强调:一份准确但不完整的文档是“半成品”,而充满模糊表达的文档则直接减分。
  1. Acc准确度:指每个参数、字段、状态码的描述与真实行为一致,这是文档可信的前提。
    AccAcc
  2. Cpl完整度:指覆盖主流程、边界条件和异常场景的比率。没有示例、没有边界说明,调用方只能靠猜。
    CplCpl
  3. Noise歧义噪声:指模糊用语与重复冗余内容造成的理解损耗,它从总质量中扣除。
    NoiseNoise
  4. Q文档质量:准确度与完整度相乘后扣除噪声,是衡量文档可读可用的综合指标。
    Q=Acc×Cpl−NoiseQ = Acc \times Cpl - Noise

自动化生成:让文档与代码同步

随着分店增多,手写菜谱越来越跟不上新菜品上新的速度。总店决定引入电子菜谱系统:主厨在厨房研发新菜时,按标准化模版录入配方,系统自动生成一页菜谱并同步到所有分店的电子屏上。这就是自动化生成的思路——把人工抄写变成系统同步。

在开发世界,这个“电子菜谱系统”就是 OpenAPI 规范(前身是 Swagger)。后端程序员在代码里写好注解与注释,工具自动解析并导出标准化的API文档。OpenAPI 用 JSON 或 YAML 描述接口的路径、参数、响应、鉴权等信息,配合 Swagger UI、ReDoc 等工具渲染成网页文档;更进一步,还能自动生成各种语言的 SDK 代码和 Mock 服务,让前端在联调前就能用与真实接口一致的桩数据调试,所有人都等着同一个事实来源。

自动化生成的关键指标是标注覆盖率:已经标注的接口数占总接口数的比例。覆盖率越高,依赖人工记忆和手工维护文档的盲区就越小。当覆盖率达到 100%,“改代码同步改文档”就从道德要求变成了系统自动完成的规则。

自动化生成让“改菜谱”与“上新菜”同时发生:主厨一改配方,电子屏上的菜谱自动更新,前厅永远不会拿着旧菜单糊弄客人。这就是工具带来的确定性。

Coverage=AnnotatedTotalCoverage = \frac{Annotated}{Total}
Coverage 代表标注覆盖率,Annotated 是已标注的接口数,Total 是需要文档化的接口总数。覆盖率越高,文档与代码脱节的风险越低。
  1. Annotated已标注接口数:指被文档注释或 OpenAPI 注解覆盖的接口数量,它们能自动进入文档。
    AnnotatedAnnotated
  2. Total总接口数:指全部需要文档化的接口数量,作为分母提醒我们仍存在盲区。
    TotalTotal
  3. Coverage标注覆盖率:已标注接口与总接口的比值,是衡量自动化程度的核心指标。
    Coverage=AnnotatedTotalCoverage = \frac{Annotated}{Total}

版本管理:让变更有序演进

连锁餐厅的菜谱不是一成不变的:季节限定菜要上新,老菜的口味要微调,反响差的菜要下架。如果所有改动都直接涂抹在旧菜谱上,分店经理就会崩溃——到底哪一版才是对的?正确的做法是给菜谱标版本号,让每一次变化都有迹可循。

API文档同样需要版本控制。行业通用做法是语义化版本号,格式为 MAJOR.MINOR.PATCH,即主版本、次版本、修订号。主版本号在发生不向后兼容的变更时加 1,比如删除参数、改变返回结构;次版本号在向后兼容地新增功能时加 1,比如增加新的可选字段;修订号在向后兼容的缺陷修复时加 1,比如修正文档中的类型标注错误。

从 1.3.0 升到 1.4.0,说明新增了功能但老调用方完全不受影响;从 1.4.0 升到 2.0.0,则是在大声宣告“有人要改代码了”。废弃流程也必须渐进:先在文档中明确标注 deprecated,给出迁移时间窗和替代方案,最后才真正下线。多版本共存期内,旧版本文档保持可访问,新版本文档独立发布,让用户有时间过渡。

食客点奶茶,从三分糖改成五分糖是口味微调(MINOR),而把整个店从“奶茶铺”改造成“深夜食堂”就是业态升级(MAJOR)。版本号就是让所有人一眼看出这次改动是“微调”还是“变天”。

Version=MAJOR.MINOR.PATCHVersion = MAJOR.MINOR.PATCH
Version 是语义化版本号,MAJOR 代表不兼容变更,MINOR 代表兼容新增,PATCH 代表缺陷修复。版本号本身就是一份精炼的“变更声明”。
  1. MAJOR主版本号:在不向后兼容的变更发生时加 1,提醒调用方必须调整代码。
    MAJORMAJOR
  2. MINOR次版本号:在向后兼容的功能新增时加 1,存量调用方可以无感升级。
    MINORMINOR
  3. PATCH修订号:在向后兼容的缺陷修复时加 1,通常只影响边界场景。
    PATCHPATCH
  4. Version完整版本号:三个数字用点分隔,组合成一份可读的接口演进说明书。
    Version=MAJOR.MINOR.PATCHVersion = MAJOR.MINOR.PATCH

协作流程:让团队持续运转

菜谱要真正落地,光有一本册子还不够。新菜上市前要靠试菜,店长要审批,后厨要培训,客人反馈要回收——这是一个完整的闭环。API文档的团队协作,也讲究评审机制、责任归属与反馈迭代,否则文档只会成为“写完之后再也没人看”的摆设。

文档评审是一道质量闸门。每次接口设计合并前,后端、前端、测试共同参与 API Review,检查契约是否完整、命名是否一致、示例是否真实、变更是否记录了。评审通过后,代码和文档一起合入主干。每一个模块还要指定文档 Owner,负责维护、答疑与定期更新,避免“人人有责、人人无责”的推诿。

团队协作的另一个关键是知识沉淀与反馈闭环。所有评审意见、接口讨论、排障结论都沉淀在文档评论区或协作文档平台,形成团队记忆;定期复盘线上故障是否源于文档缺失,推动文档改版。协作的顺畅程度可以理解为版本稳定率与反馈响应速率的乘积:评审越严,上线后变动越少;反馈处理越快,团队记忆越新鲜。

就像试菜、审批、培训、回访四个环节合成一条流水线,API文档的评审与反馈机制,让复杂团队像一家成熟餐厅那样稳定运转,每个人都知道自己的位置,也知道下一步该做什么。

Team=Stab×RespTeam = Stab \times Resp
Team 代表团队协作顺畅度,Stab 是版本稳定率,Resp 是反馈响应速率。防错与纠错两条腿同时走路,协作才会越跑越稳。
  1. Stab版本稳定率:指接口合并后发生破坏性变更的频率,评审机制越完善,变动越少。
    StabStab
  2. Resp反馈响应速率:指从提出问题到修改文档的耗时,响应越快,知识损耗越小。
    RespResp
  3. Team协作顺畅度:防错(稳定率)与纠错(响应速率)相乘,二者缺一不可。
    Team=Stab×RespTeam = Stab \times Resp

AI 应用场景

前后端联调提速

阶段:应用开发阶段

解决的问题:传统模式下前端必须等后端接口写完才能开始开发,联调时才发现字段名不一致、返回结构对不上,来回扯皮。利用 OpenAPI 契约文档,前端在接口还没实现时,就能基于标准契约生成 Mock 服务和 TypeScript 类型,提前并行开发。

具体案例:某AI平台团队开发可视化看板,后端负责模型推理服务,前端负责数据展示。后端先用 OpenAPI 定义接口契约,工具自动生成 Mock 服务与类型定义,前端即刻开工;后端实现完成后,前端切换真实地址,一次联调通过。

AI模型服务标准化

阶段:模型部署阶段

解决的问题:AI模型的推理接口输入输出格式五花八门,有的传 JSON,有的传二进制,有的字段命名天差地别,调用方接入成本极高。将模型推理接口用标准 API 文档规范化后,所有下游系统都能快速对接。

具体案例:某团队部署图像识别模型,将输入(图片URL、尺寸参数)、输出(分类标签、置信度列表)和错误码(图片超限、格式不支持)写入 OpenAPI 文档,并自动生成 Python 与 Java 的 SDK。算法团队改模型结构时,只需同步文档与版本号,业务方就能平滑升级。

多团队微服务协作

阶段:系统集成阶段

解决的问题:大型AI平台往往由多个团队各自维护微服务,接口数量庞大,文档散落各处,团队间沟通成本极高。统一文档规范、评审流程与版本管理,能让跨团队集成从“互相问”变成“查文档”。

具体案例:某公司在内部推行统一 API 文档平台,所有团队按相同结构发布文档,接口变更走同一套评审与版本发布流程。新成员入职后,通过阅读文档中心即可了解全平台的服务能力,跨团队协作效率显著提升。

Python 演示

python46 行
"""API 文档目录生成器:从接口定义生成结构化 Markdown 文档片段。"""class APIDocGenerator:    def __init__(self, api_name, version):        self.api_name = api_name        self.version = version        self.sections = []     def add_request(self, method, path, params):        self.sections.append(("请求", method, path, params))     def add_response(self, status, schema):        self.sections.append(("响应", status, schema))     def render_markdown(self):        lines = [            "# " + self.api_name + " API 文档",            "> 版本:" + self.version,            ""        ]        for section in self.sections:            kind = section[0]            if kind == "请求":                _, method, path, params = section                lines.append("## 请求 " + method + " " + path)                for name, typ, desc in params:                    lines.append("- 参数 `" + name + "`:" + typ + " - " + desc)            elif kind == "响应":                _, status, schema = section                lines.append("## 响应 状态码 " + status)                for field, typ, desc in schema:                    lines.append("- 字段 `" + field + "`:" + typ + " - " + desc)        return "\n".join(lines)  if __name__ == "__main__":    doc = APIDocGenerator("用户服务", "1.4.0")    doc.add_request("GET", "/api/v1/users/{id}", [        ("id", "integer", "用户唯一标识"),        ("include", "string", "需要联查的子资源"),    ])    doc.add_response(200, [        ("id", "integer", "用户 ID"),        ("name", "string", "用户名称"),        ("email", "string", "邮箱地址"),    ])    print(doc.render_markdown())
目的:演示如何用极简的 Python 类,按标准结构组装一份 API 文档目录,并渲染为 Markdown。这是“文档结构设计”与“自动化生成”思想的最小原型。
  1. self.sections.append(("请求", method, path, params))将接口的请求信息按统一元组格式存入目录列表,让文档结构可扩展。
  2. for section in self.sections:遍历已登记的接口信息,逐段渲染 Markdown,体现“结构驱动生成”。
  3. kind == "请求"根据段落类型分发渲染逻辑,请求和响应各走各的模板。
  4. lines.append("## 请求 " + method + " " + path)用 Markdown 标题语法输出每个接口块,保证可读性。
  5. if __name__ == "__main__":提供可执行的入口,直接运行即可在终端看到生成的文档片段。
  6. doc.add_response(200, [...])登记响应示例的字段结构,呼应正文“示例完整”的编写规范。

常见误区

误区“API文档是给合作方或外部开发者看的,我们自己团队内部根本不需要,聊两句就知道了。”

正解API文档的第一消费者恰恰是团队自己。前端要看响应结构,后端要确认参数约定,测试要根据错误码设计用例,运维要查鉴权方式。就像连锁餐厅的菜谱首先服务的是自家厨师和服务员,而不是食客。

为何常见:小团队面对面沟通很方便,人数一多、服务一拆,口头信息就会失真,大家却还停留在“反正能问到人”的惯性里。

误区“先把功能做出来,测试通过了再补文档,反正文档晚点写不影响上线。”

正解补写的文档一旦在研发中后期集中编写,极易遗漏变更历史,也没法让前端提前并行开发。“契约先行”强调先定接口后写代码,让前后端各自照契约行动,能省下大量联调返工成本。

为何常见:写文档在短期看不到收益,容易被视为“额外工作”;但当接口一改再改时,大家才会意识到前期没有契约的代价。

误区“文档当然是越厚越好,最好把每个参数的底层实现都写进去,这样才显得专业。”

正解过量的细节会引入歧义噪声,让调用方找不到重点,还会大大增加维护成本。好的文档像好菜谱,只写“盐3克”,不写“盐的产地与晒制工艺”。准确、完整、无噪声,比冗长更重要。

为何常见:人们容易把“信息多”等同于“质量高”,忽略了文档的核心目标是用最少的时间传递最可靠的信息。

误区“后端跑一下 Swagger,导出 OpenAPI JSON,文档工作就算完成了。”

正解自动生成的接口定义只是骨架,还需要补充业务示例、错误码说明、最佳实践和变更日志。自动化解决了“同步”问题,但没有解决“质量”问题。就像电子菜谱有了格式,还得有人把配方写准、写全。

为何常见:工具能导出让人产生“文档已完成”的错觉,忽略了生成物中缺失的业务语义与场景说明。

误区“版本号是后端发布的编号,前端不关心,只要接口能用就行。”

正解语义化版本号就是文档变更的“音量键”:MINOR 版本是轻声告知,MAJOR 版本是大声警报。调用方通过版本号就能评估升级风险,而不必逐字阅读变更日志。

为何常见:在一体化应用时代,前后端一起发布,版本号没有实际约束力。到了微服务时代,各方独立发版,版本号的重要性就凸显出来了。

面试题

Q1. API文档在团队协作中的核心作用是什么?

单选题 · easy

  • A.记录后端所有代码逻辑
  • B.约定接口契约降低沟通成本← 正确答案
  • C.替代单元测试保障质量
  • D.用于统计接口调用次数

答案:B。API文档的核心价值是作为前后端之间的契约,让多方按照同一份约定开发,从而降低沟通成本。它不记录全部代码逻辑,不能替代测试,也不负责统计调用次数。就像菜谱用来对齐厨师与服务员,而不是记录餐厅的财务流水。

Q2. OpenAPI 规范文件通常采用哪种格式?

单选题 · easy

  • A.XML 或纯文本
  • B.JSON 或 YAML← 正确答案
  • C.CSV 或 Excel
  • D.INI 或 Properties

答案:B。OpenAPI 规范使用 JSON 或 YAML 描述接口信息,因为二者层次清晰、可读性好,适合表达嵌套的参数与响应结构。XML 和 INI 虽然也是结构化格式,但并非 OpenAPI 的主流载体。

Q3. “契约先行”实践中,最合理的做法是?

单选题 · easy

  • A.先写代码后补文档
  • B.先定义接口文档再开发← 正确答案
  • C.文档由测试人员撰写
  • D.只在发布前整理文档

答案:B。契约先行强调在开发前先定义接口契约,让前后端并行开发、减少联调摩擦。先写代码后补文档容易导致文档失真;测试人员无法替代研发定义接口;发布前整理则失去了契约对开发过程的指导作用。

Q4. 语义化版本 1.4.0 升级到 1.5.0,表示发生了什么?

单选题 · mid

  • A.修复了缺陷且向后兼容
  • B.新增了功能且向后兼容← 正确答案
  • C.打破了向后兼容的变更
  • D.文档格式进行了重排版

答案:B。按照语义化版本规范,MINOR 位(第二位)增加表示向后兼容的新增功能,调用方无需修改代码即可继续使用。PATCH 位增加才是缺陷修复;MAJOR 位增加才代表不兼容变更。

Q5. 以下哪项不是API文档的标准组成?

单选题 · mid

  • A.请求参数说明
  • B.响应格式示例
  • C.错误码对照表
  • D.数据库表结构← 正确答案

答案:D。API文档的标准组成包括请求参数、响应格式、错误码表和鉴权方式。数据库表结构属于后端内部实现细节,不应出现在对外契约中。把数据库结构写进API文档,就像在菜谱里写农场种植记录,信息越界且维护困难。

Q6. 高质量API文档应包含哪些内容?

多选题 · mid

  • A.完整请求参数与取值范围← 正确答案
  • B.真实可用的响应示例← 正确答案
  • C.常见错误场景说明← 正确答案
  • D.鉴权方式与令牌获取← 正确答案

答案:ABCD。四项全部是高质量API文档的必要组成。参数与范围让调用方知道“发什么”,真实示例让调用方知道“拿到什么”,错误场景说明让排障有据可依,鉴权方式让访问受控。四者合在一起才构成完整契约。

Q7. 以下哪项属于向后兼容的变更?

单选题 · mid

  • A.删除一个已废弃的参数
  • B.重构全部接口返回格式
  • C.在响应中新增可选字段← 正确答案
  • D.拆分接口为多个子接口

答案:C。在响应中新增可选字段不会破坏已有调用方的解析逻辑,属于向后兼容。删除参数、重构返回格式、拆分接口都会导致旧调用方出错,属于不兼容变更,对应 MAJOR 版本号提升。

Q8. API文档自动化生成工具的价值体现在哪些方面?

多选题 · mid

  • A.保证文档与代码同步← 正确答案
  • B.降低手工维护成本← 正确答案
  • C.自动写出业务逻辑
  • D.提供契约先行的输入← 正确答案

答案:ABD。自动化工具解析代码注释生成契约文档,能保证文档与实现同步、减少手工维护成本,同时为契约先行提供基础。但工具只会描述接口形状,不会写出业务逻辑,业务语义仍需人来定义。

Q9. 废弃一个API接口的正确流程是?

单选题 · hard

  • A.直接删除代码立即生效
  • B.新版本中保留并标注废弃← 正确答案
  • C.改名替换但保留原接口
  • D.移入私有仓库不再开放

答案:B。正确做法是在新版本中保留接口、标注 deprecated,给出替代方案和迁移时间窗,让调用方有时间升级。直接删除会造成线上故障;改名替换会让调用方难以察觉;移入私有仓库则违背开放协作原则。

Q10. API文档评审时应重点关注哪些方面?

多选题 · hard

  • A.契约的完整性与一致性← 正确答案
  • B.示例中的数据是否真实← 正确答案
  • C.变更日志与废弃说明← 正确答案
  • D.口头约定的隐性需求

答案:ABC。评审要确保契约完整一致、示例真实可用、变更与废弃记录清晰。口头约定的隐性需求恰恰是评审要消灭的对象——凡是没写进文档的约定,都不应该被视为契约的一部分,否则就会变成“所有人都以为别人知道”的隐患。