V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
5261
V2EX  ›  Rust

Rust 两次入门后,尝试写一个 web 项目,懵逼中~

  •  
  •   5261 · 5 天前 · 4013 次点击

    尝试多次入门后,用了以下一些框架

    axum:web framwork sqlx:sqlboy

    写着写着感觉用 rust 写 web 项目总感觉哪里味不对,一直在反思这 rust 写 web 应用真是适合吗?

    就目前 orm 框架 sqlx 、seaorm 、diesel 都还在讨论哪个牛逼~

    不像 Java ,mybatis 用起来那么爽~ 我既想要 orm 的字段映射到对象,也想要自定义查询的灵活~

    58 条回复    2025-04-10 12:27:42 +08:00
    FoxRiverMan
        1
    FoxRiverMan  
       5 天前   ❤️ 5
    你的问题太天真了!你以为 Rust 是 Java 吗?还想要 MyBatis 式的爽快?醒醒吧! Rust 玩的是编译时安全,不是 runtime 魔法。那些 ORM 框架还在用生命值交换类型安全,用宏展开模拟动态查询,它们连 MyBatis 的脚后跟都摸不到!

    别做梦了!在 Rust 里想同时拥有 ORM 的对象映射和原生 SQL 的灵活?要么跪着用 sea-orm 的 ActiveRecord 模式,要么像苦行僧一样手写 sqlx 的映射代码。你以为 diesel 的查询 DSL 很牛逼?那不过是编译器用铁链拴着你跳舞!

    Java 的 MyBatis 能边喝咖啡边写 XML 动态 SQL ,Rust 的 sqlx 让你跪着检查每个问号参数的类型安全!你想要的"字段映射到对象"?在 Rust 里每个结构体都要用#[derive(Debug, Clone, sqlx::FromRow)]来献祭,连枚举类型都要自己实现 Typesqlx::Postgres !

    醒醒吧!用 Rust 写 Web 就像用手术刀砍树——要么你足够疯魔把整个生态链重写一遍,要么就老实承认这玩意儿现在根本不适合快速开发 Web 应用!等你的项目被生命周期标注搞得欲仙欲死时,Java 程序员早把功能上线十次了!
    springz
        2
    springz  
       5 天前
    sea-orm 还有一个 https://github.com/SeaQL/sea-query 用一下这个试试,看看能不能找到熟悉的体验。

    web framwork 我推荐你用 salvo 也看看能不能找到熟悉的感觉。https://github.com/salvo-rs/salvo
    5261
        3
    5261  
    OP
       5 天前
    @FoxRiverMan 同意~ 当时也是出于说想找 web3 remote 工作去了解了下 Rust ,加上自己是 Java 应用开发,所以想着用 Rust 自己搭建个项目重写一遍 Java 的需求,写到一半发现很难受

    那 Go 写 web 是不是就比 Rust 更适合呢?
    5261
        4
    5261  
    OP
       5 天前
    @springz sea-orm 更难受~有点当初 habeinate 的感觉
    peteretep
        5
    peteretep  
       5 天前   ❤️ 15
    哦我的上帝啊!
    rust 要是再以 web 服务的样子出现,
    Springboot 会发誓用它的自动装配狠狠地把 aop 踢进 rust 的屁股!
    springz
        6
    springz  
       5 天前
    @5261 请注意我说的是 sea-query 。
    springz
        7
    springz  
       5 天前
    我也不是很习惯 sea-orm ,用 sea-query 会比 sqlx 裸写 sql 好很多。
    openmynet
        8
    openmynet  
       5 天前
    sea-orm 用着难受是没有结合自定义宏一起使用,sea-orm + validator + serder-aux 前端配合 ts 的 interface 不比 java 的 MyBatis 好上百倍
    344457769
        9
    344457769  
       5 天前
    @FoxRiverMan V2EX 不允许发布 AI 生成的内容的。
    FoxRiverMan
        10
    FoxRiverMan  
       5 天前
    @344457769 刚问了 Siri ,它说本消息由你的母语基因自动生成,要封建议从甲骨文开始封起
    kenshinhu
        11
    kenshinhu  
       5 天前
    如果不写 Web ,Rust 可以有哪些实践?
    hangbale
        12
    hangbale  
       5 天前
    用 actix 写过,很痛苦,开发效率低,后面还是回到 node 了
    5261
        14
    5261  
    OP
       5 天前
    @kenshinhu 我猜 估计更适合除 web 开发外的场景~
    5261
        15
    5261  
    OP
       5 天前
    @springz ok ,sorry ,刚没注意
    5261
        16
    5261  
    OP
       5 天前
    @springz salvo 这个 web 框架看着像国内团队开发的? 有点 Java 那味 哈哈
    lancelock
        17
    lancelock  
       5 天前
    mybatis ... 爽吗?
    iyaozhen
        18
    iyaozhen  
       5 天前
    额 rust 写 web 还不成熟吧。大部分业务 qps 很小,牺牲效率换取性能,得不偿失
    sleepm
        19
    sleepm  
       5 天前
    Wh1t3zZ
        20
    Wh1t3zZ  
       5 天前   ❤️ 1
    @FoxRiverMan #1 提醒下频繁发布 AI 生成内容会被 ban
    5261
        21
    5261  
    OP
       5 天前
    @iyaozhen 嗯,对我来说就是熟悉下整个流程,估计一开始我对 Rust 的定位没看清楚
    5261
        22
    5261  
    OP
       5 天前
    @iyaozhen 你们用 Rust 主要用在什么场景呢
    maichael
        23
    maichael  
       5 天前
    学新语言切忌新刀砍老瓜和拿着刀找瓜,你已经有可以砍 Web 的刀了,然后你还找一把刀来砍 Web ,然后你还希望它跟第一把刀一模一样,那干嘛不用原来那把呢?
    springz
        24
    springz  
       5 天前
    salvo 我感觉更像 go 生态的 gin ,用起来简单,没太多复杂概念。我一般是 salvo + sea-query 。
    XiLingHost
        25
    XiLingHost  
       5 天前
    rust 感觉适合用来做中间件和底层库,写应用层的东西感觉不合适
    springz
        26
    springz  
       5 天前
    rust 写 web 优势我个人觉得就是性能+可靠吧,糊业务现在用 js/ts 更爽。
    springz
        27
    springz  
       5 天前
    go 写业务也不合适啊,不照样一堆后端业务拿 go 写。
    5261
        28
    5261  
    OP
       5 天前
    @maichael 主要是原来的 Java 瓜 不太适合初创或者快速项目啊,同样的 qps 场景下,Java 的 it 成本那就是无底洞!
    coderzhangsan
        29
    coderzhangsan  
       5 天前
    go 火的时候做 web 应用,rust 火的时候还做 web 应用,实在搞不懂你们的脑洞,这 2 门语言的发明初衷不是为了 web 应用的吧? web 应用已经有一大堆语言了,还在上面造轮子,你们可真有精力啊。要明白一个道理,颠覆一个行业或者取代一个产品,不是简单地把轮子重新造一遍,肯定有颠覆性的创新在里面或者极致性的体验。
    springz
        30
    springz  
       5 天前
    啥业务能跑到 springboot 的性能问题,能到上限招人加机器不成问题。
    Leviathann
        31
    Leviathann  
       5 天前
    连 mybatis 都能吹上

    你还是别用 rust 了
    coderzhangsan
        32
    coderzhangsan  
       5 天前
    学新语言,就一定要理解的它的设计思维,有些人总会把母语的思想代入新语言中,以母语习惯在新语言里开发和设计,如果两门语言设计思维相差很大,就会搞得不伦不类,最后母语的习惯,指责新语言蹩脚之处。
    mrsecond
        33
    mrsecond  
       5 天前
    @FoxRiverMan 一股 ds 味
    cccssss
        34
    cccssss  
       5 天前
    @coderzhangsan 你去劝劝 tokio 的作者,别发明 axum 啊
    5261
        35
    5261  
    OP
       5 天前
    @Leviathann 我的错,不应该技术吹! 哥们日常用啥语言开发呢?
    iyaozhen
        36
    iyaozhen  
       5 天前
    @5261 #21 代替 c++,做客户端 lib sdk
    web 也有,但都是非常极端的性能场景,go 也扛不住的那种。可能省几万个 pod 才有意义做
    bjfane
        37
    bjfane  
       5 天前
    看过别人写的主机监控上报到 server 的全 rust 开源项目,自己从头理了一遍,里面还有 grpc 的东西,装在机器上的 agent 倒是合适 rust ,整体看 server 用别的语言更好,比如 go 啥的,自己写起来顺手的就行。
    玩具型的 最近再看 bun 一把梭,虽然可能不适合企业级,但是一把梭就不错,还内嵌 postgre,sqlite 驱动呢
    layxy
        38
    layxy  
       5 天前
    @5261 你放心好了,我已经试了,go 的 orm 框架也有同样的问题,基本都是字段映射到对象做的挺好,一旦要自定义查询就费劲
    springz
        39
    springz  
       5 天前
    请注意,我们在说 orm 的时候,涉及到 3 个 概念。

    orm:类似 java 的 hibernate ,jpa 。php 的 Eloquent ORM ,rust 的 sea-orm ,这层讲究的是对象关系映射,把表结构映射到对象上,完全隐藏 sql 等概念。

    sql-builder: 类似 java 的 mybatis ,js/ts 的 kysely 或 knex ,rust 的 sea-query ,这层讲究的是辅助更好的写 sql ,组装 sql 。并处理数据到对象的映射。并不隐藏 sql 概念,只是辅助。

    sql-driver: 类似 java 的 odbc ,js/ts 的 node-pg 等,rust 的 sqlx ,这层讲究的是驱动,连接等底层,纯 sql 。 不处理映射等或者简单映射。

    各有利弊,按需选择。不同层级的不要一起比较。
    springz
        40
    springz  
       5 天前
    我最开始工作是纯 sql 然后在我工作第 2-3 年的时候我喜欢用 sql-builder ,工作第 5 年的时候我用 orm ,工作第 8 年的时候我喜欢各种 sql-builder ,现在我几乎回到了纯 sql ,只是加一些模板工具方便写 sql 。
    springz
        41
    springz  
       5 天前   ❤️ 1
    web 框架说白了就是在处理 res 和 req 和它们加入中间件(要不就是过滤器模式要不洋葱圈),用多了就会感觉一个样。所有语言只要是处理 http 的都是近似设计。

    不同的场景按需选择就好。不同的语言有不同的生态和利弊。
    YsHaNg
        42
    YsHaNg  
       5 天前 via iPhone
    macwenbo
        43
    macwenbo  
       5 天前
    @FoxRiverMan 有 ai 后,我感觉问题不大了。。定义好请求参数,返回结果,把 sql 一扔,一个函数 tab ,tab 就写完了。现在裸 sql ,比以前友好太多了。
    fly2never
        44
    fly2never  
       5 天前
    我一直觉得, 如果能容忍 GC, 那没必要选择 Rust. 他带来的复杂度绝大多数和内存生命周期相关.
    在无 GC 的需求下, 先看看自己项目的生态和 已有的 C/C++库联系紧密不, 如果紧密就直接 C/C++吧, 不然写一大堆 unsafe 也没意思.

    最后如果上述都不满足, 那就顺顺利利用 Rust, 这才是 Rust 的主战场. 比如高性能数据库开发, 高性能 WASM 等等
    fly2never
        45
    fly2never  
       5 天前
    @springz go 最适合写业务了, 这个可以和 java 媲美
    darkless456
        46
    darkless456  
       5 天前
    rust 试过一阵,感觉不太适合 web 开发,一些底层的东西更适合些。
    FightPig
        47
    FightPig  
       5 天前
    用 rust 写过,太麻烦了,我最后还是用 rails 一把梭了,rust 我只拿来做一些跨平台的应用时写写,本来用 go 写的,结果 win 下 360 个恶心的东西,天天报毒
    ChiuLam
        48
    ChiuLam  
       5 天前
    hibernate 拼错的人确实多
    gujuji
        49
    gujuji  
       5 天前
    @FoxRiverMan 会说多说。。。
    lcbp
        50
    lcbp  
       4 天前
    还得是 PHP 啊
    ThinkCat
        51
    ThinkCat  
       4 天前
    web 建议使用一下 rocket.rs ,体感上和 node go 使用方式类似,要和 java 的框架比,确实比不上,但是也没上面说的那么不堪。orm 目前看确实简陋。
    abcbuzhiming
        52
    abcbuzhiming  
       4 天前
    web 这种高度动态的玩意,天生就不适合这种需要长时间静态编译检查的语言。你看在 web 领域能占据一席之地的语言,要不就是那种“瞎写也出不了大问题”的脚本语言,要么就是“虽然我要求严格但是我编译很快”的静态语言。rust 这种改起来之前,得认真想清楚,以通过编译器的语言,确实不是回合
    ShadowPower
        53
    ShadowPower  
       4 天前
    用 rust 写 web 和用 C/C++写 web 的体验并没有太大的差别
    5261
        54
    5261  
    OP
       4 天前
    @ThinkCat
    暂时先用 axum + sea-query 熟悉下 rust 写 web 代码,不能白学一趟

    @abcbuzhiming
    @ShadowPower 二位的评论很中肯!
    encro
        55
    encro  
       4 天前
    可以的,
    我就用 axum 做了一个图形处理的 web api 。
    底层对接 opencv 库,上层接口用 axum 。
    太稳定了用了几年了,就 16M 内存。。。
    wapzjn
        56
    wapzjn  
       4 天前
    如果习惯 mybatis 的话 ORM 可以尝试使用 rbatis
    5261
        57
    5261  
    OP
       4 天前
    @wapzjn 好的,晚点我去看下
    Nugine0
        58
    Nugine0  
       3 天前
    @FoxRiverMan 一眼 deepseek 生成内容,这玩意已经能被人类识别了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   850 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:37 · PVG 04:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.