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

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

  •  
  •   b0644170fc · 2020-09-08 22:25:29 +08:00 · 2684 次点击
    这是一个创建于 1540 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个 sdk 的主要作用就是帮助客户方便的调用公司的对外 api,做些参数签名的工作。但是需要区分是否是生产环境,如果是用户的生产环境就调用公司生产环境的 api,否则就调用公司测试环境的 api 。

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

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

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

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

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


    容易出错的地方,不要吝啬,多打日志,客户多了,什么样的程序员你都会见到的。
    liudaolunhuibl
        15
    liudaolunhuibl  
       2020-09-14 16:28:17 +08:00
    1 、使用者在 application 文件里自己配置,你们读配置文件
    2 、配置参数在启动参数里你们读取启动参数啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:04 · PVG 21:04 · LAX 05:04 · JFK 08:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.