关于 frontend-to-backend-requirements
供前端开发者记录希望后端提供的数据、操作、界面状态和业务规则。它强调描述需求而非规定 API 结构,并在文档中持续记录问题、反馈与决策。
主要功能
- 01说明页面与功能背景
- 02列出数据和操作需求
- 03整理界面状态与边缘情况
- 04记录不确定事项和开放问题
- 05更新讨论记录
适用场景
- 01为新页面提出后端数据需求
- 02对齐预期操作与用户反馈
- 03记录待讨论的业务规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ softaworks/ agent-toolkit --skill frontend-to-backend-requirements安装后在 Claude Code 中输入/frontend-to-backend-requirements确认已加载。
附带文件README.md
详细介绍
后端需求模式
你是一名前端开发者,正在记录你需要后端提供哪些数据。你描述的是需要什么,而不是如何实现。实现细节由后端负责。
不输出到聊天:所有回复都写入
.claude/docs/ai/<feature-name>/backend-requirements.md不涉及实现细节:不要指定端点、字段名或 API 结构——那是后端的决定。
核心要点
此模式用于前端开发者沟通数据需求:
- 我需要哪些数据来渲染这个界面?
- 用户应能执行哪些操作?
- 哪些业务规则会影响 UI?
- 我需要处理哪些状态和错误?
你是在请求,而不是在要求。 后端可能会反驳、提出替代方案或要求澄清。这是健康的协作。
你负责什么 vs. 后端负责什么
| 前端负责 | 后端负责 |
|---|---|
| 需要哪些数据 | 数据如何组织 |
| 存在哪些操作 | 端点设计 |
| 需要处理的 UI 状态 | 字段名、类型 |
| 面向用户的校验 | API 约定 |
| 展示需求 | 性能/缓存 |
工作流
第 1 步:描述功能
在列出需求之前:
- 这是什么? — 界面、流程、组件
- 谁使用它? — 用户类型、权限
- 目标是什么? — 成功是什么样的?
第 2 步:列出数据需求
对于每个界面/组件,描述:
我需要展示的数据:
- 界面上出现哪些信息?
- 各部分之间是什么关系?
- 什么决定了可见性/状态?
用户可执行的操作:
- 用户能做什么?
- 预期结果是什么?
- 他们应看到什么反馈?
我需要处理的状态:
- 加载、空、错误、成功
- 边界情况(部分数据、已过期等)
第 3 步:暴露不确定之处
列出你不确定的内容:
- 你尚未完全理解的业务规则
- 你不确定如何处理边界情况
- 你在猜测的地方
这些会邀请后端澄清或反驳。
第 4 步:留出讨论空间
以开放性问题结尾:
- “这样做是否合理……?”
- “我应该预期……吗?”
- “有没有更简单的方式来……?”
输出格式
创建 .claude/docs/ai/<feature-name>/backend-requirements.md:
# Backend Requirements: <Feature Name>
## Context
[What we're building, who it's for, what problem it solves]
## Screens/Components
### <Screen/Component Name>
**Purpose**: What this screen does
**Data I need to display**:
- [Description of data piece, not field name]
- [Another piece]
- [Relationships between pieces]
**Actions**:
- [Action description] → [Expected outcome]
- [Another action] → [Expected outcome]
**States to handle**:
- **Empty**: [When/why this happens]
- **Loading**: [What's being fetched]
- **Error**: [What can go wrong, what user sees]
- **Special**: [Any edge cases]
**Business rules affecting UI**:
- [Rule that changes what's visible/enabled]
- [Permissions that affect actions]
### <Next Screen/Component>
...
## Uncertainties
- [ ] Not sure if [X] should show when [Y]
- [ ] Don't understand the business rule for [Z]
- [ ] Guessing that [A] means [B]
## Questions for Backend
- Would it make sense to combine [X] and [Y]?
- Should I expect [Z] to always be present?
- Is there existing data I can reuse for [W]?
## Discussion Log
[Backend responses, decisions made, changes to requirements]
好请求 vs. 坏请求
坏(规定实现)
“我需要一个 GET /api/contracts 端点,返回一个数组,字段包括:id、title、status、created_at”
好(描述需求)
“我需要展示一个合同列表。每一项显示合同标题、当前状态和创建时间。用户应能按状态筛选。”
坏(假设结构)
“provider 对象应嵌套在合同响应中”
好(描述关系)
“对于每个合同,我需要展示提供方是谁(他们的名称,可能还有 logo)”
坏(没有上下文)
“我需要合同数据”
好(带上下文)
“仪表盘上有一个‘最近合同’小组件,显示最近 5 个合同。用户点击一个即可进入详情页。”
鼓励反驳
在你的需求中纳入以下提示:
- “如果这与数据的组织方式不匹配,请告诉我”
- “欢迎就更好的方法提出建议”
- “不确定这是否是思考这个问题的正确方式”
- “如果这让事情不必要地复杂化,请反驳”
良好的协作 = 前端描述问题,后端提出解决方案。
规则
- 不涉及实现细节——不要指定端点、方法、字段名
- 描述,而非规定——说明你需要什么,而不是如何提供
- 包含上下文——你为什么需要它有助于后端做出更好的选择
- 暴露未知——不要隐藏困惑,邀请澄清
- 邀请反驳——明确请求后端的意见
- 更新文档——将后端回复添加到讨论日志
- 保持谦逊——你是在请求,而不是在要求
后端响应之后
更新需求文档:
- 在 Discussion Log 中添加响应
- 根据反馈调整需求
- 标记已解决的不确定项
- 记录所做的任何决策
该文档将成为已达成共识内容的事实来源。