Validation 验证来自第三方的传入数据:只接受严格需要的数据还是容忍更多?

Validation 验证来自第三方的传入数据:只接受严格需要的数据还是容忍更多?,validation,language-agnostic,Validation,Language Agnostic,我必须处理来自第三方的一些数据输入。它实际上是从字符串到字符串的映射,为了完成我的工作,我需要定义一些键,它们的值必须是预期的类型 问题是:我是否应该接受我不需要的其他钥匙,并且不干扰我的程序的正常运行 例如,假设这正是我在参数中所需要的,我们假设一个传入的json: {"a": "hello", "b": "world"} 但是,我应该接受这一有效输入吗 {"a": "hello", "b": "world", "c": "patata"} 如果我很严格,我提供的服务可能不那么友

我必须处理来自第三方的一些数据输入。它实际上是从字符串到字符串的映射,为了完成我的工作,我需要定义一些键,它们的值必须是预期的类型

问题是:我是否应该接受我不需要的其他钥匙,并且不干扰我的程序的正常运行

例如,假设这正是我在参数中所需要的,我们假设一个传入的json:

{"a": "hello",
 "b": "world"}
但是,我应该接受这一有效输入吗

{"a": "hello", 
 "b": "world", 
 "c": "patata"}
如果我很严格,我提供的服务可能不那么友好,从某种意义上说,我可能会阻止一些用户重用他们的一些现有代码,他们必须为我调整它。我认为这是一个薄弱的论点。 另一方面,如果对我所接受的内容不严格,当我的一些同事试图调试一些未来可能出现的问题时,可能会导致混乱。我也不认为这是一个非常有力的论点。
在我看来,严格是更好的方式。它为最终用户提供了更清晰的文档。重用现有代码不是问题——它只需要添加简单的过滤器。 你们队也一样。维护输入非常有限的模块/功能要容易得多。因为更容易理解所有可能的流


但是一些框架默认提供了第二个选项,需要添加更多的代码才能获得第二个选项。当您向它添加静态类型时,它仍然可以为其他程序员提供足够好的文档。因此,在实践中,您经常会遇到第二种方法

真正的问题是:两种格式是否都包含有效数据?换句话说:您是否只对任何包含键a和键b的JSON感兴趣,或者您是否以指定格式解析JSON,其中可能包含您根本不感兴趣的其他键,或者您是否以指定格式解析JSON,其中必须只包含您感兴趣的键?正如我所解释的,我只需要定义a和b。如果定义了其他内容,例如:c:patata,我的程序就会忽略它。所以这两种形式对于我的代码都是可以接受的。问题恰恰是:我应该吞咽并忽略吗?或者只是拒绝,如果不是100%,我需要什么?让我这样说:你对任何包含关键ID的JSON感到满意吗?如果是,请忽略其他键。如果没有,严格要求并拒绝。简而言之:如果您可以处理任何具有所需键的JSON,不管它们是否包含对您没有意义的键,那么忽略其他键。否则要严格。我可以用无关的键完美地处理数据输入。这不是问题。。。问题是,这是一种好的做法吗?吞咽vs拒绝及其可能的未来后果不必要的海量数据,可能会给其他开发人员带来困惑等。感谢您的评论: