Domain Web

by actionbook5c40d3ad7851No license1.5K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 6 weeks ago

Use when building web services. Keywords: web server, HTTP, REST API, GraphQL, WebSocket, axum, actix, warp, rocket, tower, hyper, reqwest, middleware, router, handler, extractor, state management, authentication, authorization, JWT, session, cookie, CORS, rate limiting, web 开发, HTTP 服务, API 设计, 中间件, 路由

Instructions onlySoftware Development
AI-generated overview

Guidance for building Rust web services, covering async handlers, state, middleware, and framework choices.

What it does
This skill provides domain constraints and design guidance for building web services in Rust. It maps web requirements such as stateless HTTP, concurrency, and security to Rust design implications, and compares frameworks like axum, actix-web, warp, and rocket. It also lists key crates and design patterns, including an axum handler example with error handling.
When to use it
Use it when building or designing Rust web services, HTTP servers, or REST and GraphQL APIs. It is relevant when choosing a Rust web framework or working with middleware, extractors, shared state, authentication, or request validation.
Requirements
No scripts or special tooling are required; it is instructions only. The guidance assumes Rust web development with crates such as axum, actix-web, reqwest, serde_json, jsonwebtoken, tower-sessions, sqlx, and diesel.

Web Domain

Layer 3: Domain Constraints

Domain Constraints → Design Implications

Domain RuleDesign ConstraintRust Implication
Stateless HTTPNo request-local globalsState in extractors
ConcurrencyHandle many connectionsAsync, Send + Sync
Latency SLAFast responseEfficient ownership
SecurityInput validationType-safe extractors
ObservabilityRequest tracingtracing + tower layers

Critical Constraints

Async by Default

RULE: Web handlers must not blockWHY: Block one task = block many requestsRUST: async/await, spawn_blocking for CPU work

State Management

RULE: Shared state must be thread-safeWHY: Handlers run on any threadRUST: Arc<T>, Arc<RwLock<T>> for mutable

Request Lifecycle

RULE: Resources live only for request durationWHY: Memory management, no leaksRUST: Extractors, proper ownership

Trace Down ↓

From constraints to design (Layer 2):

"Need shared application state"    ↓ m07-concurrency: Use Arc for thread-safe sharing    ↓ m02-resource: Arc<RwLock<T>> for mutable state
"Need request validation"    ↓ m05-type-driven: Validated extractors    ↓ m06-error-handling: IntoResponse for errors
"Need middleware stack"    ↓ m12-lifecycle: Tower layers    ↓ m04-zero-cost: Trait-based composition

Framework Comparison

FrameworkStyleBest For
axumFunctional, towerModern APIs
actix-webActor-basedHigh performance
warpFilter compositionComposable APIs
rocketMacro-drivenRapid development

Key Crates

PurposeCrate
HTTP serveraxum, actix-web
HTTP clientreqwest
JSONserde_json
Auth/JWTjsonwebtoken
Sessiontower-sessions
Databasesqlx, diesel
Middlewaretower

Design Patterns

PatternPurposeImplementation
ExtractorsRequest parsingState(db), Json(payload)
Error responseUnified errorsimpl IntoResponse
MiddlewareCross-cuttingTower layers
Shared stateApp configArc<AppState>

Code Pattern: Axum Handler

rust
async fn handler(    State(db): State<Arc<DbPool>>,    Json(payload): Json<CreateUser>,) -> Result<Json<User>, AppError> {    let user = db.create_user(&payload).await?;    Ok(Json(user))}
// Error handlingimpl IntoResponse for AppError {    fn into_response(self) -> Response {        let (status, message) = match self {            Self::NotFound => (StatusCode::NOT_FOUND, "Not found"),            Self::Internal(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Internal error"),        };        (status, Json(json!({"error": message}))).into_response()    }}

Common Mistakes

MistakeDomain ViolationFix
Blocking in handlerLatency spikespawn_blocking
Rc in stateNot Send + SyncUse Arc
No validationSecurity riskType-safe extractors
No error responseBad UXIntoResponse impl

Trace to Layer 1

ConstraintLayer 2 PatternLayer 1 Implementation
Async handlersAsync/awaittokio runtime
Thread-safe stateShared stateArc<T>, Arc<RwLock<T>>
Request lifecycleExtractorsOwnership via From<Request>
MiddlewareTower layersTrait-based composition

Related Skills

WhenSee
Async patternsm07-concurrency
State managementm02-resource
Error handlingm06-error-handling
Middleware designm12-lifecycle

Source and attribution

Source:actionbook/rust-skillsinskills/domain-webat commit5c40d3a

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal