应用程序允许其他应用程序获取某个地区的天气信息。该应用程序实现了
REST API
和 JSON
对象来表示资源,用户通过请求中 JSON 对象中的 region
属性来指示区域。
它的工作方式如下: 如果请求中未指示该区域,则表示该属性不存在于
JSON
中或者具有 null
值,应用程序假定区域为“田纳西州”(某些默认区域)。这是一个好的做法吗?这样做对于使 region
成为必需属性并明确指示区域有什么缺点?
我遇到了在请求中不明确区域值的不便: 如果用户(这里的用户是应用程序)侧的错误导致用户根本不发送该区域,则该用户可能正在查询天气,认为其与其他区域有关。因此,明确该值可确保当用户假设正在咨询另一个地区的天气时,此类错误不会被掩盖。
这是一个好的做法吗?
没关系。
引入新消息时创建“必填”字段非常简单。
将“必填”字段引入到已发布的模式中是一团糟,因为你已经有很多生产者/消费者在野外耗尽,所有这些都需要更改。
在现有模式必然意味着该新字段具有相同值的情况下,引入具有默认值的可选字段允许您扩展消息的含义以覆盖新区域,同时破坏现有实现。
想象一条描述地址的消息。如今,所有感兴趣的地址都位于“地球”上;通过添加“行星”字段来明确这一点是浪费每个人的时间。但几年后,我们什么时候开始收集其他星球的地址?我们需要那个字段。使其成为默认值“Earth”的可选值,使我们能够在不破坏任何现有实现的情况下包含新的业务案例。
David Orchard 撰写了有关 XML 文档的这些问题的文章; 可扩展性、XML 词汇表和 XML 模式可能是一个很好的介绍。