需要对外提供一个 Java sdk,现在碰到需要区分生产环境和非生产环境的情况有些搞不定 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
b0644170fc
V2EX    Java

需要对外提供一个 Java sdk,现在碰到需要区分生产环境和非生产环境的情况有些搞不定

  •  
  •   b0644170fc Sep 8, 2020 3140 views
    This topic created in 2070 days ago, the information mentioned may be changed or developed.
    这个 sdk 的主要作用就是帮助客户方便的调用公司的对外 api,做些参数签名的工作。但是需要区分是否是生产环境,如果是用户的生产环境就调用公司生产环境的 api,否则就调用公司测试环境的 api 。

    我能想到的就是通过让用户在方法中传入参数来判断是否生产环境,但是这样感觉不好。

    我想达到类似 spring 可以直接判断 env 的程度,那么是要让用户在 classpath 下加某个固定的 properties,我的 sdk 去读取 properties 这样吗?还有咩有其它方法?
    15 replies    2020-09-14 16:28:17 +08:00
    hallDrawnel
        1
    hallDrawnel  
       Sep 8, 2020
    这应该是他们的环境通过配置不同的域名、名字、ip:port 来做,而不是改你的实现吧。
    miv
        2
    miv  
       Sep 8, 2020 via iPhone
    读取环境变量,做区分就好,就像 win 系统里面那些环境变量。启动 SDK 前,需要读取预设的环境变量进行判断
    itechify
        3
    itechify  
    PRO
       Sep 8, 2020 via Android
    根据环境,请求地址不同,路由到对应的环境网关
    b0644170fc
        4
    b0644170fc  
    OP
       Sep 9, 2020
    @hallDrawnel 现在就是想在我的 sdk 上来区分,而不需要用户自己手动设置
    supermoonie
        5
    supermoonie  
       Sep 9, 2020 via iPhone
    楼主真是操碎了心
    nutting
        6
    nutting  
       Sep 9, 2020   1
    你做你就是背锅啊,出问题说不清。肯定是要对方来区分。
    nutting
        7
    nutting  
       Sep 9, 2020
    换个说法,如果对方那边很清晰,他改一下不是很容易吗。如果很复杂,需要你根据 ip 判断什么的,那就很容易出差错。
    foam
        8
    foam  
       Sep 9, 2020 via Android   1
    过度封装警告。
    某个参数是否要暴露给业务,要看业务是否需要关心该参数。对于 sdk 环境,业务明显需要关心。1,业务可以在他的测试环境调用你的生产环境,用于测试。2,业务只需要关注他传入的参数,就可以明确知道此时 SDK 身处哪个环境。而不用担心改了哪些因变量,导致环境发生了变化。

    ps. 更好的做法应该是不区分环境,让他们都调用到你们的生产环境去。当然,如果涉及到金钱等敏感资产的业务,让业务端传参,让他知道是否身处沙箱不是很正常吗。
    chocotan
        9
    chocotan  
       Sep 9, 2020
    我们接口地址是让调用方自己传的,接口文档中写清楚多个环境的接口地址。
    Oktfolio
        10
    Oktfolio  
       Sep 9, 2020
    SDK,创建对象的时候就指定个环境啊。或者 autoconfiguration,在 application.properties/application.yaml 配置。这有什么问题?
    securityCoding
        11
    securityCoding  
       Sep 9, 2020
    你关心环境干嘛....没见过这样的 sdk 哦
    zhady009
        12
    zhady009  
       Sep 9, 2020
    根据自己分发的 clientId 来区分,在 api 网关转发
    wysnylc
        13
    wysnylc  
       Sep 9, 2020
    sdk 封装业务那就不叫 sdk
    dogfeet
        14
    dogfeet  
       Sep 9, 2020   1
    接过大量 SDK,也开发过一些。建议所谓测试模式正式模式,都做到生成环境中去。

    正规一点的 SDK 常见的做法是:为客户分配参数,然后客户的应用默认是 Test mode.

    客户正常接入(接入过程中会有很多垃圾数据脏数据),等到正式接入完成,你们再后台验收,查看关键接口调用与数据是否正常,验收正常,将 Test mode 修改为正式模式。


    容易出错的地方,不要吝啬,多打日志,客户多了,什么样的程序员你都会见到的。
    liudaolunhuibl
        15
    liudaolunhuibl  
       Sep 14, 2020
    1 、使用者在 application 文件里自己配置,你们读配置文件
    2 、配置参数在启动参数里你们读取启动参数啊
    About     Help     Advertise     Blog     API     FAQ     Solana     6100 Oline   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 89ms UTC 06:25 PVG 14:25 LAX 23:25 JFK 02:25
    Do have faith in what you're doing.
    ubao msn 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