模块 5.1:究竟什么是 API?

模块 5.1:究竟什么是 API?

Table of Contents

“API”这个词,在今天几乎无处不在——AI、Agent、大模型、天气、地图……张口就来。它听起来很神秘。这一节我们不解释、不打比方,直接拿两个真的 API 来,你亲手调用一下,就明白了。


从一个朋友的问题说起

不止有一个人问过我,究竟什么是 API。

比如说我的一个朋友是在医院工作的,有天问我说,他听说 Claude 特别厉害,想要用一下,但是找了个渠道说是提供 API,他就问我这个 API 是什么意思。

从这一节开始,我们进入系列课程的后端部分,就从 API 讲起。这一节我尽量把 API 讲明白,也带你亲手试一次,感受它到底是什么。

理解什么是 API 特别重要。因为无论是想要做 web 开发、手机 app 开发,或者就是想要认真理解 AI 时代这些新东西,几乎绕不开它——现在有各种开放的 API,也有许多人自己会开发一些 API。有一些 API 能够查天气、有一些 API 能获得大模型的回复、有一些 API 能帮我们做一些计算,它可以说是无处不在。这个概念非常值得我们了解。

而且,我们的零到全栈系列课程也正好走到这儿了。你还记得吗,文字实验室那一页,点“开始分析”是没反应的,拼音和情感分数都是写死的假数据。要让它真的能算,就得给网站补上一个“后端”;而前端和后端之间怎么对话,靠的也是 API。

有一些人讲 API 的时候,会做一些比喻,比如说把 API 比喻成餐厅的后厨之类的,我觉得这样比喻有时候适得其反,反而可能让人更迷糊。

想要理解什么是 API,最快的方式,在我看来就是亲自找一个 API,调用一下。调用完之后,我相信你自己就可以知道它是什么。如果你还可以自己做一个 API,做完之后那就完全通透了。

我觉得学习任何概念类的东西,都是这样,有一些东西,如果没有用过,那么没办法解释,或者说很难解释。但是你如果用过一两次,那么就不需要解释。

那我们就先找一个 API 用一下。


第一个:查一下你自己的公网 IP

我们先调用一个零门槛的——不用注册、不用花钱、不用申请任何东西。

看一个网站 https://ipify.org,这个是一个免费开放的网站服务。它只干一件事:它可以告诉你,你现在的公网 IP 地址是多少。(公网 IP 是什么,我们在模块 2 讲过——它就是你在互联网上的“地址”。)你在它的主页上看到的那个 IP,就是你现在的 IP 地址。

但是除了这个网页之外,它还提供 API 服务。我们可以尝试在终端里面调用一下它提供的 API。

首先介绍一个新的终端命令:curl。它是一个在终端里发网络请求的小工具——平时我们可以用浏览器访问网址,但其实用终端也可以访问一个网址,curl 就是在命令行里访问一个网址的时候用的,它会把服务器原样返回的内容直接打印出来,特别适合用来试 API。(macOS 和大多数 Linux 都自带 curl,直接用即可。)

https://ipify.org 的官网首页,也提供了这个 API 的访问方式。

打开终端,把下面这行粘进去,回车:

curl 'https://api.ipify.org?format=json'

网址用引号括起来了。也可以不用引号,但是因为这个网址里头有 ? 这样的符号,终端可能会误解,加上引号最稳妥——告诉终端“这一整串都是网址”。

按下回车之后,很快终端里就回来一小段 JSON:

{ "ip": "114.86.123.45" }

就这么一句。 你没打开任何网站,就问到了自己此刻的公网 IP——就是 ip 那个字段(你看到的会是你自己的 IP)。整个响应就一个字段,干干净净。

这个请求特别简单,简单到你甚至可以直接把那串网址粘进浏览器地址栏,回车,就能看到同样的一段数据。(这也顺带说明一件事:你平时用浏览器打开网址,本质上也是在向服务器“发请求、拿响应”。)

我们刚才做的这件事,就叫“调用 ipify 的 API”。


第二个:调用 DeepSeek 的 API

再调用一个不一样的。这次我们不是“查一份数据”,而是调用 DeepSeek 的大模型,让它回我们一句话。

这个稍微有点门槛,因为对方得知道“是谁在调”(一来算用量,二来防止被乱用),所以要先拿一把“身份钥匙”,也就是 API Key

  1. 注册 / 登录 DeepSeek 开放平台:https://platform.deepseek.com/
  2. 找到 API keys 页面,点击创建 API keys,起一个名字,就可以创建一个 API key 了,得到一串以 sk- 开头的字符串,复制存好(只完整显示这一次)。
  3. DeepSeek 的 API 按用量计费,需要充一点点余额——别担心,我们就调用几次,一次花不了几分钱。

