前后端共享的常量如何统一管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
movq
V2EX    程序员

前后端共享的常量如何统一管理

  •  
  •   movq 2024-04-01 20:35:52 +08:00 3311 次点击
    这是一个创建于 558 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端 JS ,后端 Java ,使用共享的常量的最佳操作是什么

    如果手动同步的话,例如 Java 里面新加了一个常量字符串,然后手动往 JS 代码里面加一个,感觉很麻烦,违反了 DRY 原则。以后在 Java 端改了这个常量,就得去 JS 端改。如果忘了改,就容易出 BUG

    22 条回复    2024-04-03 15:33:57 +08:00
    Mocker1106
        1
    Mocker1106  
       2024-04-01 20:39:41 +08:00   1
    Swagger (OpenAPI) 满足你的需求吗?

    在 Java 后端通过编写注释自动生成 Swagger.json ,前端通过 swagger-typescript-api 生成 type-safe 的 http client

    https://github.com/acacode/swagger-typescript-api
    Xu3Xan89YsA7oP64
        2
    Xu3Xan89YsA7oP64  
       2024-04-01 20:41:04 +08:00
    可以考虑卷一个通用配置平台
    前端经常改的文案也可以用,让产品自己去改
    drymonfidelia
        3
    drymonfidelia  
       2024-04-01 20:51:37 +08:00   1
    弄个 /api/constants?locale=en_US 前端 onInit 的时候加载到 sessionStorage
    07aPzknB16ui9Cp3
        4
    07aPzknB16ui9Cp3  
       2024-04-01 20:54:26 +08:00
    大厂都有配置中心这种东西,中小企业也可以学习一下
    june4
        5
    june4  
       2024-04-01 21:03:03 +08:00
    极简办法是用 json 写常量文件,然后写个小脚本生成 java 常量源码文件
    iorilu
        6
    iorilu  
       2024-04-01 21:20:28 +08:00
    丢到 redis, 前后端都能访问
    lscho
        7
    lscho  
       2024-04-01 21:49:02 +08:00
    配置中心,前后端都可以拉取
    ccqy66
        8
    ccqy66  
       2024-04-01 21:57:26 +08:00 via iPhone
    有一种事件是通过 idl ,不过前提是前后端通过 idl 来定义协议
    SethShi
        9
    SethShi  
       2024-04-01 22:08:36 +08:00
    楼上的各位应该是理解出问题了, 是要常量, 而不是要共享配置.
    比如新加一个 MAX_SIZE=1000, 多端共享, 配置中心是能共享 1000, 那 MAX_SIZE 不还得写吗
    你这个无非就是用一种 DSL 生成就好了, 说起 DSL 就不得不说 阿里云 OpenAPI SDK 你可以去看看
    zjsxwc
        10
    zjsxwc  
       2024-04-01 22:11:02 +08:00 via Android
    方法 1. 在服务端发布版本时,把所有常量与服务端的版本号一起发布,通过接口提供给前端使用。
    方法 2. 在编译打包前端代码时,就直接打包进前端代码。
    nkloveni
        11
    nkloveni  
       2024-04-01 22:41:04 +08:00
    @seth19960929 楼上应该是理解出问题了, 是要共享配置,而不是光要常量,lz 都说了要改配置同步,要不然出 bug 了
    lasuar
        12
    lasuar  
       2024-04-01 22:49:39 +08:00
    提供接口:/GetShareVarSetting 给前后端调用,通过配置中心或管理后台修改。
    bianhui
        13
    bianhui  
       2024-04-02 08:29:08 +08:00
    前端,后端编译的时候,去配置中心拉取配置文件。
    lovelylain
        14
    lovelylain  
       2024-04-02 08:42:21 +08:00 via Android
    protobuf enum
    zhy0216
        15
    zhy0216  
       2024-04-02 08:44:56 +08:00 via Android
    都用 ts
    然后 monorepo
    unco020511
        16
    unco020511  
       2024-04-02 10:01:54 +08:00
    当然是配置中心
    wangtian2020
        17
    wangtian2020  
       2024-04-02 10:02:01 +08:00
    共同编辑个 json 文件呗
    waytodelay
        18
    waytodelay  
       2024-04-02 10:51:43 +08:00
    数据字典...
    Habyss
        19
    Habyss  
       2024-04-02 11:04:38 +08:00
    这不就是几乎每个系统都会有的字典/配置表吗?
    JaysonHope
        20
    JaysonHope  
       2024-04-02 15:35:18 +08:00
    不考虑安全的情况下,我想到简单的方式是写到 cookie 里。
    mikasa1024
        21
    mikasa1024  
       2024-04-03 13:44:48 +08:00
    以前也思考过类似的情况,正文中描述的应该是两个问题

    1. 配置自动生成静态文件,因为开发期间需要变量名提示。楼上提到的配置中心、接口、字典表不符合这条要求,因为这些都是运行过程中才知道具体的变量名称

    2. 配置变量值同步,这一条的意思是只改一个地方其他端自动同步

    第二个问题好处理,但是两个问题结合起来感觉没有什么好的方案


    一楼提到的这个东西不错,可以解决 api 中参数返回值的前后端同步
    lizy0329
        22
    lizy0329  
       2024-04-03 15:33:57 +08:00
    @wuzzispacelake 有开源 self-host 推荐 吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     999 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:46 PVG 02:46 LAX 11:46 JFK 14:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86