mcpField
S
software-backend

software-backend

github.com/vasilyu1983开发293 次安装
代码仓库

关于 software-backend

面向后端服务实现与评审的工程技能,适用于处理 API、认证、数据访问、后台任务和生产就绪性。它提供从边界定义到可观测性与故障处理的工作流程,并按技术栈给出选择指引。

主要功能

  1. 01制定 API、认证与错误边界
  2. 02规划数据访问、缓存与迁移
  3. 03设计可重试的后台任务
  4. 04配置超时、取消与可观测性
  5. 05按约束选择后端技术栈

适用场景

  1. 01实现带幂等保障的服务端变更
  2. 02规划队列任务的重试与死信处理
  3. 03排查查询、连接池或超时问题
  4. 04为多租户服务明确隔离策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vasilyu1983/ai-agents-public --skill software-backend

安装后在 Claude Code 中输入/software-backend确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

learnings.consolidated.md
learnings.md
agents/
openai.yaml
assets/go/
template-go-chi-sqlc-pgx.md
template-go-fiber-gorm.md
assets/java/
template-java-spring-boot.md
assets/nodejs-express/
template-nodejs-express.md
assets/nodejs/
template-nodejs-fastify-drizzle-postgres.md
template-nodejs-prisma-postgres.md
assets/python-django/
template-python-django-rest.md
assets/python/
template-python-fastapi-sqlalchemy.md
assets/rust/
template-rust-axum-seaorm.md
template-rust-axum-sqlx.md
data/
sources.json
versions.json
references/
backend-best-practices.md
database-patterns.md
edge-deployment-guide.md
go-best-practices.md
infrastructure-economics.md
message-queues-background-jobs.md
nodejs-best-practices.md
operational-playbook.md
python-best-practices.md
rpc-and-transport-patterns.md
rust-best-practices.md
scripts/
test_delivery_histories.py

详细介绍

软件后端工程

将此技能用于后端服务的实现与审查:API 边界、身份验证、数据访问、作业、缓存、可观测性和生产环境加固。如果主要问题是平台选择、系统拓扑或 API 契约设计(不涉及实现),请尽早转交。

快速参考

需求默认方向
公共 HTTP API使用 REST,并明确契约和超时
内部 TS 单体仓库 API当端到端类型安全很重要时使用 tRPC
高吞吐量内部 RPC默认使用 Connect;仅当不需要兼容浏览器和 gRPC-Web 时才使用普通 gRPC
复杂的、以客户端需求为导向的读取GraphQL
关系型数据使用 PostgreSQL,并配备迁移和连接池
后台工作使用队列,并采用幂等处理程序和 DLQ 策略
浏览器身份验证使用 OIDC(采用 PKCE 的授权码模式)和 httpOnly Cookie
服务身份验证平台支持时,优先使用工作负载身份(云 IAM、SPIFFE),而非长期静态凭证;不支持时(多云、第三方、遗留系统),使用短期令牌或签名的服务凭证
缓存明确 TTL 和失效规则
可观测性使用关联 ID、追踪、结构化日志和饱和度指标

转交其他技能


工作流

  1. 确认真正的约束:延迟、团队技能、运行时、合规性、数据模型或交付速度。
  2. 根据约束选择传输方式和框架,而不是盲目追逐潮流。
  3. 定义边界:
    • 请求和响应契约
    • 身份验证和授权规则
    • 错误模型
    • 幂等性和速率限制
  4. 定义数据路径:
    • 架构和迁移
    • 事务边界
    • 连接池和查询预算
    • 缓存和失效规则
  5. 定义异步路径:
    • 队列语义
    • 重试责任归属
    • 去重和 DLQ
  6. 完成前加入可运维性保障:
    • 超时和取消
    • 健康检查
    • 结构化日志和追踪
    • 部署和回滚预期

技术选型

根据最关键的运行约束进行选择:

  • TypeScript 占比较高的团队 -> 保留仓库现有的框架和 ORM;对于新服务,使用 Fastify 加 Drizzle(与 Fastify/Drizzle 模板匹配),对于 DI 密集型 CRUD 应用,使用 NestJS 加 Prisma;对于边缘或多运行时目标,使用 Hono
  • 需要经过审计的 SQL 和可预测的并发 -> 使用 Go 和 sqlc/pgx
  • 依赖 Python 生态或与 ML 相邻 -> 使用 FastAPI 和 SQLAlchemy
  • 重视内存安全和明确性 -> 使用 Rust、Axum 和 SQLx
  • 以边缘或无服务器为首选 -> 使用轻量、无状态的处理程序,并为 CPU 和超时设置严格预算

如果实际需求是“以更少的自定义服务代码快速交付身份验证、存储和实时功能”,请先使用 软件 BaaS 平台。


后端不可妥协的要求

变更正确性约定。

对于每个可能被外部重试的变更操作,在选择传输方式或框架之前,先定义幂等性范围、事务边界、授权时机和可观察的终态。在可能的情况下,将幂等性记录与业务写入一起持久化;区分“尚未尝试”“已提交”和“结果未知”。重试必须返回原始结果或安全地恢复,绝不能重复产生效果。

