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

请教下单人 solo 开发 app 时的 Java 后端技术选择?

  •  1
     
  •   HeyHudy · 2021-10-18 11:10:45 +08:00 · 9113 次点击
    这是一个创建于 1140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道各位全栈老哥开发 app 时,后端接口用的什么语言什么框架?

    不考虑微服务什么的特性,只本着这几个目标去:

    • 减少开发工作量
    • 减少服务器资源占用
    • 少折腾

    目前看了一些框架,比如 SpringBoot 、Vertx 、Quarkus 、Javalin 、Jfinal 等,也简单调研了 GraphQL 、Apijson,除开 Java,对 Python 的 FastAPI 也做了尝试,始终没有找到完美答案。

    老哥们都是怎么搞的?

    84 条回复    2021-10-20 09:06:38 +08:00
    mht
        1
    mht  
       2021-10-18 11:13:01 +08:00   ❤️ 22
    PHP
    dcalsky
        2
    dcalsky  
       2021-10-18 11:13:51 +08:00
    Java/Kotlin 版本的 Vertx 、SpringBoot 、Quarkus 还有 Ktor 我都折腾过,最后选择了 Vertx,最符合独立开发的要求。

    (虽然最后还是全部重构转了 go
    MonikaCeng
        3
    MonikaCeng  
       2021-10-18 11:15:37 +08:00
    如果只是增删改查,我一般用 thinkphp6
    如果有多线程等任务,我就 SpringBoot
    6IbA2bj5ip3tK49j
        4
    6IbA2bj5ip3tK49j  
       2021-10-18 11:18:08 +08:00
    springboot,中庸之选,基本任何问题都能在搜索引擎第一页找到。
    janus77
        5
    janus77  
       2021-10-18 11:23:14 +08:00
    如果是安卓 app 千万别用 php 很大概率会被打的
    springboot 一把梭其实挺好
    shuimugan
        6
    shuimugan  
       2021-10-18 11:23:52 +08:00   ❤️ 2
    我必推荐 Node.js 的 directus,建好表之后 restapi 和 graphql 都有了,后台管理界面也有了,把它当底层用就行了,128MB 内存可以跑得很欢。
    qq1340691923
        7
    qq1340691923  
       2021-10-18 11:23:55 +08:00
    flutter + gofiber
    james2013
        8
    james2013  
       2021-10-18 11:26:47 +08:00   ❤️ 1
    Springboot 是一个很好的选择,缺点是资源占用相对较大
    不管是前期开发,还是后期扩展
    前几个月我试了下 Python 的 flask 作为 1 个项目的后台框架,开发起来速度慢,还挺恶心的.从数据库拿的实体还不能直接对外提供,而且像时间格式的需要手动转,用起来挺恶心的,不像 java1 个注解就自动转了.默认是放在 1 个文件里,也不好改
    blackboom
        9
    blackboom  
       2021-10-18 11:26:55 +08:00
    @dcalsky 哈哈,蛮有意思的。
    我也把这些大大小小的都尝试了些,有浅尝辄止,有的跑在生产线上。
    后面应该是回归到 SpringBoot 了。
    chendy
        10
    chendy  
       2021-10-18 11:27:40 +08:00
    springboot 一把梭
    写的时候大脑可以关机,无他,唯手熟尔
    没啥量的话 256 内存其实就能跑了
    peyppicp
        11
    peyppicp  
       2021-10-18 11:28:46 +08:00
    就减少服务器资源占用这一条, 就用 go 吧,不缓存数据的话内存占用也就几十 M
    BBCCBB
        12
    BBCCBB  
       2021-10-18 11:30:02 +08:00
    springboot, 如果引入的中间件不多, 其实内存也不多.
    anonydmer
        13
    anonydmer  
       2021-10-18 11:34:31 +08:00
    我会选择 spring boot,因为不会永远我一个人做,后面我需要找其他的小伙伴来维护;不做一锤子买卖。

    已经这样工作过若干项目了。
    windyboy
        14
    windyboy  
       2021-10-18 11:44:45 +08:00
    如果 java 的话 micronaut 比较好
    进一步的话,最好 kotlin micronaut

    但单纯讲后端的话,其实 go fiber 吧
    ch2
        15
    ch2  
       2021-10-18 11:47:28 +08:00
    减少服务器资源占用
    这一条单人开发就不要考虑了,加机器就能解决的问题你还要精力去搞定,一个人哪有那么多时间?
    rust
        16
    rust  
       2021-10-18 11:47:34 +08:00
    难得见到有人推荐 GoFiber 的,不容易啊
    wangkun025
        17
    wangkun025  
       2021-10-18 11:52:11 +08:00
    要不要试试 rails ?
    虽然对资源占用比较厉害,但开发效率高啊。
    akyle
        18
    akyle  
       2021-10-18 11:56:55 +08:00
    @dcalsky 转 Go 是出于什么考虑?自己比较熟悉吗?
    nicevar
        19
    nicevar  
       2021-10-18 11:57:33 +08:00
    我做的个人 app 还是比较多了,期间用过 Java/Python/Go 的各种框架,最终选择了 php 的 PhalApi,我都没系统学过 php,拿来就用,最大的优点就是节省时间
    lerp
        20
    lerp  
       2021-10-18 11:58:59 +08:00 via Android   ❤️ 1
    用 leancloud,服务器也省了
    janxin
        21
    janxin  
       2021-10-18 12:04:07 +08:00
    个人开发的时候单体应用最好,不是 Spring 一把梭么
    lbp0200
        22
    lbp0200  
       2021-10-18 12:12:20 +08:00
    1 、减少开发工作量——选择支持原编程的语言,例如 Ruby 、lisp,推荐 Ruby
    2 、减少服务器资源占用——支持编译成二进制的语言,例如 go 、C/C++、汇编,推荐 golang
    3 、少折腾——无法领会

    1 和 2,是一对矛盾体,如果是 Java 出身,忍受不了 golang 的语法,可以考虑 kotlin,然后 google 一下关键字“kotlin web framework”
    MakHoCheung
        23
    MakHoCheung  
       2021-10-18 12:14:02 +08:00
    Java && 服务资源占用少,那必须 QUARKUS
    sciel
        24
    sciel  
       2021-10-18 12:25:46 +08:00
    学 v 站~
    libook
        25
    libook  
       2021-10-18 12:29:09 +08:00   ❤️ 3
    技术选型是根据需求来的,没有一种架构方案适用于所有需求。

    要想开发效率高,首选自己熟悉的技术栈,能接受学习成本的话再考虑自己不熟悉的技术栈。另外技术栈轮子多少也是要考虑的。

    要想资源占用少,看具体要少到哪种程度,能撑到当前的主流技术,都有一些解决方案可以在一定程度上满足资源占用方面的要求,但追求极致只能去考虑一些 C++、Rust 之类的方案。

    技术架构都是有保质期的,因为在设计的时候仅能对需求做有限时长的预测,所以可以用自己最了解、最简单的方案来做,反正以后肯定会重构。

    我做 Web 全栈比较多,后端一开始需求都比较简单,极简的用 Node.js 原生 API 几行写个服务;想预留些扩展性就加个 Koa 框架,路由多了再考虑引入路由中间件,数据库操作多了再考虑引入个 ORM 或 ODM 。
    liuhan907
        26
    liuhan907  
       2021-10-18 13:20:04 +08:00
    单人开发我觉得你要是不排斥微软那就用 aspnetcore 一把梭,不喜欢微软那就 Go 一把梭。我觉得还是比 Java 舒服那么一点。
    semoon
        27
    semoon  
       2021-10-18 13:20:24 +08:00
    50 万用户以下的话,jfinal 单机零优化很稳。。。
    janxin
        28
    janxin  
       2021-10-18 13:22:25 +08:00
    另外 FastAPI 确实是很省心的,不如先说下各个方案遇到的问题再来看方案。毕竟对你来说选择自己熟悉的方案更合适。
    kennhuang
        29
    kennhuang  
       2021-10-18 14:04:27 +08:00 via iPhone
    Strapi?
    windyboy
        30
    windyboy  
       2021-10-18 14:08:45 +08:00
    哦,对
    其实后端一定要开发吗?
    现成的 headerless cms 不好吗?
    SorcererXW
        31
    SorcererXW  
       2021-10-18 14:33:49 +08:00
    Flutter + Go + gRPC
    zoharSoul
        32
    zoharSoul  
       2021-10-18 14:37:54 +08:00
    减少开发工作量
    减少服务器资源占用
    少折腾
    -----
    最适合这 3 个的是 PHP
    miao666
        33
    miao666  
       2021-10-18 15:15:31 +08:00
    懂 java 肯定 springboot 吧,配置简单,开箱即用
    cgpiao
        34
    cgpiao  
       2021-10-18 15:49:56 +08:00
    Java 只能是 spring 吧,kotlin 的话可以 ktor 。
    bnm965321
        35
    bnm965321  
       2021-10-18 16:57:13 +08:00
    @shuimugan 看官网半天没看明白是啥
    gaojiangouyu
        36
    gaojiangouyu  
       2021-10-18 17:19:50 +08:00
    ASP.NET Core ( Web ) + EF Core (数据库),在一些一般的场景下,这两者搭配的效率绝对完爆 java 生态了 golang 生态里面的绝大多数框架
    itning
        38
    itning  
       2021-10-18 17:33:40 +08:00
    flutter+spring boot
    shanechiu
        39
    shanechiu  
       2021-10-18 17:41:20 +08:00
    @janus77 Laravel 体验也是很好的
    shuimugan
        40
    shuimugan  
       2021-10-18 17:54:06 +08:00
    @bnm965321 我一开始看介绍还以为是一个类似 phpMyAdmin 的工具,但搭起来之后才发现真香,是一个被低估的低代码框架。
    clf
        41
    clf  
       2021-10-18 17:58:57 +08:00
    SpringBoot 基本啥都能做,啥都有解决方案。

    如果要前后端代码统一用 js/ts 的话,可以用 nodejs 后端,react/react-native 前端
    pengtdyd
        42
    pengtdyd  
       2021-10-18 18:00:58 +08:00
    如果是我自己选的话:spring cloud
    如果是推荐的话:flask
    如果是跨平台技术的 app 的话:nodejs
    如果追求高并发的话:gin
    如果想节省成本的话:serverless
    James369
        43
    James369  
       2021-10-18 18:06:23 +08:00
    @lbp0200 什么是原编程的语言
    JasperYanky
        44
    JasperYanky  
       2021-10-18 18:12:24 +08:00
    django
    fishDD
        45
    fishDD  
       2021-10-18 18:15:08 +08:00
    想要快,且稳定就 SpringBoot 吧,成熟的解决方案多(借用楼上,基本搜索引擎第一页都能找到答案)。缺点资源占用高,这玩意是 java 的通病啊。
    binhb
        46
    binhb  
       2021-10-18 18:44:49 +08:00 via iPhone
    typescript 前后端一把梭
    ReferenceE
        47
    ReferenceE  
       2021-10-18 18:46:26 +08:00 via Android
    无脑 cython 吧...自己写的话一般工作量不会很大
    TypeError
        48
    TypeError  
       2021-10-18 19:10:40 +08:00
    个人前台接口、页面渲染都包的话,django
    单纯 http 接口:gin
    pigspy
        49
    pigspy  
       2021-10-18 19:42:59 +08:00
    vertx+kotlin+gradle
    开发体验和开发 app 差不多
    liuxu
        50
    liuxu  
       2021-10-18 19:51:59 +08:00
    @janus77 被打和语言没关系吧
    boja
        51
    boja  
       2021-10-18 21:57:28 +08:00
    前后端都 js/ts,是适应性最强、共享代码最直接的方式。
    beginor
        52
    beginor  
       2021-10-18 22:26:37 +08:00 via Android
    没啥特殊需求的话后端可以用 nodejs,复杂一些的话可以考虑 .net core webapi, 就算是 py 也比 java 强
    ElmerZhang
        53
    ElmerZhang  
       2021-10-18 22:38:39 +08:00
    PHP/Node.JS/Go 都能满足你的需求
    horseInBlack
        54
    horseInBlack  
       2021-10-18 22:38:47 +08:00
    我不算全栈哈,主要是做前端的,之前做过 PHP,之后 Node.JS 也有练手的项目

    感觉上个人的话还是 serverless 比较合适一点,阿里云、腾讯云,包括 uniCloud 也有阿里云和腾讯云的版本
    有云数据库、云存储和云函数,基本上你网站的增删改查都足够了

    语法上是 JavaScript 的语法,用起来和 Node.JS 差不多,云数据库的查询语句语法也跟 MongoDB 差不多,都是相同的

    使用下来非常方便
    bybyte
        55
    bybyte  
       2021-10-18 22:42:04 +08:00
    云开发,开发效率快地一 P
    zxCoder
        56
    zxCoder  
       2021-10-18 22:59:00 +08:00
    .net6
    hdfg159
        57
    hdfg159  
       2021-10-18 23:09:20 +08:00 via Android
    如果熟悉 spring boot 肯定选 spring boot 啥都有,拿来就开发一把梭,就是占用资源多,轻量级推荐 vertx,复杂起来肯定不如 spring 顺手
    mywaiting
        58
    mywaiting  
       2021-10-19 00:25:55 +08:00
    如果不单纯选择 Java,可以投奔 Python 用 Django,开发速度快,坑少,稳定,性能也过得去
    dayeye2006199
        59
    dayeye2006199  
       2021-10-19 01:20:47 +08:00
    firebase 把,没有比这更快的了。。都不用写后端,只用管前端就行了。
    kinge
        60
    kinge  
       2021-10-19 02:45:14 +08:00
    单人 solo 时最好的就是 php laravel 或者 ruby ror ,开发效率比 java 非常高,后端前端一把梭,两年独立开发建议
    js8510
        61
    js8510  
       2021-10-19 03:40:04 +08:00
    Python + flask/django. FastAPI 的问题是是暂时 community 不太成熟。比较有经验,有信心去 stackoverflow 自问自答的朋友可以尝试 fastAPI
    huxiweng
        62
    huxiweng  
       2021-10-19 09:15:12 +08:00
    ACTFramework
    ArJun
        63
    ArJun  
       2021-10-19 09:23:48 +08:00
    如果为了省资源推荐 GO,开发效率也很快,1h1g 就能跑的很舒畅了
    ixx
        64
    ixx  
       2021-10-19 09:33:07 +08:00
    第三条『少折腾』那就得看你哪个用的熟了 一般来说用的越熟的越好
    konakona
        65
    konakona  
       2021-10-19 09:56:19 +08:00
    如果一定要在 java 里选的话,推荐 springboot 框架,很容易上手。

    如果要选一个新的语言来扩展思维的话,我会推荐 go+go gin (开发框架)。

    如果你非要很快的话,之前有个 js 基础,上 nodejs,或转投 php 怀抱用 laravel 或者 thinkphp 。
    encro
        66
    encro  
       2021-10-19 10:05:18 +08:00
    @shuimugan

    9.0 居然用 typescript 开发了,原来是用 PHP+Symfony 的。
    chenzheyu
        67
    chenzheyu  
       2021-10-19 10:28:38 +08:00
    单人开发最效率的应该是 laravel
    ychost
        68
    ychost  
       2021-10-19 11:05:39 +08:00
    建议用 node.js ,配合 serverless,然后负载均衡啥的都不用考虑了
    pelloz
        69
    pelloz  
       2021-10-19 11:09:29 +08:00
    选你最熟悉的语言和框架就好,减少工作量和犯错的可能。个人 solo 开发的 app 一般很少会遇到性能瓶颈,大多数是对语言或框架理解不到位导致的 BUG 。
    macha
        70
    macha  
       2021-10-19 11:13:16 +08:00
    nodejs 单机裸奔差不多了。连 NGINX 都不用装。
    Kamiyu0087
        71
    Kamiyu0087  
       2021-10-19 11:21:19 +08:00
    我个人觉得 ktor 还蛮好用的
    不过 Java 上 SpringBoot 肯定没错的
    KamilZhang
        72
    KamilZhang  
       2021-10-19 14:53:42 +08:00 via Android
    @mht 满离😂😂😂
    zzzmh
        73
    zzzmh  
       2021-10-19 15:00:48 +08:00
    SpringBoot 不费劲
    至于内存,首先不要的依赖就去去掉
    然后用 docker 的 tomcat(限制最大内存和使用 swap) jdk8 openj9 tomcat8.5 打开 nio2 就美滋滋
    superchijinpeng
        74
    superchijinpeng  
       2021-10-19 15:35:22 +08:00
    Spring Boot
    solos
        75
    solos  
       2021-10-19 15:40:49 +08:00
    一个人选 go 啊 选什么 java 、php
    janda
        76
    janda  
       2021-10-19 16:23:38 +08:00
    我是做 java 开发的、但是我推荐 GO
    wizzer
        77
    wizzer  
       2021-10-19 16:33:54 +08:00
    unco020511
        78
    unco020511  
       2021-10-19 16:52:24 +08:00
    如果语言限定 java,应该 springboot 是成本最小的,资源丰富,生态良好
    xuanbg
        79
    xuanbg  
       2021-10-19 16:57:49 +08:00
    楼主要求除开 Java,而我用的就是 Java 。这……好吧,说正经的,用你最熟悉最成熟的技术栈才是正经。软件开发没有捷径,到头来你会发现最笨的办法才是最快的。

    因为我有成熟的、完善的基础组件 /基础服务,所以我开发任何功能都只需要写几行前端和后端的业务代码就行。就这几行业务代码吧,我还都是从写过的项目里面复制过来稍微改吧改吧的,最大的工作量是把 UI 给调漂亮点。至于用什么语言,你觉得这会是一个问题吗?
    furlxy
        80
    furlxy  
       2021-10-19 19:35:46 +08:00
    php 或 nodejs 不更好吗
    darkengine
        81
    darkengine  
       2021-10-19 19:57:43 +08:00
    @xuanbg 你理解错了,他首选就是 Java 。
    AcFei
        82
    AcFei  
       2021-10-19 20:41:31 +08:00
    ASP.NET Core,

    想来 Java 选手上手 C#应该也不难
    ajaxfunction
        83
    ajaxfunction  
       2021-10-19 22:31:31 +08:00
    喜欢 java 那就是 jfinal,毕竟以极速开发著称。
    喜欢 php 就是 thinkPHP,外包公司的半边天
    zachlhb
        84
    zachlhb  
       2021-10-20 09:06:38 +08:00 via iPhone
    后端熟悉啥就用啥啊,有什么区别的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.