返回顶部
a

axum-code-reviewAxum代码审查

Reviews axum web framework code for routing patterns, extractor usage, middleware, state management, and error handling. Use when reviewing Rust code that uses axum, tower, or hyper for HTTP services. Covers axum 0.7+ patterns including State, Path, Query, Json extractors.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
103
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

axum-code-review

Axum 代码审查

审查工作流

  1. 1. 检查 Cargo.toml — 注意 axum 版本(0.6 与 0.7+ 模式不同)、Rust 版本(2021 与 2024)、tower、tower-http 特性。2024 版本改变了处理程序返回类型中 RPIT 生命周期的捕获方式,并消除了自定义提取器中对 async-trait 的需求。
  2. 检查路由 — 路由组织、方法路由、嵌套路由器
  3. 检查提取器 — 顺序至关重要(主体提取器必须放在最后)、正确的类型
  4. 检查状态 — 通过 State 共享状态,而非全局可变状态
  5. 检查错误处理 — IntoResponse 实现、错误类型

输出格式

按以下格式报告发现:

text
[文件:行号] 问题标题
严重程度:严重 | 主要 | 次要 | 信息性
问题描述及其重要性。

快速参考

问题类型参考文档
路由定义、嵌套、方法路由references/routing.md
State、Path、Query、Json、主体提取器
references/extractors.md | | Tower 中间件、层、错误处理 | references/middleware.md |

审查清单

路由

  • - [ ] 按领域组织路由(针对 /api/users、/api/orders 使用嵌套路由器)
  • [ ] 为 404 定义了回退处理程序
  • [ ] 方法路由明确(使用 .get()、.post(),而非通过手动方法匹配的 .route())
  • [ ] 无路由冲突(不同提取器的重叠路径)

提取器

  • - [ ] 消耗主体的提取器(Json、Form、Bytes)是最后一个参数
  • [ ] State 要求 T: Clone — 通常使用 Arc 或直接派生 Clone
  • [ ] Path 参数类型与路由定义匹配
  • [ ] Query 字段对于可选查询参数使用 Option 并添加 #[serde(default)]
  • [ ] 自定义提取器实现 FromRequestParts(非主体)或 FromRequest(主体)
  • [ ] 2024 版本:自定义提取器在 trait 实现中使用原生 async fn(FromRequest/FromRequestParts 无需 #[async_trait])

状态管理

  • - [ ] 通过 State 共享应用状态,而非全局可变静态变量
  • [ ] 数据库连接池在状态中(非每次请求创建)
  • [ ] 状态仅包含共享资源(连接池、配置、通道),不包含请求特定数据
  • [ ] 在状态类型上派生或手动实现 Clone
  • [ ] 2024 版本:共享静态状态使用 std 中的 LazyLock(而非 oncecell::sync::Lazy 或 lazystatic!)

错误处理

  • - [ ] 处理程序错误实现 IntoResponse 以返回正确的 HTTP 错误码
  • [ ] 内部错误不泄露给客户端(500 响应中不包含原始错误消息)
  • [ ] 错误响应使用一致格式(包含 code/message 的 JSON 错误体)
  • [ ] 处理程序使用 Result 模式
  • [ ] 2024 版本:处理程序返回类型 -> impl IntoResponse 默认捕获所有作用域内的生命周期;返回自有数据时使用 + use<> 选择不捕获请求生命周期

中间件

  • - [ ] Tower 层按正确顺序应用(外层在请求时先运行,在响应时后运行)
  • [ ] 使用 tower-http 处理常见关注点(CORS、压缩、追踪、超时)
  • [ ] 请求作用域数据通过扩展传递,而非全局状态
  • [ ] 中间件错误不会 panic — 它们返回错误响应
  • [ ] 2024 版本:使用 #[async_trait] 的中间件可迁移到 trait 实现中的原生 async fn

严重程度校准

严重

  • - 主体提取器未放在处理程序参数最后(静默消耗主体,后续提取器失败)
  • 通过路径/查询参数直接传入查询的 SQL 注入
  • 内部错误详情泄露给客户端(堆栈跟踪、数据库错误)
  • 受保护路由缺少认证中间件

主要

  • - 使用全局可变状态而非 State(竞态条件)
  • 缺少错误类型转换(原始 sqlx::Error 返回给客户端)
  • 缺少请求超时(处理程序可能无限挂起)
  • 路由冲突导致意外的 405 错误
  • 2024 版本:当原生 async fn 可用时仍对 FromRequest/FromRequestParts 使用 async-trait

次要

  • - 手动路由方法匹配而非使用 .get()、.post()
  • 缺少回退处理程序(默认 404 为纯文本,非 JSON)
  • 中间件按路由应用而应为全局(或反之)
  • 缺少 tower-http::trace 用于请求日志记录
  • 2024 版本:在 std::sync::LazyLock 可用时仍使用 oncecell::sync::Lazy 或 lazystatic!

信息性

  • - 建议使用 tower-http 层处理常见关注点
  • 路由器组织改进
  • 建议通过 utoipa 或 aide 添加 OpenAPI 文档

有效模式(请勿标记)

提交发现前

在报告任何问题前,加载并遵循 beagle-rust:review-verification-protocol。

标签

skill ai
v1.0.1 最新 2026-4-13 09:27
- Added Rust 2024 edition-specific guidance for axum reviews, covering native async trait impls and lifetime capture.
- Expanded checklist for extractors, state, error handling, and middleware to highlight Rust 2024 edition patterns (e.g., LazyLock, use of native async fn, lifetime capture changes).
- Updated major and minor severity categories with new issues relevant to Rust 2024 migration (e.g., continued use of async-trait, legacy Lazy usage).
- Refreshed Valid Patterns section to include new Rust 1.75+ and 1.80+ idioms.
- Minor clarifications in workflow and output formatting.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部