Skip to content

API 入门:从零理解"程序之间的对话" ​

🎯 核心问题

什么是 API? 这就像问:餐厅的菜单怎么设计,客人一看就懂?服务员怎么记单,不会出错?API 解决的就是"程序之间如何对话"的问题。你写代码的第一天就在用 API,只是你可能没意识到。


0. 新手常见的三个困惑 ​

困惑一:API 是很高深的东西吗?

很多人一听到 API,就觉得是高级工程师才能理解的概念。其实你早就用过 API 了:

python
len("hello")        # 这就是 Python 提供的 API
open("file.txt")    # 这也是 API
requests.get(url)   # 这还是 API

困惑二:Web API 和普通 API 有什么区别?

类型调用对象通信方式典型场景
函数 API本地代码函数调用len(), open()
操作系统 API操作系统系统调用读写文件、创建进程
Web API远程服务器HTTP 请求调用 AI 模型、获取天气

困惑三:我该用 HTTP 还是 SDK?

python
# HTTP 方式:自己处理所有细节
import requests
response = requests.post(
    "https://api.deepseek.com/v1/chat/completions",
    headers={"Authorization": "Bearer sk-xxx"},
    json={"model": "deepseek-chat", "messages": [...]}
)
result = response.json()["choices"][0]["message"]["content"]

# SDK 方式:管家帮你处理
from openai import OpenAI
client = OpenAI(api_key="sk-xxx")
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[...]
)
result = response.choices[0].message.content

1. API 的本质:插头与插座 ​

API(Application Programming Interface,应用程序编程接口)就是"程序之间对话的约定"。

1.1 用电器来类比 ​

概念电器类比API 对应
接口插座形状函数签名 / URL
输入电流输入函数参数 / 请求体
输出电器工作返回值 / 响应体

1.2 三种 API 形态对比 ​

调用对象本地代码库
通信方式函数调用
延迟纳秒级
典型场景数据处理、文件操作
函数 API 示例
len("hello")           # 返回 5
max([1, 5, 3])         # 返回 5
open("file.txt").read() # 读取文件

1.3 函数 API vs HTTP API 的区别 ​

很多初学者会困惑:函数 API 和 HTTP API 到底有什么区别?看文档时该如何区分?

📚 函数 API vs HTTP API本地调用 vs 网络请求,文档怎么看?
📦函数 API
调用方式直接函数调用
参数传递括号内传参
返回值直接获得结果
错误处理异常/返回值
Python 示例
# 调用内置函数
length = len("hello")      # 返回 5

# 调用库函数
import math
result = math.sqrt(16)     # 返回 4.0

# 调用自定义函数
def add(a, b):
    return a + b
sum = add(3, 5)            # 返回 8
VS
🌐HTTP API
调用方式网络请求
参数传递URL/Body/Header
返回值JSON/XML 响应
错误处理状态码判断
HTTP 请求示例
POST /v1/chat/completions HTTP/1.1
Host: api.deepseek.com
Authorization: Bearer sk-xxx
Content-Type: application/json

{
  "model": "deepseek-chat",
  "messages": [
    {"role": "user", "content": "你好"}
  ]
}
核心要点:函数 API 是"本地办事",HTTP API 是"远程通信"。看文档时,函数关注参数和返回值,HTTP API 关注 Endpoint、认证和请求/响应格式。

1.4 不同类型的 API 文档怎么看 ​

面对不同类型的 API 文档,关注重点各不相同:

📋 不同文档类型怎么看函数文档、REST API 文档、SDK 文档,各有侧重点
文档类型函数文档
适用场景使用标准库/第三方库函数
阅读难度⭐⭐
🔍 看文档时重点关注
函数签名参数类型返回值异常说明示例代码
📝文档示例
### json.loads(s, *, cls=None, object_hook=None...)

将 JSON 字符串解析为 Python 对象

**参数:**
- s (str): 要解析的 JSON 字符串
- cls (JSONDecoder): 自定义解码器类
- object_hook (callable): 可选的转换函数

**返回值:**
- dict | list: 解析后的 Python 对象

**异常:**
- JSONDecodeError: 字符串格式非法

**示例:**
>>> import json
>>> json.loads('{"name": "Alice"}')
{'name': 'Alice'}
💡阅读技巧
  • 先看函数签名,了解需要什么参数
  • 注意参数的类型和是否必填
  • 查看返回值类型,方便后续处理
  • 关注可能抛出的异常,做好错误处理
