1. API 基础概念与历史归纳总结

如果你问我,什么是学习 API 设计的第一道坎?
我的答案是:先把「API 到底是什么」这件事彻底搞清楚。
别笑,做了这么多年技术,我发现很多人挂在嘴上的 API,其实理解是模糊的。

我个人习惯把 API 看作「两个系统之间的合同」。
你提供什么输入,我承诺什么输出。
双方都按合同办事,谁也别耍赖。

一句话记住 API: API 不是代码,是一个约定。定义好这个约定,两边就能独立演进。

1.1 概念拆解:从生活类比到技术真相

先举个生活例子。

你去餐厅吃饭。
菜单就是 API 文档。
你点菜(请求),后厨做菜(实现),服务员把菜端给你(响应)。
你不需要知道后厨怎么炒菜,后厨也不需要认识你。
这就是解耦。

回到技术世界,API 全称 Application Programming Interface。
说白了,就是应用程序对外暴露的一组「可调用的能力」。
它屏蔽了内部细节,只告诉调用方:你传什么参数,得到什么结果。

我记得有一次帮团队重构一个老系统。
业务方说:「我们想把订单服务拆出来,但所有调用方都直接连数据库了。」
这就是没有 API 层的结果——耦合到骨头里。
后来我们硬着头皮加了一层 RESTful 接口,花了三个月才割完肉。

1.2 历史发展:从 RPC 到 GraphQL

API 不是凭空冒出来的。
它走了很长一段路。

年代 风格 核心特点 痛点
1990s XML-RPC / SOAP 远程调用,强类型,WSDL 描述 过于厚重,解析慢,学习成本高
2000s REST 资源导向,HTTP 语义,轻量 JSON 无状态约束,复杂查询困难
2015+ GraphQL 按需查询,单一端点,强类型 Schema 缓存难,N+1 问题,服务端复杂度上移

你想想看,为什么 REST 能打败 SOAP?
因为 SOAP 协议里塞了太多无关信息。
一个简单的问候请求,SOAP 要包三层信封。
而 REST 直接用 HTTP 动词 + URI,干净利落。

一点个人经验: 我参与过一个金融项目,用了 SOAP 做支付接口。每次联调都要对着几十页 WSDL 文档核对命名空间,一个字母错就连不上。后来换成 REST,开发效率提升了至少 30%。不是说 SOAP 一无是处,但在互联网场景下,它太重了。

1.3 API 的核心要素

不管什么风格的 API,下面这些东西是跑不掉的。

  • 端点(Endpoint):URL 路径,例如 /users/123
  • 方法(Method):GET / POST / PUT / DELETE / PATCH
  • 请求头(Headers):认证、内容类型、缓存控制
  • 请求体(Body):JSON 或表单数据
  • 响应状态码(Status Code):2xx 成功,4xx 客户端错误,5xx 服务端错误
  • 版本控制(Versioning):/v1/users 或 Accept: application/vnd.example.v2+json

嗯,这里要注意一点。
很多新手会把状态码当摆设,永远返回 200。
我曾经在一个项目里接手过「全员 200」的 API。
业务异常靠响应体里的 code 字段区分。
结果客户端判断逻辑到处都是 if-else,调试起来像在猜谜。

避坑指南: 我曾经认为「状态码够用就行」,后来被线上事故教育了。正确使用 HTTP 状态码,能让调用方在不用解析 body 的情况下就判断成败。该 404 就 404,该 500 就 500,别藏着掖着。

1.4 解耦思想:API 设计的灵魂

有了 API 概念,下一步就是理解「为什么需要 API」。
答案就两个字:解耦。

解耦意味着服务可以独立部署、独立升级、独立扩展。
但解耦不是免费的。
你需要在 API 设计阶段就定好边界。

我一般这样判断解耦是否到位:
如果修改一个服务的内部逻辑,不需要通知其他团队修改调用代码,那就算解耦了。
否则,你的 API 本质上只是一层「漂亮的外壳」。

为什么这件事容易搞砸?
因为业务永远是贪婪的。
今天要加个字段,明天要改个行为。
如果 API 设计时没有预留扩展空间,后面就只能打补丁。
补丁多了,接口就变得像牛皮癣。

核心原则: 好的 API 设计,是让「变」不影响「不变」。把易变的部分封装在接口内部,对外暴露稳定契约。

1.5 一张图读懂本章知识体系

API 基础概念与解耦核心关系 客户端 API 层 服务A(订单) 服务B(支付) 关键概念: 端点 / 方法 / 请求头 / 请求体 / 状态码 / 版本控制 设计目标:服务间低耦合、高内聚、独立演进 SOAP → REST REST + 版本 GraphQL / gRPC API 设计风格演进:从厚重协议到轻量灵活,核心目标始终是降低耦合

1.6 小结

这一章我们走完了从概念到历史的快车道。
你理解了 API 到底是什么,也知道它经历了哪些阶段。
更重要的是,你明白了「解耦」才是 API 设计的终极目标。

不要小看这些基础知识。
我接手的许多混乱项目,根源就是团队在「什么是 API」上没对齐。
有人把 API 当数据库视图,有人把 API 当远程函数调用器。
只有大家对契约性质达成共识,后面才能谈设计模式、解耦策略。