
使用NestJS和Prisma構建REST API:身份驗證
如果你的JSON數據是一個字符串,你可以這樣做,這也是“python打印json數據并格式化”的一個常見場景:
import json
# 假設你有一個JSON格式的字符串
json_string = '{"name": "John", "age": 30, "city": "New York"}'
# 將字符串轉換為Python字典
data = json.loads(json_string)
# 格式化JSON數據并打印
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)
在這兩個示例中,indent=4
參數指定了輸出時使用4個空格進行縮進,ensure_ascii=False
允許輸出非ASCII字符,而不是將它們轉換為\uXXXX
形式的Unicode轉義序列。這些參數的設置是“python打印json數據并格式化”時常用的格式化選項。
這樣,你就可以在Python中打印并格式化JSON數據了。掌握“python打印json數據并格式化”的技能,可以讓你更有效地處理和展示JSON數據。
要給 API 加點“全局功能”,比如日志、認證、限流,中間件是最好的工具。warp 的中間件通過 Filter 實現,比如記錄每次請求的日志:
use warp::Filter;
#[tokio::main]
asyncfnmain(){
letlog= warp::log("api::requests");
letroutes= warp::path("hello")
.map(||"Hello, Warp!")
.with(log);
warp::serve(routes).run(([127,0,0,1],3030)).await;
}
每次請求都會輸出日志,比如:INFO api::requests: "127.0.0.1:51234" GET /hello
? **warp::log
**:內置的日志中間件,支持自定義日志目標。
? 溫馨提示:warp 的日志功能是基于 tokio 的 tracing
庫實現的,可以集成到更復雜的日志系統中。
沒人喜歡 500 錯誤頁面。warp 提供了靈活的錯誤處理方式,讓你的 API 更健壯。
use warp::Filter;
#[tokio::main]
asyncfnmain(){
letroute= warp::path!("divide"/i32/i32)
.and_then(|a, b|asyncmove{
if b ==0{
Err(warp::reject::custom(DivideByZero))
}else{
Ok(format!("Result: {}", a / b))
}
});
warp::serve(route).run(([127,0,0,1],3030)).await;
}
#[derive(Debug)]
structDivideByZero;
implwarp::reject::RejectforDivideByZero {}
訪問 /divide/10/0
會返回空響應,因為我們沒定義錯誤的返回內容。
要自定義錯誤響應,可以加一個 recover
中間件:
let routes= route.recover(|err: warp::Rejection|asyncmove{
ifletSome(_)= err.find::<DivideByZero>(){
Ok(warp::reply::with_status("Cannot divide by zero", warp::http::StatusCode::BAD_REQUEST))
}else{
Err(err)
}
});
warp 是一個功能強大卻簡單易用的 Web 框架,核心概念圍繞 Filter 展開,所有功能都可以通過組合實現。寫 API 的時候,你會發現它特別貼合 Rust 的表達方式,既安全又高效。
文章轉自微信公眾號@隔壁灬老吳