📊三种文档快速对比
对比项
函数文档
REST API 文档
SDK 文档
核心关注
参数、返回值
Endpoint、请求体
初始化、方法链
代码示例
函数调用
HTTP 请求
对象方法
错误处理
异常/返回值
状态码
异常对象
先看什么
函数签名
Base URL + Auth
Quick Start
阅读建议:函数文档看签名,API 文档看请求格式,SDK 文档看示例。遇到不会的,先找「Quick Start」或「Getting Started」章节。

2. 一次完整的 API 调用 ​

👇 动手试试看:点击下方按钮,观察一次完整的 API 请求-响应流程:

API 请求演示
// 点击下方按钮,模拟不同的 API 请求
> ▋
💻客户端发起请求
等待请求...
HTTP Request→
🖥️服务器处理请求
等待中...
HTTP Response←
📦响应返回结果
等待响应...
💡 点击命令按钮,观察一次完整的 API 请求-响应流程。

2.1 API 调用的四个阶段 ​

阶段发生了什么电器类比
请求客户端向服务器发送请求按下开关
传输请求通过网络传输到服务器电流通过电线
处理服务器处理请求并返回数据电器开始工作
响应客户端接收并处理返回结果灯泡发光

2.2 餐厅类比 ​

餐厅角色API 对应说明
菜单API 文档告诉你有哪些"菜"可以点
服务员HTTP 协议标准化的"对话方式"
后厨服务端按"订单"处理请求
上菜响应把结果返回给"客人"

3. HTTP 方法:你是在"问"还是在"做"? ​

调用 Web API 时,你需要告诉服务器你想做什么。这就是 HTTP 方法的由来。

3.1 用餐厅点餐来理解 ​

场景现实中你会怎么说?对应的 HTTP 方法
你想知道今天有什么菜"服务员,菜单给我看看"GET - 纯"问",不改数据
你想点一份宫保鸡丁"给我来份宫保鸡丁"POST - "做"件事,创建数据
你想换一道菜"把宫保鸡丁改成糖醋里脊"PUT - 替换数据
你想改口味"宫保鸡丁不要放花生"PATCH - 部分修改
你不想要了"算了,那道菜不要了"DELETE - 删除数据
get
获取
查询数据
幂等
post
创建
新增数据
不幂等
put
全量更新
替换资源
幂等
patch
部分更新
修改字段
不幂等
delete
删除
删除资源
幂等
get获取 - 查询数据
从服务器获取资源,不会修改任何数据
餐厅类比:"服务员,菜单给我看看"
GET /api/users           # 获取用户列表
GET /api/users/123       # 获取单个用户
GET /api/products?cat=phone  # 查询手机商品

关于幂等性

幂等性:多次执行结果是否相同?

  • 幂等的操作(GET/PUT/DELETE):点 10 次和点 1 次,结果一样
  • 不幂等的操作(POST):点 10 次,可能创建 10 个订单

解决方案:POST 操作用唯一 ID 校验,避免重复处理。

3.2 HTTP 方法速查表 ​

方法用途幂等性安全性典型场景
GET获取资源是是查询列表、查看详情
POST创建资源否否新增用户、提交订单
PUT全量更新是否替换整个用户资料
PATCH部分更新否否只修改昵称
DELETE删除资源是否删除用户、取消订单

4. HTTP 状态码:服务器在告诉你什么? ​

服务器回复时,会先返回一个状态码,告诉你请求是否成功。

4.1 状态码分类 ​

2xx成功
请求被成功接收、理解并处理
200 OK201 Created204 No Content
3xx重定向
需要进一步操作才能完成请求
301 永久移动304 未修改307 临时重定向
4xx客户端错误
请求包含错误或无法完成
400 参数错误401 未认证403 无权限404 不存在
5xx服务器错误
服务器无法处理有效请求
500 内部错误502 网关错误503 服务不可用
💡记忆技巧:2️⃣ 成功 • 3️⃣ 重定向 • 4️⃣ 客户端错 • 5️⃣ 服务器错

4.2 常见状态码详解 ​

状态码含义典型场景客户端处理
200 OK成功请求正常处理展示数据
201 Created创建成功POST 请求成功创建资源跳转到新资源
400 Bad Request请求格式错误参数缺失或格式不对检查参数
401 Unauthorized未认证没有提供有效的 API Key引导用户登录
403 Forbidden无权限API Key 没有访问该资源的权限提示权限不足
404 Not Found不存在请求的地址或资源不存在检查 URL
429 Too Many Requests请求过多超过了速率限制稍后重试
500 Internal Server Error服务器错误服务端出了问题提示用户稍后重试

👇 动手试试看:点击下方按钮,了解常见状态码的含义:

