项目目标
借助自然语言驱动开发(vibe coding)模式,利用 AI 编程工具构建一个完整的待办事项 API 项目。开发者无需逐行编写代码,仅通过需求描述与迭代修正,即可由 AI 生成可运行的后端接口。本文以 Flask 框架为例,详细展示从需求描述到最终代码生成的完整流程。
最终效果
最终交付的待办事项 API 需满足以下要求:
- 提供四个 RESTful 接口:获取所有待办事项、新增待办事项、更新待办状态、删除待办事项。
- 使用内存存储,无需数据库。
- 每个接口返回标准 JSON 格式,包含状态码和消息。
- 包含基本参数校验(content 非空、待办不存在时返回 404)。
- debug 模式根据环境变量控制,默认关闭。
技术方案
采用 vibe coding(自然语言编程)模式,通过自然语言描述替代传统的手写代码。开发者借助 AI 编程工具(本文以 TRAE 为例)阐述需求,工具自动生成对应代码。开发者主要承担需求定义、问题反馈与最终验收工作,AI 则负责语法层面的编码实现。
环境与依赖
- 操作系统:无限制(Windows / macOS / Linux)
- Python 版本:3.10 及以上(推荐 3.10 或更新版本)
- Flask 版本:2.x 系列
- AI 编程工具:TRAE(基础版免费,支持内置 Doubao-1.5-pro 模型)
- 其他依赖:无需额外第三方库,仅依赖 Python 标准库
os及 Flask 内置功能
项目结构
本项目采用单文件应用结构,目录组织方式如下:
todo-api/
└── app.py
在实际开发中,AI 能够根据需求生成更为复杂的项目骨架。本文仅以单文件场景进行演示。
核心实现
第一步:清晰描述需求
向 AI 表达需求时,应涵盖以下关键要素:
- 技术栈:Flask 框架,Python 3.10+
- 核心功能:获取所有待办、新增待办、更新待办状态、删除待办
- 约束条件:内存存储,无需数据库,返回标准 JSON 格式
- 错误处理:参数校验与异常返回
在 TRAE 的 Work 模式(原 SOLO 模式)中,输入如下需求描述:
“帮我用 Flask 写一个简单的待办事项接口,需要包含获取所有待办、添加待办、更新待办状态和删除待办四个接口,用内存存储不需要数据库,每个接口要返回标准 JSON 格式,包含状态码和消息,需要做基本的参数校验。”
第二步:接收初版代码并检查问题
AI 生成的初始版本代码如下:
from flask import Flask, jsonify, request
app = Flask(__name__)
todos = []
@app.route('/todos', methods=['GET'])
def get_todos():
return jsonify({ 'code': 200, 'data': todos, 'msg': 'success' })
@app.route('/todos', methods=['POST'])
def add_todo():
data = request.get_json()
todo = { 'id': len(todos) + 1, 'content': data['content'], 'done': False }
todos.append(todo)
return jsonify({ 'code': 200, 'data': todo, 'msg': 'success' })
@app.route('/todos/', methods=['PUT'])
def update_todo(todo_id):
for todo in todos:
if todo['id'] == todo_id:
todo['done'] = request.get_json().get('done', todo['done'])
return jsonify({ 'code': 200, 'data': todo, 'msg': 'success' })
# ⚠️ 缺少找不到todo时的返回处理
@app.route('/todos/', methods=['DELETE'])
def delete_todo(todo_id):
for i, todo in enumerate(todos):
if todo['id'] == todo_id:
todos.pop(i)
return jsonify({ 'code': 200, 'msg': 'delete success' })
# ⚠️ 同样缺少找不到todo时的返回处理
if __name__ == '__main__':
app.run(debug=True)
经分析,初版代码存在以下缺陷:
- 更新和删除接口在待办事项不存在时未返回 404 响应。
- 添加接口缺少对
content参数的非空校验,允许空内容添加。 debug=True被硬编码,生产环境应关闭调试模式。
第三步:给出修正指令,迭代生成最终代码
在 TRAE 中输入以下修正指令:
“请帮我修正几个问题:1. 更新和删除接口找不到待办时,返回 404 状态码和对应的错误消息;2. 添加待办时校验 content 参数不能为空,如果为空返回错误;3. 把 debug 模式改成根据环境变量判断,默认关闭。”
AI 根据修正指令生成最终版本代码:
from flask import Flask, jsonify, request
import os
app = Flask(__name__)
todos = []
@app.route('/todos', methods=['GET'])
def get_todos():
return jsonify({ 'code': 200, 'data': todos, 'msg': 'success' })
@app.route('/todos', methods=['POST'])
def add_todo():
data = request.get_json()
if not data or 'content' not in data or not data['content'].strip():
return jsonify({ 'code': 400, 'msg': 'content不能为空' }), 400
todo = { 'id': len(todos) + 1, 'content': data['content'].strip(), 'done': False }
todos.append(todo)
return jsonify({ 'code': 200, 'data': todo, 'msg': 'success' })
@app.route('/todos/', methods=['PUT'])
def update_todo(todo_id):
data = request.get_json()
for todo in todos:
if todo['id'] == todo_id:
todo['done'] = data.get('done', todo['done'])
return jsonify({ 'code': 200, 'data': todo, 'msg': 'success' })
return jsonify({ 'code': 404, 'msg': '待办事项不存在' }), 404
@app.route('/todos/', methods=['DELETE'])
def delete_todo(todo_id):
for i, todo in enumerate(todos):
if todo['id'] == todo_id:
todos.pop(i)
return jsonify({ 'code': 200, 'msg': '删除成功' })
return jsonify({ 'code': 404, 'msg': '待办事项不存在' }), 404
if __name__ == '__main__':
debug_mode = os.getenv('FLASK_DEBUG', 'False').lower() == 'true'
app.run(debug=debug_mode)
配置说明
- 环境变量
FLASK_DEBUG:当设置为true时启用 Flask 调试模式,默认值为false。 - 所有接口默认监听在
127.0.0.1:5000(Flask 默认配置)。
运行方法
- 安装 Flask 框架:
pip install flask(建议使用 2.x 版本)。 - 将最终代码另存为
app.py。 - 在终端中执行命令:
python app.py。 - 服务启动后,可通过 curl 或 Postman 等工具测试接口。
结果验证
以下使用 curl 命令演示接口功能验证:
- 获取所有待办事项:
curl https://127.0.0.1:5000/todos,预期返回空列表。 - 添加新待办:
curl -X POST -H "Content-Type: application/json" -d '{"content":"学习vibe coding"}' https://127.0.0.1:5000/todos,返回新增的待办对象。 - 更新待办状态:
curl -X PUT -H "Content-Type: application/json" -d '{"done":true}' https://127.0.0.1:5000/todos/1,返回更新后的待办对象。 - 删除待办:
curl -X DELETE https://127.0.0.1:5000/todos/1,返回删除成功消息。 - 参数校验测试:
curl -X POST -H "Content-Type: application/json" -d '{}' https://127.0.0.1:5000/todos,应返回 400 错误。 - 待办不存在测试:
curl -X PUT https://127.0.0.1:5000/todos/999,应返回 404 错误。
常见问题
Q1: 为什么我的 AI 生成的代码和示例不一样?
不同 AI 工具及模型对相同需求的理解可能存在差异。为获得更一致的结果,建议将需求描述得更加具体,涵盖技术栈版本、代码风格偏好等细节。若生成结果不理想,可逐步给出更精确的修正指令。
Q2: 如何让 AI 生成更复杂的项目结构?
采用 TRAE 的 Builder 模式,仅需描述项目类型、技术栈及核心功能,AI 即可自动生成包含目录结构、依赖配置和入口代码的完整项目骨架。
Q3: 基础版免费是否够用?
TRAE 基础版免费提供内置的 Doubao-1.5-pro 等主流大模型,足以满足日常开发中的 vibe coding 需求。Pro 版则提供更多高级模型调用次数,适合高频使用的开发者。
后续优化
- 添加持久化存储支持(如 SQLite 或文件存储)。
- 增加身份认证与权限控制机制。
- 使用 Flask 蓝图重构代码,实现模块化扩展。
- 编写单元测试,保障接口稳定性。
完成上述步骤后,可对照以下清单进行验证:
- AI 成功生成了完整的待办事项 API 代码。
- 代码包含四个接口,实现基本 CRUD 功能。
- 代码包含参数校验与错误处理逻辑。
- 代码能够正常运行,并通过 curl 测试。
- 整个开发过程中,开发者仅编写了需求描述与修正指令,未手动编写一行代码。
