RESTful API 与 JSON 基础

前后端分离已是主流开发模式:前端调后端接口最常用的风格是 RESTful API,接口间传输数据最常用的格式是 JSON。搞懂这两样,就打通了 Web 开发"接口联调"这一环。

什么是 REST

REST(表征状态转移)是一种接口设计风格而非协议,核心思想是:把一切业务对象看作资源,用 URL 表示资源,用 HTTP 方法表示对资源的操作,用状态码表示结果。

HTTP 方法语义典型 URL是否幂等
GET查询资源/api/users/1
POST新建资源/api/users
PUT整体更新/api/users/1
PATCH部分更新/api/users/1
DELETE删除资源/api/users/1

设计要点:

  • URL 只放名词、不放动词:用 /api/users,而不是 /api/getUser
  • 资源集合用复数名词,层级用 / 表达,如 /api/users/1/orders
  • 用 HTTP 状态码表达语义:200 成功、201 创建成功、404 资源不存在、500 服务器错误。

JSON 基础

JSON 是一种轻量级数据交换格式,采用键值对结构,人易读、机器易解析,是 REST API 的默认数据格式。

{
  "id": 1,
  "name": "张三",
  "skills": ["Go", "Python"],
  "active": true,
  "address": null
}

JSON 共六种值类型:对象、数组、字符串、数字、布尔值、null。注意三点:键必须用双引号、字符串必须用双引号、不允许注释和尾逗号——手写 JSON 报错九成来自这些细节。

用一个小例子串起来

以"用户管理"为例,用 Flask 写一个最小 REST 服务(可直接运行):

from flask import Flask, jsonify, request

app = Flask(__name__)
users = [{"id": 1, "name": "张三"}]

@app.get("/api/users")                # GET:查询列表
def list_users():
    return jsonify(users)

@app.post("/api/users")               # POST:新建用户
def create_user():
    body = request.get_json()         # 解析请求体里的 JSON
    users.append({"id": 2, "name": body["name"]})
    return jsonify(users[-1]), 201    # 返回 201 表示创建成功

app.run(port=5000)

用 curl 调用验证:

curl http://localhost:5000/api/users
# 输出:[{"id": 1, "name": "张三"}]

curl -X POST http://localhost:5000/api/users \
  -H "Content-Type: application/json" -d '{"name":"李四"}'
# 输出:{"id": 2, "name": "李四"}

设计上易踩的坑与高频问题

  1. POST 与 PUT 怎么区分:PUT 整体替换且幂等,POST 新建、不幂等;连续两次 POST 会创建两个资源。
  2. 为什么 REST 强调无状态:服务器不保存客户端会话,每次请求自带全部信息,方便水平扩展。
  3. 返回结构怎么统一:常用 {"code": 0, "message": "ok", "data": {...}} 包装,前端统一解析。
  4. 版本怎么管理:URL 里带版本号 /api/v1/users,或放在请求头里,避免升级破坏旧客户端。

小结:RESTful 用"名词化 URL + 语义化 HTTP 方法 + 合理状态码"三件套描述接口,JSON 负责承载数据;答接口设计题时先把这三点说清,再谈无状态与统一返回结构,就足够出彩了。

笔记加载中…