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

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

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

    直接抛出问题:

    假设有个页面要展示一个商品列表。
    商品包含名称,类型,价格三个属性。其中类型在数据库中保存的是整形,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。。那啥,都不同展示值了不写个分类处理?
    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   ·   我们的愿景   ·   实用小工具   ·   3253 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 11:49 · PVG 19:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.