1 unstable release

0.1.0 Jul 8, 2025

#874 in HTTP server

MIT license

5KB

dumbo_web

helper functions for web development

使用示例

以下示例展示如何在Actix-web路由处理函数中使用json_responsejson_error

use actix_web::{get, web, HttpResponse, Result};
use dumbo_web::{json_error, json_response};
use serde::Serialize;

// 成功响应示例
#[derive(Serialize)]
struct User {
    id: u32,
    name: String,
}

#[get("/user/{id}")]
async fn get_user(id: web::Path<u32>) -> Result<HttpResponse> {
    let user_id = id.into_inner();
    
    // 模拟数据库查询
    if user_id == 0 {
        return Ok(json_error(
            "无效用户ID", 
            "ID必须大于0", 
            Some(1001)
        ));
    }

    let user = User {
        id: user_id,
        name: "Alice".to_string(),
    };
    
    Ok(json_response(user))
}

// 错误处理示例
#[get("/simulate-error")]
async fn simulate_error() -> Result<HttpResponse> {
    let db_result: Result<(), std::io::Error> = Err(std::io::Error::new(
        std::io::ErrorKind::ConnectionRefused,
        "数据库连接失败"
    ));

    match db_result {
        Ok(_) => Ok(json_response("操作成功")),
        Err(e) => Ok(json_error("数据库操作失败", e, Some(5001))),
    }
}

关键点说明:

  1. json_response用于返回结构化成功响应,确保返回的结构具有一致性
  2. json_error自动记录错误并返回标准错误格式
  3. 错误响应包含可自定义的错误代码
  4. 使用serde::Serialize自动序列化数据结构

Dependencies

~15–28MB
~442K SLoC