完整、最新的说明以官方文档为准:https://api-docs.deepseek.com/zh-cn/照着别人的文档,用上别人的能力——这本身就是这一节想让你体会的事。如果你此刻实在不想充值,也可以先跟着往下读、把道理看懂;但我强烈建议你亲手调用一次,那种“我居然直接用上了大模型”的感觉,非常值得。

拿到 key 后,看“接口文档”:

DeepSeek 开放平台的接口文档,直接给出了用 curl 调用对话 API 的示例

进入接口文档,可以看到 DeepSeek 提供了使用 curl 调用对话 API 的示例。

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
  -d '{
        "model": "deepseek-v4-pro",
        "messages": [
          {"role": "system", "content": "You are a helpful assistant."},
          {"role": "user", "content": "Hello!"}
        ],
        "thinking": {"type": "enabled"},
        "reasoning_effort": "high",
        "stream": false
      }'

把这个示例里面的 ${DEEPSEEK_API_KEY} 换成刚刚复制的以 sk- 开头的那段 API key。

至于其他部分,我建议把下面这行里面的 Hello! 改为一句其他的 prompt,比如说改为 你好,请用一句话介绍你自己

改之前:

{"role": "user", "content": "Hello!"}

改之后:

{"role": "user", "content": "你好,请用一句话介绍你自己"}

然后,把改完之后示例粘贴到终端,按回车。

稍等一下,回来的数据里(删掉次要字段后)大概是:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "你好!我是 DeepSeek,一个由深度求索打造的 AI 助手,很高兴为你服务。"
      }
    }
  ]
}

如果看到类似这样的回应,那么就成功了。 我们没打开任何网页,就在自己的终端里,让 DeepSeek 的大模型回了我们一句话,答案就藏在 choices → message → content 里。这,就是“调用 DeepSeek 的 API”。


API 是设计给计算机程序用的

如果不用 API,我们其实也可以直接通过访问 ipify.org 来查询我们的 IP 地址,还可以使用 DeepSeek 的网页服务或者手机 APP 来使用 DeepSeek 大语言模型。

但是如果是我们有一个计算机程序想要查看我们当前的 IP 地址,或者我们有一个计算机程序想要使用 DeepSeek 的大语言模型,那么网页的方式就行不通了——程序总不能每次都去打开一个浏览器。

所以,对于程序调用来说,最友好的方式就是通过 API 这样的方式来使用这些服务。API 的设计本身就是为计算机程序服务的。

这种 “把自己的能力,持续地通过一个固定的入口对外提供出去,让别的程序来调用”的做法——是整个软件世界通行的做法。 这个对外的入口,就是 API,它的英文全称是 Application Programming Interface(应用程序编程接口)。


API 的格式标准

我们把刚才这两次调用 API 并获得结果的过程放在一起看。