HTTP 状态码演示
// 点击按钮查看不同状态码的含义
> ▋
✅2xx 成功
200OK请求成功
201Created创建成功
204No Content成功但无返回内容
⚠️4xx 客户端错误
400Bad Request请求格式错误
401Unauthorized未认证
403Forbidden无权限
404Not Found资源不存在
422Unprocessable语义错误
429Too Many请求过多
🔴5xx 服务端错误
500Server Error服务器内部错误
502Bad Gateway网关错误
503Unavailable服务不可用
💡 点击命令按钮,了解常见的 HTTP 状态码。

5. HTTP vs SDK:自己跑腿还是让管家代办? ​

5.1 两种调用方式对比 ​

🏃 HTTP API🤵 SDK
比喻自己跑腿管家代办
优点✓ 所有语言都能用
✓ 完全控制请求细节
✓ 无需额外依赖
✓ 代码简洁易读
✓ 自动处理鉴权
✓ 内置错误重试
缺点✗ 需要处理所有细节
✗ 代码冗长易出错
✗ 需要安装依赖
✗ 可能有版本问题
代码示例requests.post(url, json=..., headers={...})client.chat.completions.create(...)

5.2 如何选择? ​

场景推荐方式原因
快速开发SDK自动处理鉴权、错误、重试
学习原理HTTP理解底层机制
不支持的语言HTTP任何语言都能用
需要定制HTTP灵活控制每个细节

💡 建议

能用 SDK 就用 SDK,把麻烦事留给库,把时间留给自己。


6. 如何阅读 API 文档? ​

API 文档就像说明书和菜单的结合体。你不需要从头读到尾,只需要学会"查字典"。

6.1 文档阅读清单 ​

打开任何一个 API 文档(比如 OpenAI 或 DeepSeek),你只需要找这几样东西:

📖API 文档翻译机
Base URL
https://api.deepseek.com
Endpoint
POST /v1/chat/completions
Headers
Authorization: Bearer sk-xxx
Content-Type: application/json
Body 参数
model必填模型名称
messages必填对话消息
temperature可选0-2,默认1
翻译成代码
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "你好"}]
)
核心思想:看文档找三样:地址(Base URL)、鉴权(Authorization)、参数(Parameters)。
项目说明示例
Base URLAPI 的根地址https://api.deepseek.com
Authentication如何证明身份Authorization: Bearer sk-xxx
Endpoints具体的接口列表/v1/chat/completions
Parameters必填/可选参数model(必填)、temperature(可选)
Response返回数据结构{"choices": [...]}

6.2 阅读文档的步骤 ​

  1. 找到 Base URL - 这是所有请求的前缀
  2. 看懂认证方式 - API Key 放在 Header 还是 Query?
  3. 找到需要的 Endpoint - 你要调用的具体接口
  4. 查看请求参数 - 哪些必填?哪些可选?
  5. 理解返回格式 - 数据是如何组织的?

7. 动手练习:模拟 API 调用 ​

光说不练假把式。这里有个模拟 API,你可以随便填参数、随便改地址,看看会发生什么。

🧪API 练手场随便玩,坏了算我的
点击发送查看结果
快速尝试:

试着触发以下场景:

  • ✅ 成功请求:填入正确的 Endpoint 和 API Key
  • ❌ 401 错误:不填 API Key,看看服务器怎么拒绝你
  • ❌ 404 错误:填一个不存在的地址

8. 小结 ​

核心要点

  1. API 就是传声筒,帮你把话传给另一段代码或远程服务器
  2. 你早就用过 API 了,从 len() 到 open() 都是 API
  3. Web API 是超能力,让你调用千里之外的超级电脑
  4. SDK 是好管家,能用 SDK 就别自己跑腿
  5. 看文档找三样:地址、鉴权、参数

在 AI 编程的时代,你只需要记住这几个核心概念。剩下的细节,IDE 和 AI 助手会帮你处理。


名词速查表 ​

名词全称解释
APIApplication Programming Interface应用程序编程接口,定义了软件之间如何交互
Web API-基于 HTTP 协议的 API,用于网络通信
Endpoint-端点,API 的具体地址
HTTPHyperText Transfer ProtocolWeb API 使用的通信协议
GET-获取资源的方法
POST-提交数据的方法
SDKSoftware Development Kit软件开发工具包,封装了底层 API 调用
URLUniform Resource LocatorAPI 的网络地址
JSONJavaScript Object Notation常用的数据格式
Authentication-验证身份的过程
Status Code-HTTP 响应中的状态码
Request-请求
Response-响应
Header-HTTP 头,包含元信息
Payload-请求或响应的实际数据
Rate Limit-速率限制
Idempotent-幂等,多次执行结果相同
RESTRepresentational State Transfer一种 API 架构风格
RPCRemote Procedure Call远程过程调用
GraphQL-一种查询语言 API
gRPC-Google 开发的高性能 RPC 框架