0Pricing
Python Academy · 课时

构建 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 路由与视图
  2. 使用 Jinja2 创建模板
  3. 表单与请求数据
  4. 构建 REST 端点
← 返回 Python Academy