这两个 API 功能不同,但调用它们的方式,几乎一模一样

  1. 一个 URL 地址发起请求(https://api.ipify.org/...https://api.deepseek.com/...);
  2. 发请求时按照对方的要求带上该带的信息(如果没有要求可以不带);
  3. 对方在它自己那边处理(我们看不见、也不用管);
  4. 它回给我们一段数据(一般是 JSON)。

这就是 API 的形态。

在使用它的时候,只要按它规定的方式来请求,就能用上它的能力,完全不需要知道它内部是怎么实现的。这就是 API 的意义:让能力可以被别人“对接”过去用。

不过,上面的两个案例中,请求调用 API 的时候,分别用了两种请求方式:

  • 查 IP 那次是取数据(叫 GET)
  • DeepSeek 那次需要提交内容给 API(叫 POST)

GET 和 POST 是 API 最常用的两种请求方式,但其实 API 约定的标准不仅支持这两种,还有一些其他的,比如说 PUT、DELETE 等,我们后续遇到的时候再介绍。

当 API 有了格式标准之后,我们就可以不用去在意具体程序是使用什么计算机语言来实现了。只要按照这个规范来请求、按照这个规范来提供响应,那么无论调用的一方还是提供服务的一方,都可以使用任意语言或框架来实现。

所以我们如果使用 DeepSeek 的 API,我们并不需要关心 DeepSeek 是用 Python 做的还是用 C 语言做的,当然 DeepSeek 也不关心我们是用终端 curl 发起的请求,还是用 Python 发起的请求。


为什么 AI 时代,到处都是 API

理解了这一点,我们就能解除 AI Agent 的“神秘感”。

  • 我们平时用的各种 AI 产品,很多本质上就是在调大模型的 API——把我们的话包装一下发过去,把答案拿回来,再包装成好看的界面给你;
  • 而那些看起来无所不能的 AI Agent,它的本事其实来自一件件“工具”。这些工具里,凡是要联网去用别的服务的——查天气、查快递、搜网页、往群里发消息、再喊另一个大模型帮忙……基本都是在调 API;另一些则是直接在你电脑上跑命令、读写文件(这类严格说不算网络 API,但骨子里是一回事:都是“照着一个固定的接口,去调用别人已经做好的能力”)。

换句话说:

AI 工具之所以看起来无所不能,就是因为它在不停地调用各种现成的能力——其中很大一部分,就是 API

所以你理解了 API,就等于揭开了这些工具神秘面纱的一大半。


回到我们的网站:前端调后端,也是调 API

我们自己的项目,马上要用到一模一样的逻辑。

到现在为止,我们的网站只有前端——用户在浏览器里看到、点到的那些页面。前端很擅长展示和交互

但文字实验室那个“根据你输入的文字,算出情感分数和拼音”,前端干不了,需要一个专门负责计算和处理的程序来做。这个程序,就是后端

那前端怎么把“用户输入的文字”交给后端、又怎么把“算出的分数”拿回来?

答案就是:我们给自己的网站,也做一个 API——就像 DeepSeek 那个 /chat/completions 一样,只不过这个 API 是我们自己写的、专门算拼音和情感分数的。到时候前端会向我们自己写的这个 API 发一个请求(带上用户输入的文字),后端算完回一段 JSON,JSON 里面既可以包含拼音,也可以包含情感分数。

你看,和你刚才调 DeepSeek,是同一回事。 这就是这门课接下来几节要做的:给网站补上一个后端,并写出我们自己的 API。


那“后端”到底是个什么东西

既然反复提到后端,我们也有必要给这个词做一下解释:

  • 前端:跑在用户的浏览器里,负责看得见的展示和交互。
  • 后端:是一个一直运行、守在服务器上、等着接收请求的程序,负责看不见的计算、处理,以及把数据存下来。

刚才 ipify 和 DeepSeek 那两台“一直守着、等你发请求”的程序,就是它们的后端;我们的请求发过去,它们接住、处理、回你。我们接下来要为自己的网站做的,就是这样一个(但相比之下要小得多的)后端。API,就是前端用来调用后端的那个入口。


后端可以用很多种语言写

“做一个能对外提供 API 的后端”,这件事用什么编程语言都能做:JavaScript(Node)、Python、Go、Java、PHP、Ruby、C#……都可以。ipify、DeepSeek 的后端各自用什么语言写的,我们不知道,也不影响我们调用它们的 API——因为API 这个入口,和它内部用什么语言实现,是两回事。

这门课,我们选 Python 来写后端。原因有两个:一是它的生态特别成熟,尤其在算法、数据、AI 这些方向——我们文字实验室要算的“拼音”和“情感分数”,正好能借上这个力;二是它的语法对初学者比较友好

但值得知道、理解和记住的一件事是:

Python 只是开发 API 的其中一个选择。API 这个概念,和用什么语言无关。


这一节你应该带走什么

这节课没写一行程序,但你亲手调通了两个真正的 API。请带走这几点:

  • API,就是一个程序对外公开的“入口”:按它规定的方式发请求,就能用上它的能力,不必知道它内部怎么实现。
  • 一次 API 调用 = 请求 →(对方处理)→ 响应,回给你的通常是一段 JSON。
  • 你调用了两个不同的服务,方式却一模一样——“通过 API 对外提供能力”,是软件世界的通行做法。
  • AI 时代到处都是 API;你调用 DeepSeek 做的事,正是那些 AI 应用天天在做的事——它们不神秘。
  • 我们的网站接下来要补上一个后端,前端通过我们自己写的 API 去调用它。
  • 后端可以用很多种语言写,我们选 Python,但概念与语言无关。

下一节,我们就把 Python 装到你的电脑上,跑起你的第一个 Python 程序,为亲手写出我们自己的 API 做好准备。


← 上一节:模块 4.6 把前端项目发布到公网 | 下一节:模块 5.2 Python 的安装和环境设置 →