一个接口设计问题,请求返回数据有枚举值时,应该返回枚举还是对应的值呢?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lkathous
V2EX    程序员

一个接口设计问题,请求返回数据有枚举值时,应该返回枚举还是对应的值呢??

  •  1
     
  •   lkathous 2018-05-21 10:51:45 +08:00 3660 次点击
    这是一个创建于 2783 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接抛出问题:

    假设有个页面要展示一个商品列表。
    商品包含名称,类型,价格三个属性。其中类型在数据库中保存的是整形,1 代表电器,2 代表服装,3 代表食品...

    后端使用了微服务架构,请求过程是这样的:
    web 请求提供 web 接口的服务 A,服务 A 再请求管理商品的服务 B
    web -> 服务 A -> 服务 B

    web 要展示商品类型的具体值,但是服务 B 从数据库查询出来的商品类型是枚举
    那么问题来了,我应该在哪一个层面将枚举转换成具体值,在 web 还是服务 A 还是服务 B。

    我以前是认为一律在展示层做枚举的转换最好(因为我是写后端的,省事)。但是如果客户端是苹果 App,因为 app 不能随时修改,在枚举值有变化时就会出问题。
    看同事的代码在哪一层转换的都有,但是我就是纠结,我希望有个规范。

    8 条回复    2018-05-21 18:38:07 +08:00
    prasanta
        1
    prasanta  
       2018-05-21 11:01:35 +08:00 via Android
    都需要啊
    009694
        2
    009694  
       2018-05-21 11:03:54 +08:00 via iPhone
    返回原始值的同时返回枚举列表啊
    lkathous
        3
    lkathous  
    OP
       2018-05-21 11:26:50 +08:00
    @prasanta 都需要,怎么理解?如果服务 B 转了返回给服务 A,服务 A 就不需要转啦
    lkathous
        4
    lkathous  
    OP
       2018-05-21 11:31:28 +08:00
    @009694 好有道理!!没想到这点
    拓展一下,如果有多个客户端然后不同客户端要求相同的枚举展示不同的值咋办
    USNaWen
        5
    USNaWen  
       2018-05-21 11:33:31 +08:00
    如果你的枚举列表要变动,那就每次都返回枚举+值。
    如果写死 or 有同步机制,可以只返回值。(务必写好文档不然维护会哭的。)
    不然就放在 A,web 和客户端没法实时修改,B 涉及出入库不好动。
    USNaWen
        6
    USNaWen  
       2018-05-21 11:34:31 +08:00
    @lkathous。。那啥,都不同展示值了不写个分类处理?
        7
    lkathous  
    OP
       2018-05-21 12:13:03 +08:00
    @USNaWen 嗯嗯嗯,回答得好详细
    009694
        8
    009694  
       2018-05-21 18:38:07 +08:00 via iPhone
    @lkathous 楼上回复已经足够了。 。 不过不是所有时候都适合把锅都甩给 app
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2519 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 12:09 PVG 20:09 LAX 04:09 JFK 07:09
    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