원클릭으로
axum-guide
Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | axum-guide |
| description | Axum v0.8.x backend development guide. Handlers, routing, middleware, auth, error handling. |
use axum::{extract::{Path, Query, State, Json}, response::IntoResponse, http::StatusCode};
async fn get_user(
State(pool): State<PgPool>,
Path(id): Path<i32>,
) -> Result<Json<User>, AppError> {
let user = sqlx::query_as!(User, "SELECT * FROM users WHERE id = $1", id)
.fetch_one(&pool).await?;
Ok(Json(user))
}
async fn create_user(
State(pool): State<PgPool>,
claims: Claims, // Custom extractor
Json(payload): Json<CreateUserRequest>,
) -> Result<(StatusCode, Json<User>), AppError> {
// ...
Ok((StatusCode::CREATED, Json(user)))
}
fn app() -> Router<AppState> {
Router::new()
.route("/", get(root))
.route("/users", get(list_users).post(create_user))
.route("/users/:id", get(get_user).put(update_user).delete(delete_user))
.nest("/api", api_routes())
.layer(middleware_stack())
.with_state(state)
}
pub struct AppError {
pub code: StatusCode,
pub message: String,
}
impl IntoResponse for AppError {
fn into_response(self) -> Response {
(self.code, Json(json!({"error": self.message}))).into_response()
}
}
impl From<sqlx::Error> for AppError {
fn from(err: sqlx::Error) -> Self {
match err {
sqlx::Error::RowNotFound => AppError {
code: StatusCode::NOT_FOUND,
message: "Resource not found".into(),
},
_ => AppError {
code: StatusCode::INTERNAL_SERVER_ERROR,
message: "Database error".into(),
},
}
}
}
async fn logging_middleware(req: Request, next: Next) -> Response {
let method = req.method().clone();
let uri = req.uri().clone();
let response = next.run(req).await;
tracing::info!("{} {} -> {}", method, uri, response.status());
response
}
let app = Router::new()
.route("/", get(handler))
.layer(middleware::from_fn(logging_middleware));
pub struct Claims { pub user_id: i32, pub role: String }
#[async_trait]
impl<S: Send + Sync> FromRequestParts<S> for Claims {
type Rejection = AppError;
async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
let token = parts.headers.get("cookie")
.and_then(|v| v.to_str().ok())
.and_then(extract_token)
.ok_or(AppError::unauthorized("No token"))?;
validate_jwt(&token)
}
}
async fn auth_middleware(claims: Claims, req: Request, next: Next) -> Response {
next.run(req).await
}
let protected = Router::new()
.route("/profile", get(profile))
.layer(middleware::from_fn(auth_middleware));
use tower_http::cors::{CorsLayer, Any};
let cors = CorsLayer::new()
.allow_origin(Any)
.allow_methods(Any)
.allow_headers(Any)
.allow_credentials(true);
async fn login() -> impl IntoResponse {
let cookie = format!(
"token={}; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age={}",
token, max_age
);
([(header::SET_COOKIE, cookie)], Json(response))
}
async fn upload(mut multipart: Multipart) -> Result<(), AppError> {
while let Some(field) = multipart.next_field().await? {
let name = field.name().unwrap_or_default().to_string();
let data = field.bytes().await?;
// Process file
}
Ok(())
}
State last (others may consume body)Clone (usually wrap in Arc)Claude + Gemini + Codex 4者クロスファクトチェック。Opus自身、Gemini Flash、Gemini Pro、Codex (gpt-5.3-codex) の4者で独立チェック→争点抽出→議論→合意レポートを出力する。
Claude + Gemini クロスファクトチェック。Opus自身、Gemini Flash、Gemini Proの3者で独立チェック→争点抽出→議論→合意レポートを出力する。
Claude内マルチモデルファクトチェック。Opusが自身でチェックし、Sonnetサブエージェントに独立チェックさせ、両者の結果を比較・議論して合意レポートを出力する。
Gemini CLIのGoogle検索統合(grounding)を使ったWeb検索。Claudeは結果の整形・要約のみ担当し、WebSearchツールは使用しない。
Dioxus v0.7.x desktop app guide. Components, Signal state, rsx! macro, hooks, events, Context API, async.
Leptos v0.8.x frontend development guide. Components, signals, resources, async, forms, and ownership patterns.