类别规则
API对于可能发生重试的变更端点,必须使用幂等键
API列表端点必须明确支持分页(limit/cursor),并至少支持一个筛选条件
API错误必须结构化且可供机器读取(RFC 9457 Problem Details)
API健康检查端点必须将存活状态(/healthz)与就绪状态(/readyz)分开
数据在宽表或高吞吐路径上,不得使用 SELECT *
数据明确保留事务;不得使用隐式的环境事务
数据新增或变更的查询计划在上线前必须使用 EXPLAIN ANALYZE 验证
数据在需要可审计性的热点路径上,绕过 ORM 便利层
依赖项每次出站调用都必须设置明确的超时;不得无限期等待框架默认行为
依赖项重试只能由一个层负责(客户端与服务之间不得重复重试)
依赖项添加缓存前必须记录缓存失效规则
依赖项后台任务必须可安全重试且可观察(在开始/完成/失败时记录结构化日志)
运维每个请求都必须携带关联 ID,并将其传递给所有下游调用
运维跟踪、日志和指标中的标识符必须一致(不得使用不同的身份标识)
运维慢速路径必须设定明确的延迟预算(以 p99 为目标,而不是“足够快”)
运维部署流程必须包含回滚步骤和冒烟检查清单

多租户决策

对于存储多个客户数据的任何服务,都必须明确决定租户模式;应按租户层级选择,而非为整个产品只做一次选择。

  • **模型:**共享架构 + 通过行级安全(RLS)强制执行 tenant_id(适用于大量小型租户;隔离取决于每条查询路径)/ 每租户一个架构(适用于中等数量的租户和一定程度的定制;迁移需要分批执行)/ 每租户一个数据库(适用于受监管或规模极大的租户,以及需要按租户恢复或满足数据驻留要求的场景;运维成本最高)。
  • **租户上下文传递:**从已验证身份的主体中推导租户,绝不使用客户端提供的字段;在处理程序、任务和出站调用中传递租户上下文;在事务本地设置该上下文(兼容连接池器),未设置时默认拒绝;缓存键、幂等键、存储前缀和搜索索引都必须限定租户范围。
  • **噪声邻居:**按租户设置速率限制、队列并发数和语句超时;为大型租户分配独立分区或设置限制。使用跨租户读取测试验证隔离性。

规则:rules/common/security.md 会在每次编码会话中加载此不变量。

详情、RLS SQL 和连接池陷阱: references/database-patterns.md。


负载与故障预算

对于每个下游依赖,都要限制正在处理的请求和排队的工作量。达到上限时,用 429 或 503 拒绝新工作,并在适用时提供 Retry-After;不要接收无法在调用方截止时间前完成的工作。传递取消信号,为响应预留时间,并在影响关键路径之前削减低优先级工作。指定唯一的重试责任方、重试预算、带抖动的指数退避策略,以及幂等性约定;在负载下测试依赖变慢或故障时的表现,观察 p99、内存和队列深度能否恢复。有关弹性测试设计和故障预算审查,请加载 qa-resilience。

作业运行时选择

当服务已运行 PostgreSQL、作业量符合经过测量的数据库容量,且可以通过短事务认领每项作业时,使用 PostgreSQL 支持的队列。当吞吐量、隔离性或运维责任足以证明引入另一个依赖合理时,使用托管消息代理或由 Redis 支持的工作进程。当作业必须在崩溃或长时间等待后恢复多步骤工作流时,使用持久化执行;选择前先检查该运行时的重试和历史记录语义。数据库队列需要 FOR UPDATE SKIP LOCKED、租约到期、幂等操作、毒性作业处理和队列深度监控。关于认领和 outbox 的替代方案,请参阅消息队列与后台作业。


性能与可靠性排查

服务变慢或不稳定时,请按以下顺序排查:

步骤检查项信号
1查询行为和 N+1 问题EXPLAIN 输出、ORM 查询日志显示重复的相同查询
2索引和执行计划大表上的顺序扫描;外键或筛选列缺少索引
3连接池和队列深度连接池等待时间持续偏长;空闲连接耗尽
4超时和取消缺口请求超出截止时间仍未结束;出站调用未传递上下文
5缓存或读取方式优化机会短时间内反复执行结果相同的查询;热门读取路径没有失效机制
6运行时或层级限制CPU 限流、内存压力、上游的速率限制标头

在了解真正的瓶颈之前,不要添加缓存。


生产就绪检查清单

  • 对于已变更的部分,Backend Non-Negotiables 中的每一项均已满足
  • 为每个队列使用方定义 DLQ 策略(毒性消息如何处理)

导航

核心参考资料
共享审查工具

在相应工作流步骤处于活动状态时阅读以下内容之一,不要提前阅读:

模板

根据此任务在 Technology Selection 中作出的选择,加载对应模板,不要加载整套模板:

相关技能

调用以下任一基础技能前先通过筛选: 每项基础技能都包含 When to Apply / When to Skip 部分。如果任务符合跳过条件,请改用其中指定的基础技能,不要引入任务不需要的原语。

经验循环

如果之前的决策或注意事项与当前任务相关,请查阅 learnings.consolidated.md(如果存在);仅在需要查看历史记录或没有其他文件可用时,才查阅 learnings.md。否则,请跳过这两个文件。

应用相关经验后,如果你遇到了值得记住的模式、值得避免的错误,或令人意外的领域事实,请通过 agents-skills-feedback-loop/scripts/append_learning.py 向 learnings.md 追加一条带日期的条目。不要修改 SKILL.md 本身。

评论

支持 Markdown