V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gongbaodd
V2EX  ›  问与答

一个关于 js 给 RESTful API 带来 undefined 的问题

  •  1
     
  •   gongbaodd · 2018-09-19 10:43:08 +08:00 · 1585 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题主今年从前端转型到后端,打算干几年 node 扩充下经验。本来是想找个 graphQL 的工作,可惜国内大部分能做到 RESTful 就很不错了。工作没几天就碰到了这样的问题。

    定义一个 POST 接口,如果某个字段是 optional,那应该怎么做

    1. 直接定义它是 optional, 调用接口的时候这个字段可以不传
    2. 定义它是 required & nullable,调用这个接口的时候这个字段可以传 null
    3. 定义它是 required & [default_value],调用这个接口的时候这个字段可以不传,但是 model 层要做兼容

    方案一,会接到很多undefined,对其它语言交互不好 方案二,都是 required,要多传很多 null 方案三,要加好多逻辑(我比较懒)

    最后我们决定,字段可以不传,在 model 层做兼容,不存在的字段处理成 null

    好了,问题来了:

    1. 大家在生产环境是怎么处理这种问题的?
    2. 相信不少人遇到过这种问题,有没有什么现成的中间件能处理这种问题呢?
    8 条回复    2018-09-19 17:00:29 +08:00
    agagega
        1
    agagega  
       2018-09-19 12:26:21 +08:00 via iPad
    学习下 grpc 的做法?
    lovedebug
        2
    lovedebug  
       2018-09-19 12:29:48 +08:00
    最好设置成可以传也可以不传,没有传的在 model 层直接映射成默认值了
    azh7138m
        3
    azh7138m  
       2018-09-19 12:30:17 +08:00 via Android
    跨语言强类型接口定义
    https://developers.google.com/protocol-buffers/
    大概这种东西吗?
    gongbaodd
        4
    gongbaodd  
    OP
       2018-09-19 14:39:56 +08:00
    @agagega 感觉如果用上了 grpc,要推动所有团队使用,成本好高啊,感觉这也是 graphql 的问题
    gongbaodd
        5
    gongbaodd  
    OP
       2018-09-19 14:42:52 +08:00
    @lovedebug 嗯,目前我们也是类似的做法,只是觉得既然能用 ajv 做 JSON 校验,像这种填充初始值的任务就应该不需要那么多人工
    gongbaodd
        6
    gongbaodd  
    OP
       2018-09-19 14:44:19 +08:00
    @azh7138m 有没有办法让交互还是 JSON,但是我们收到的数据能够通过 JSONSchema 自动处理下
    lovedebug
        7
    lovedebug  
       2018-09-19 15:12:36 +08:00
    @gongbaodd 考虑有 JSONP 做一些验证?
    azh7138m
        8
    azh7138m  
       2018-09-19 17:00:29 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2450 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.