AiOffice 能力组合,开箱即用,为您的工作流提速
使用 pytest 进行 Django 5.x 的测试驱动开发工作流程。
暂无简介
现代 Django 5.x 模式和最佳实践。
本 skill 提供后端测试 bugfix 的完整工作流知识,包括错误分类体系、置信度评分系统和 TDD 最佳实践。
从捆绑的模板生成完整的 Strapi v5 插件,然后连接自定义字段注册和入门 React 输入组件。无需 CLI 依赖或网络访问。
创建一个完全配置的 Strapi 项目,其中包含预配置的内容类型、种子数据、公共 API 访问权限以及用于默认填充的基于路由的中间件。
查找并修复 API 性能瓶颈。
在不破坏现有客户端的情况下安全地发展 API。
创建用于测试和开发的真实模拟 API。
生成具有验证和类型安全性的生产就绪 CRUD API 端点。
使用 OpenAPI 规范和交互式文档创建全面的 API 文档。
将规范与代码连接起来——使用来自 TODO 存根和上游规范的业务逻辑生成完整的服务实现。
从上游规范生成生产就绪的后端代码支架 - 多堆栈、tech.md 自适应。
使用分层架构原则设计和审查 Rails 应用程序。
<input_requirements> 基础环境 URL 身份验证方案和访问 端点和合约列表(参数、主体、响应) 规范 (OpenAPI/Swagger) 和 API 版本 测试数据和初始状态 速率限制和超时约束 </input_requirements>
<skill_overview> 安全地使用 tower-http 来应用可重用的 HTTP 中间件 添加请求/响应跟踪 配置 CORS 启用压缩或超时 传播请求 ID tower-http GitHub tower-http 文档 </skill_overview> <layer_selection> 仅在 Cargo.toml 中启用所需的 tower-http 功能 对于请求跨度和延迟,优先使用 TraceLayer 将 CorsLayer 用于面向浏览器的 API 将 TimeoutLayer 用于外部调用和慢速处理程序</layer_selection> 尽早设置请求 ID,稍后传播 将跟踪置于压缩之外以实现完全可见性 将安全层 (CORS) 保持在边缘附近 <request_ids> 使用 SetRequestIdLayer + PropagateRequestIdLayer 使用一致的标头名称 (X-Request-Id) </request_ids> 不要在生产中使用宽松的 CORS 明确将来源、方法和标头列入白名单 将allow_credentials 与特定来源对齐 仅针对较大的响应启用压缩 避免压缩已经压缩的格式 <anti_patterns> 避免在产品中使用 CorsLayer::permissive 避免堆叠多个超时 避免在 TraceLayer 中记录敏感标头 </anti_patterns>
<skill_overview> 在 Tokio 运行时上构建可靠的异步服务 启动或配置 Tokio 运行时 生成并发任务 应用超时和取消 使用异步通道和同步 混合阻塞和异步工作 Tokio GitHub Tokio 文档 </skill_overview> 仅在二进制文件中使用 #[tokio::main] 避免在一个进程中创建多个运行时 为服务器选择 multi_thread,为 CLI 选择 current_thread 使用 tokio::spawn 执行并发异步任务 始终处理 JoinHandle 结果 更喜欢用 JoinSet 来管理许多任务 let handle = tokio::spawn(async move { do_work().await });让结果=handle.await?; <timeouts_and_cancellation> 用 tokio::time::timeout 包装外部调用 使用 tokio::select!对于取消路径 通过删除发件人来传播取消 let res = tokio::time::timeout(Duration::from_secs(2), call()).await; </timeouts_and_cancellation> 使用有界通道进行背压 选择 mpsc 作为工作队列,oneshot 进行单一回复 处理关闭的通道而不发生恐慌 <blocking_work> 切勿在异步运行时线程上调用阻塞代码 对于 CPU 限制或阻塞 I/O 使用spawn_blocking 对于异步 I/O 优先选择 tokio::fs 和 tokio::net </blocking_work> <anti_patterns> 避免在异步代码中使用 std::thread::sle避免在不跟踪任务的情况下生成任务避免在异步处理程序内阻塞调用</anti_patterns>
<skill_overview> 编写快速、可靠且可维护的 Rust 测试 编写单元测试 添加集成测试 测试异步代码 提高测试可靠性 The Rust Book - 测试 </skill_overview> <test_struct> 在同一模块中使用 #[cfg(test)] mod 测试进行单元测试 将集成测试放在测试/中作为单独的板条箱 保持测试独立和确定性 </test_struct> <arrange_act_assert> 使用 Arrange、Act、Assert 构建每个测试 #[test] fn add_two_numbers_returns_sum() { 让结果 = add(2, 3); assert_eq!(5, 结果); } </arrange_act_assert> <async_tests> 使用运行时提供的异步测试工具避免睡眠;使用超时和确定性输入</async_tests> 使用assert!、assert_eq!、assert_ne!为了清楚起见,请使用火柴!对于枚举模式断言 <anti_patterns> 依赖于执行顺序的测试 在单元测试中命中真实的外部服务 跨测试共享全局可变状态 </anti_patterns>
<skill_overview> 编写安全、经过验证且高效的 SQLx 查询 使用 SQLx 编写 SQL 查询 使用编译时查询宏 优化数据库访问模式 使用事务 SQLx GitHub </skill_overview> <query_rules> 使用查询!或 query_as!用于编译时验证 始终绑定参数,从不连接用户输入 适当地使用 fetch_one、fetch_Optional、fetch_all let rec = sqlx::query!("SELECT id FROM users WHERE email = $1", email) .fetch_Optional(&pool) .await?; </query_rules> <compile_time_checks> 确保 DATABASE_URL 在构建时可用 使用 sqlxprepare 和 SQLX_OFFLINE 进行离线构建 </compile_time_checks> 将多步更改包装在事务中 将 &mut 事务传递给查询调用 let mut tx = pool.begin().await?; sqlx::query!("从 id = $1 的项目中删除", id) .execute(&mut tx) .await?; tx.commit().await?;批量查询而不是循环查询 对于大型结果集更喜欢流式获取 <anti_patterns> 从不通过字符串连接构建 SQL 不要为每个请求创建新池 避免在循环内运行查询 </anti_patterns>
<skill_overview> 跨环境安全、一致地配置 SQLx 设置数据库池 添加或运行迁移 配置数据库 URL 和功能 在启动时引导数据库 SQLx GitHub </skill_overview> 在应用程序生命周期内使用单个共享池 根据数据库限制配置最大连接数 将池存储在应用程序状态并重用它 let pool = sqlx::PgPool::connect(&database_url).await?;使用环境中的 DATABASE_URL,切勿硬编码凭据 仅启用所需的数据库和运行时功能 如果启动时无法访问数据库,则快速失败 使用 sqlx migrate add 生成迁移 将迁移保留在专用的迁移/目录中 通过 sqlx migrate run 或 migrate 应用迁移!启动时 在生产中,在受控步骤中应用迁移 sqlx::migrate!("./migrations").run(&pool).await?;为开发、测试和生产使用单独的数据库 默认情况下切勿对生产运行破坏性迁移