正在学习
14.3 后端和API提示 (1)
14.3 后端与 API 提示(1)
后端和 API 开发是 Claude Code 最擅长的应用之一。与专注于样板代码的传统代码生成器不同,Claude 能够理解意图、逻辑流程和架构设计。它可以生成完整的后端模块、RESTful 端点和中间件管道,同时保持业务逻辑的清晰和可维护性。
本节重点介绍如何编写有效的后端提示——能够生成可运行的 API 服务器、处理数据验证、集成数据库并管理错误处理的提示。无论你使用的是 FastAPI、Express.js、Flask 还是 Django,目标都是展示 Claude 如何通过结构良好、内容丰富的请求来协助构建生产级的后端系统。
概念发展
后端提示与前端提示在一个关键方面有所不同:它们在结构和功能上要求精确,而非美观。当你能提供以下信息时,Claude 的表现最佳:
- 框架和编程语言(例如"Python + FastAPI")
- API 的用途(例如"用户认证"或"任务管理")
- 各项要求,如身份验证、验证或数据库连接
- 预期输出的格式——单个模块、多个路由或整个服务
- 环境约束——是否应使用异步函数、遵循 REST 原则或与 CI/CD 工具集成
通过明确定义这些要素,你可以引导 Claude 生成结构化、可测试且可部署的后端系统,而非通用的代码片段。
动手示例 1:FastAPI CRUD 应用
提示:
你是一名高级 Python 后端工程师。
构建一个用于管理任务的 FastAPI 应用程序,包含以下端点:
任务的创建、读取、更新和删除
使用 Pydantic 验证请求体
包含针对缺失任务的异常处理
返回完整可运行的 Python 文件。
Claude 输出(示例):
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Task(BaseModel):
id: int
title: str
completed: bool = False
tasks: List[Task] = []
@app.post("/tasks", response_model=Task)
def create_task(task: Task):
tasks.append(task)
return task
@app.get("/tasks", response_model=List[Task])
def get_tasks():
return tasks
@app.get("/tasks/{task_id}", response_model=Task)
def get_task(task_id: int):
for task in tasks:
if task.id == task_id:
return task
raise HTTPException(status_code=404, detail="Task not found")
@app.put("/tasks/{task_id}", response_model=Task)
def update_task(task_id: int, updated_task: Task):
for i, task in enumerate(tasks):
if task.id == task_id:
tasks[i] = updated_task
return updated_task
raise HTTPException(status_code=404, detail="Task not found")
@app.delete("/tasks/{task_id}")
def delete_task(task_id: int):
for i, task in enumerate(tasks):
if task.id == task_id:
tasks.pop(i)
return {"detail": "Task deleted"}
raise HTTPException(status_code=404, detail="Task not found")
为什么有效:该提示明确指定了框架、数据验证和错误处理,使 Claude 能够生成一个完整且可用的 FastAPI 应用程序——没有不完整的占位符,也没有缺失的导入。结果可直接使用 uvicorn main:app --reload 运行。
动手示例 2:带中间件的 Node.js Express API
提示:
创建一个用于管理用户认证的 Node.js Express API。
包含:
注册和登录端点
使用 bcrypt 进行密码哈希
使用 JWT 生成令牌
用于保护私有路由的中间件
返回一个完整可运行的文件。
Claude 输出(示例):
import express from "express";
import bcrypt from "bcryptjs";
import jwt from "jsonwebtoken";
const app = express();
app.use(express.json());
const users = [];
const SECRET = "mysecretkey";
app.post("/register", async (req, res) => {
const { username, password } = req.body;
const hashed = await bcrypt.hash(password, 10);
users.push({ username, password: hashed });
res.status(201).json({ message: "User registered successfully" });
});
app.post("/login", async (req, res) => {
const { username, password } = req.body;
const user = users.find((u) => u.username === username);
if (!user) return res.status(404).json({ message: "User not found" });
const valid = await bcrypt.compare(password, user.password);
if (!valid) return res.status(401).json({ message: "Invalid credentials" });
const token = jwt.sign({ username }, SECRET, { expiresIn: "1h" });
res.json({ token });
});
function auth(req, res, next) {
const authHeader = req.headers.authorization;
if (!authHeader) return res.status(401).json({ message: "Missing token" });
try {
const decoded = jwt.verify(authHeader.split(" ")[1], SECRET);
req.user = decoded;
next();
} catch {
res.status(401).json({ message: "Invalid token" });
}
}
app.get("/profile", auth, (req, res) => {
res.json({ message: `Welcome ${req.user.username}!` });
});
app.listen(4000, () => console.log("Server running on port 4000"));
关键要点:
- 提示明确定义了安全机制(JWT、bcrypt)和具体路由,确保了完整性。
- Claude 正确地包含了中间件和身份验证逻辑,而这些在通用 AI 代码中常常缺失。
- 输出无需修改即可运行(安装依赖后),使用
node app.js。
动手示例 3:带数据库集成的 Flask API
提示:
构建一个图书目录的 Flask REST API。
包含:
SQLite 数据库集成
SQLAlchemy ORM 模型
图书的 CRUD 路由
针对无效操作的错误处理
返回一个完整可运行的 Python 脚本。
Claude 输出(示例):
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
应用 = Flask(__name__)
应用.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///books.db"
数据库 = SQLAlchemy(应用)
class 书籍(数据库.Model):
id = 数据库.Column(数据库.Integer, primary_key=True)
书名 = 数据库.Column(数据库.String(100), nullable=False)
作者 = 数据库.Column(数据库.String(100), nullable=False)
@应用.before_first_request
def 创建表():
数据库.create_all()
@应用.route("/books", methods=["POST"])
def 添加书籍():
数据 = request.get_json()
书籍 = 书籍(书名=数据["title"], 作者=数据["author"])
数据库.session.add(书籍)
数据库.session.commit()
练习题
在为 Claude 编写后端提示时,以下哪项不是关键要求?
以下哪些是结构良好的 FastAPI CRUD 应用程序提示的特征?
一个 Node.js Express API 提示应包含用于用户注册和登录的端点、使用 bcrypt 进行密码哈希,以及使用 JWT 生成令牌。
在 FastAPI 应用程序中,___ 模型用于验证任务请求体。
解释为什么在后端提示中指定框架和数据验证很重要。
以下哪项是 Claude 进行有效文档生成的关键方面?
以下哪些是 Claude 可以生成的文档类型?
Claude 生成文档的目标是让文档在开发过程中成为事后才考虑的事情。
在 Node.js Express API 中,___ 用于密码哈希以确保安全的用户身份验证。
在 FastAPI CRUD 应用程序提示中加入异常处理的目的是什么?
以下哪项是使用 Claude 进行后端开发的好处?
以下哪些是图书目录 Flask API 提示的组成部分?
Claude 的文档生成方法使其适合生成能够随代码库演进的活文档。
在 FastAPI 应用程序中,当任务未找到时会引发 ___ 异常。
中间件在用于用户认证的 Node.js Express API 中扮演什么角色?
在为一个管理用户档案的 FastAPI 应用程序创建后端提示时,以下哪项是确保 Claude 生成完整且功能性应用程序的关键要求?
以下哪些是为使用 JWT 令牌处理用户认证的 Node.js Express API 编写提示时必须包含的基本组件?
一个用于管理图书目录的 Flask REST API 的结构良好的提示应包括 SQLite 数据库集成、SQLAlchemy ORM 模型、书籍的 CRUD 路由以及对无效操作的错误处理,以确保 Claude 生成一个完整且可运行的脚本。
登录后解锁笔记、知识点解析、AI 问答
立即登录