ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

第17课:Claude Code实战案例一,从零开发一个完整 API 模块

第17课:Claude Code实战案例一,从零开发一个完整 API 模块 1. 从零开发 API 模块为什么先别急着写代码很多人拿到「开发一个文章收藏 API」这种需求第一反应是打开编辑器新建 controller、service、entity 三件套然后边写边想字段怎么设计。我试过这种打法结果往往是写到一半发现项目里已经有点赞模块可以复用或者列表页收藏状态查询写成了 N1返工时间比省下来的还多。Claude Code 在这类任务里的价值不是替你敲代码而是把「情报收集 → 契约设计 → 分步生成 → 验证」这条链路串起来。它适合谁适合已经会写 CRUD、但对项目上下文不熟、或者想用 Agent 把重复劳动压缩掉的开发者。你需要准备的东西很简单一个能跑起来的 Node/TypeScript 项目骨架、一个可用的模型通道、以及一份清晰的 Prompt 模板。这一课我拆的是「内容收藏模块」用户可以收藏文章、取消收藏、在列表页和详情页看到收藏状态。听起来简单但里面藏着多对多关系设计、批量状态查询、软删除策略三个决策点。下面每一步我都会给出可复制的命令、配置和验证动作你可以在本地完整复现。核心检索词先明确Claude Code 实战、API 模块开发、Agent 分步生成、Prompt 模板、TaoToken 统一接入。这几个词会贯穿全文你按顺序跟做即可。2. TaoToken 前置准备统一 Key 与 API 通道在让 Claude Code 干活之前先把模型通道打通。TaoToken 的作用是把 Key 和 API 地址统一管理你不用在多个配置文件里来回改。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 注意 API 地址不带 UTM 参数。你需要先拿到一个 Key。进入控制台创建https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 然后在 API Keys 页面生成https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。生成后复制那串 sk- 开头的字符串后面配置里会用到。如果你用的是 Claude Code 这类命令行工具接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。文档里会告诉你 Base URL 填什么、Model ID 怎么选。我实测下来最容易出错的地方是 Base URL 末尾多写或少写斜杠以及 Model ID 大小写不一致。这里要强调一个原则Base URL、Key、Model ID 三件套必须成套出现。你在任何配置文件里看到其中一个就要确认另外两个也在同一处。比如 Claude Code 的 settings、Cline 的 MCP 配置、Codex 的 auth.json都是这个逻辑。缺一个就会报 401 或者 model not found。如果你只是想先验证模型能不能通可以用模型对话页面发一条测试消息https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。能正常返回说明 Key 和通道没问题再往下配 Claude Code。长期做编码和 Agent 任务的话Coding Plan 会更划算入口在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它适合每天都要跑 Agent 的场景不用每次单独算额度。3. 可复制配置项目骨架与 Claude Code 接入片段这一节给你可以直接粘贴的配置。先建项目骨架我用的是 NestJS 风格因为它的模块化结构最适合演示 Agent 分步生成。mkdir collect-api cd collect-api npm init -y npm install nestjs/common nestjs/core nestjs/platform-express reflect-metadata rxjs npm install -D typescript ts-node types/node npx tsc --init目录结构按模块划分收藏模块放在src/modules/collect/src/ modules/ collect/ collect.entity.ts collect.service.ts collect.controller.ts collect.repository.ts collect.module.ts article/ user/ common/ pagination.ts error-codes.ts接下来是 Claude Code 的接入配置。在项目根目录创建.claude/settings.json写入{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }注意 Base URL 是https://taotoken.net/api不要加尾部斜杠。Model ID 按你实际可用的填大小写要和文档一致。Key 换成你在 API Keys 页面生成的那串。如果你用的是 Cline 的 MCP 配置写法类似在 MCP settings 里填{ mcpServers: { taotoken: { command: npx, args: [-y, modelcontextprotocol/server-filesystem, ./src], env: { API_BASE_URL: https://taotoken.net/api, API_KEY: sk-你的Key, MODEL_ID: claude-sonnet-4-20250514 } } } }Codex 用户则在~/.codex/auth.json里配置{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: claude-sonnet-4-20250514 }三件套齐了Claude Code 才能正常发起请求。配完先别急着写业务用一条简单命令验证通道。4. 验证请求从契约设计到 curl 跑通配置好之后第一步不是写代码是让 Agent 帮你定义接口契约。在项目根目录启动 Claude Code发这段 Prompt我要开发文章收藏模块。先不要写实现只做两件事 1. 扫描 src/modules/like/ 作为参考模板输出它的目录结构和关键文件职责 2. 基于 like 模块的约定设计 collect 模块的接口契约包括 - POST /api/v1/collect 收藏文章入参 articleId - DELETE /api/v1/collect/:articleId 取消收藏 - GET /api/v1/collect/list 分页查询我的收藏 - GET /api/v1/collect/status?articleIds1,2,3 批量查询收藏状态 输出格式每个接口的路径、方法、入参、出参、错误码。Agent 返回契约后你确认无误再发第二步 Prompt 让它分步生成按刚才的契约分三步生成代码每步生成后停下来等我确认 第一步collect.entity.ts 和 collect.repository.ts 第二步collect.service.ts注意批量查询用一次 IN 查询避免 N1 第三步collect.controller.ts 和 collect.module.ts生成完启动服务npm run start:dev然后用 curl 验证。先收藏一篇文章curl -X POST http://localhost:3000/api/v1/collect \ -H Content-Type: application/json \ -H Authorization: Bearer 你的JWT \ -d {articleId:a1b2c3d4-0000-0000-0000-000000000001}预期返回{code:0,msg:ok,data:{collected:true}}再批量查状态curl http://localhost:3000/api/v1/collect/status?articleIdsa1b2c3d4-0000-0000-0000-000000000001,a1b2c3d4-0000-0000-0000-000000000002 \ -H Authorization: Bearer 你的JWT预期返回一个 map包含每篇文章的收藏状态。如果这里返回空或者报错先看服务日志里的 SQL确认是不是 IN 查询没拼对。单元测试用 Jest 补一条it(should return collect status map, async () { const result await service.getStatus([a1, a2], user-1); expect(result).toEqual({ a1: true, a2: false }); });跑npm test全绿说明模块基本可用。5. 常见报错排查401、local proxy failed、reading choices这一节对照真实报错逐条给排查路径。401 Unauthorized九成是 Key 或 Base URL 配错。先确认.claude/settings.json里ANTHROPIC_API_KEY是完整的 sk- 串没有多余空格。再确认ANTHROPIC_BASE_URL是https://taotoken.net/api不是首页地址。如果还报 401去 API Keys 页面重新生成一个 Key 替换。local proxy failed这个报错通常出现在本地网络层不是 Key 的问题。检查你的终端有没有设置HTTP_PROXY或HTTPS_PROXY环境变量如果有先unset掉再试。另外确认防火墙没有拦截对taotoken.net的出站请求。reading choices 报错一般是模型返回格式和客户端预期不一致。检查 Model ID 是否拼写正确大小写敏感。如果用的是 Claude Code确认ANTHROPIC_MODEL填的是文档里列出的可用模型。换一个 Model ID 再试能快速定位是不是模型名的问题。OAuth 相关报错如果你在 Claude Code 里看到 OAuth 字样说明客户端在尝试走 OAuth 流程但你的配置是 API Key 模式。检查 settings 里有没有残留的 OAuth 配置项删掉后重启 Claude Code。N1 查询导致列表页变慢这不是报错但很常见。表现是列表页返回 20 篇文章要 2 秒以上。排查方法是在 repository 里打印 SQL如果看到 20 条独立的 select就是 N1。改法是用一次WHERE article_id IN (...)批量查再在 service 里组装 map。单元测试报 reading choices测试里 mock 的返回结构要和实际接口一致。检查 mock 数据是不是少了data字段或者code类型不对。排查顺序建议先看报错关键词再查配置三件套最后看代码逻辑。大部分问题在前两步就能解决。6. 语义一致 CTA把这条链路固化成你的工作流走到这里你已经完成了一个可运行的收藏 API 模块契约设计、分步生成、curl 验证、单元测试、报错排查。这套流程可以复用到任何 CRUD 模块上把 Prompt 模板里的「收藏」换成「点赞」「关注」「订阅」即可。如果你在接入环节卡住了优先看接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有三件套的完整说明。Key 不够用就去 API Keys 页面补https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。想先验证模型通不通用模型对话页面发一条消息最快https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。最后留一个我踩过的坑Agent 分步生成时如果你不明确说「每步停下来等我确认」它会一口气把三个文件全写完中间出错你很难定位是哪一步的问题。把节奏控制住比让它跑得快更重要。
返回列表