Kilerd
2022-03-08 14:26:43 +08:00
1. lazy_static 已经 out-date 了,once_cell 是更佳主流的选择
2. 满屏幕的 unwrap expect 只要稍微有一点网络波动,你的 actix-worker 就炸掉了,尝试用一用 thiserror 或者 anyhow ,不然你的所有错误都不能返回一个正常的 http status
3. 既然使用了 diesel 建议用上 diesel_migration 的 embedded_migration 来做 migration
4. 在 async controller 里面满眼都是 diesel 的同步操作,意思就是你的 controller 根本就没有享受到 async 带来的好处。选择 diesel 就要学怎么用 actix 的 actor 模型跟 diesel 做组合。 不然就老老实实换成 sqlx 这种异步的数据库操作库
5. 满屏的 HttpResponse::Ok().json(results) ,actix-web 的默认 impl Responder 对于 Serialize 对象就是 Json 处理。
6. let token = req.headers().get(AUTHORIZATION); authentication 的处理也是让人震惊,
pub struct AuthenticationUser {...}
impl FromRequest for AuthenticationUser {...};
async fn required_login(user: AuthenticationUser) {...}
async fn optional_login(user: Option<AuthenticationUser>) {...}
7. reqwest 的请求建议都写上 timeout 不然很容易炸掉整个 runtime