构建 REST 端点
返回 JSON 响应
构建 REST 端点 是 CoddyKit 上的免费 Python Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
什么是 REST API?
REST API 通过 HTTP 使用标准动词公开资源。它不返回 HTML 页面,而是通常以 JSON 形式返回数据,供其他程序使用。
from flask import Flask, jsonify
app = Flask(__name__)
# REST endpoints return data, not pages
print('REST APIs speak JSON over HTTP')返回 JSON
jsonify() 会将 Python 字典或列表转换为 JSON 响应,并设置正确的内容类型。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/status')
def status():
return jsonify({'status': 'ok'})
print('jsonify builds a JSON response')字典自动转换
现代 Flask 也会自动将返回的字典转换为 JSON,因此通常可以省略 jsonify()。
from flask import Flask
app = Flask(__name__)
@app.route('/api/ping')
def ping():
return {'message': 'pong'}
print('Returning a dict yields JSON')返回列表
要返回一个集合,请将列表传给 jsonify()。每个项目通常是表示一个资源的字典。
from flask import Flask, jsonify
app = Flask(__name__)
books = [{'id': 1, 'title': 'A'}, {'id': 2, 'title': 'B'}]
@app.route('/api/books')
def list_books():
return jsonify(books)
print('Return a list of resources')使用 GET 获取单个资源
使用动态 URL 部分按 ID 获取单个项目。如果项目不存在,则返回 404。
from flask import Flask, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>')
def get_book(bid):
book = books.get(bid)
if book is None:
return jsonify({'error': 'not found'}), 404
return jsonify(book)
print('GET /api/books/1')使用 POST 创建
POST 请求用于创建资源。请读取 JSON 正文,构建新项目,并以状态 201 Created 返回该项目。
from flask import Flask, request, jsonify
app = Flask(__name__)
books = []
@app.route('/api/books', methods=['POST'])
def create_book():
data = request.get_json()
book = {'id': len(books) + 1, 'title': data['title']}
books.append(book)
return jsonify(book), 201
print('POST creates and returns 201')使用 PUT 更新
PUT 会替换或更新由其 ID 标识的现有资源。
from flask import Flask, request, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>', methods=['PUT'])
def update_book(bid):
if bid not in books:
return jsonify({'error': 'not found'}), 404
books[bid]['title'] = request.get_json()['title']
return jsonify(books[bid])
print('PUT updates a resource')使用 DELETE 删除
DELETE 会删除资源。成功时返回状态 204 No Content 是一种常见做法。
from flask import Flask, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>', methods=['DELETE'])
def delete_book(bid):
if bid in books:
del books[bid]
return '', 204
return jsonify({'error': 'not found'}), 404
print('DELETE removes a resource')状态码很重要
REST 依赖 HTTP 状态码:200 OK、201 已创建、204 无内容、400 错误请求、404 未找到。
# 200 success
# 201 created
# 204 no content
# 400 bad request
# 404 not found
print('Use the right status code')验证正文
创建资源前,请检查必填字段是否存在。正文无效时,请返回 400 和错误消息。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/books', methods=['POST'])
def create_book():
data = request.get_json(silent=True) or {}
if 'title' not in data:
return jsonify({'error': 'title required'}), 400
return jsonify(data), 201
print('Validate JSON before using it')一致的响应
优秀的 API 会返回可预测的结构,通常会始终以相同方式包装数据和错误,让客户端能够依赖这种格式。
from flask import jsonify
# Success: {'data': {...}}
# Error: {'error': 'message'}
# Keep the shape consistent across endpoints
print('Predictable shapes help clients')快速检查
测试您对 REST 的理解。
回顾
您构建了一个 JSON REST 端点。
jsonify()(或直接返回字典)会生成 JSON 响应- 映射 HTTP 动词:GET 读取,POST 创建,PUT 更新,DELETE 删除
- 返回有意义的状态码,例如 201、204、400、404
- 验证请求正文,并保持响应格式一致
常见问题解答
「构建 REST 端点」课时是免费的吗?
是的 — 「构建 REST 端点」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「构建 REST 端点」这节课中我会学到什么?
返回 JSON 响应 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「构建 REST 端点」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 路由与视图
- 使用 Jinja2 创建模板
- 表单与请求数据
- 构建 REST 端点