代码之家  ›  专栏  ›  技术社区  ›  Tomasz Mularczyk

处理API响应中缺少的属性

  •  0
  • Tomasz Mularczyk  · 技术社区  · 6 年前

    如何处理后端api响应中丢失的属性?

    我有一个react应用程序,我从后端获取一些数据。然后我使用这些数据来呈现一些元素,并根据响应中的值处理一些操作。但可能会发生某些值丢失的情况。 然后,我是否应该始终以这样的方式验证api响应:它将默认值分配给缺少的属性,如:

    import { get } from 'lodash'
    
    
    const { data } = await axios.get(...);
    
    const dataForFrontend = {
      id: get(data, 'id', 'N/A'),
      name: get(data, 'name', 'N/A'),
      lastName: get(data, 'lastName', 'N/A'),
      email: {
        address: get(data, 'email.address', 'N/A'),
        active: get(data, 'email.active', false),
      }
    }
    

    (如果 data 没有 email field和我立刻使用了它,然后fronted app很可能会与“cannot read property”断开 address 未定义的“)

    …或者我应该用 数据 马上假设它是有效的,否则就意味着后端坏了,通过分配默认值,我把问题掩盖了(我的意思是它稍后会出现一些其他的错误,例如试图将100乘以 N/A )?

    我想知道正确的方法-验证或假设它必须是有效的?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Matt Morgan    6 年前

    如何处理这完全取决于你的业务需求和你愿意为处理这些案件付出的努力。

    我同意你回来是个坏主意 N/A 如果你的前端应用程序可能会尝试将字符串乘以100。

    最多的工作,最好的用户体验

    听起来您的数据库或api中有其他合法的条目,这些条目可能缺少属性。在这种情况下,您可能会尽最大努力遵循“优雅降级”策略,在这种策略中,前端逻辑准备处理丢失的属性,可能要求在对该记录执行任何进一步的工作之前填充这些丢失的属性。

    减少工作,仍然向用户传达问题

    下一个最好的选择可能是立即验证传入的数据,并在请求失败时抛出一个错误,该错误将提供给用户有用的信息。

    最坏的方法

    在这三种选择中,掩盖不完整的记录似乎是最糟糕的选择。