axum-code-review
by anderskev
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.
安装
claude skill add --url https://github.com/openclaw/skills文档
Axum Code Review
Review Workflow
- Check Cargo.toml — Note axum version (0.6 vs 0.7+ have different patterns), tower, tower-http features
- Check routing — Route organization, method routing, nested routers
- Check extractors — Order matters (body extractors must be last), correct types
- Check state — Shared state via
State<T>, not global mutable state - Check error handling —
IntoResponseimplementations, error types
Output Format
Report findings as:
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.
Quick Reference
| Issue Type | Reference |
|---|---|
| Route definitions, nesting, method routing | references/routing.md |
| State, Path, Query, Json, body extractors | references/extractors.md |
| Tower middleware, layers, error handling | references/middleware.md |
Review Checklist
Routing
- Routes organized by domain (nested routers for
/api/users,/api/orders) - Fallback handlers defined for 404s
- Method routing explicit (
.get(),.post(), not.route()with manual method matching) - No route conflicts (overlapping paths with different extractors)
Extractors
- Body-consuming extractors (
Json,Form,Bytes) are the LAST parameter -
State<T>requiresT: Clone— typicallyArc<AppState>or directClonederive -
Path<T>parameter types match the route definition -
Query<T>fields areOptionfor optional query params with#[serde(default)] - Custom extractors implement
FromRequestParts(not body) orFromRequest(body)
State Management
- Application state shared via
State<T>, not global mutable statics - Database pool in state (not created per-request)
- State contains only shared resources (pool, config, channels), not request-specific data
-
Clonederived or manually implemented on state type
Error Handling
- Handler errors implement
IntoResponsefor proper HTTP error codes - Internal errors don't leak to clients (no raw error messages in 500 responses)
- Error responses use consistent format (JSON error body with code/message)
-
Result<impl IntoResponse, AppError>pattern used for handlers
Middleware
- Tower layers applied in correct order (outer runs first on request, last on response)
-
tower-httpused for common concerns (CORS, compression, tracing, timeout) - Request-scoped data passed via extensions, not global state
- Middleware errors don't panic — they return error responses
Severity Calibration
Critical
- Body extractor not last in handler parameters (silently consumes body, later extractors fail)
- SQL injection via path/query parameters passed directly to queries
- Internal error details leaked to clients (stack traces, database errors)
- Missing authentication middleware on protected routes
Major
- Global mutable state instead of
State<T>(race conditions) - Missing error type conversion (raw
sqlx::Errorreturned to client) - Missing request timeout (handlers can hang indefinitely)
- Route conflicts causing unexpected 405s
Minor
- Manual route method matching instead of
.get(),.post() - Missing fallback handler (default 404 is plain text, not JSON)
- Middleware applied per-route when it should be global (or vice versa)
- Missing
tower-http::tracefor request logging
Informational
- Suggestions to use
tower-httplayers for common concerns - Router organization improvements
- Suggestions to add OpenAPI documentation via
utoipaoraide
Valid Patterns (Do NOT Flag)
#[axum::debug_handler]on handlers — Debugging aid that improves compile error messagesExtension<T>for middleware-injected data — Valid pattern for request-scoped values- Returning
impl IntoResponsefrom handlers — More flexible than concrete types Router::new()per module, merged in main — Standard organization patternServiceBuilderfor layer composition — Tower pattern, not over-engineeringaxum::servewithTcpListener— Standard axum 0.7+ server setup
Before Submitting Findings
Load and follow beagle-rust:review-verification-protocol before reporting any issue.
相关 Skills
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
相关 MCP 服务
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。