Language agnostic 谁负责检查数据的有效性?
我不清楚是来电者还是被来电者有责任检查数据的合法性 被调用方是否应该检查传入的参数是否不应为Language agnostic 谁负责检查数据的有效性?,language-agnostic,Language Agnostic,我不清楚是来电者还是被来电者有责任检查数据的合法性 被调用方是否应该检查传入的参数是否不应为null,并满足一些其他要求,以便被调用方方法能够正常、成功地执行,并捕获任何潜在的异常?或者这是调用方的责任?用户端(客户端)和提供者端(API)验证 客户应该这样做,因为这意味着更好的体验。例如,为什么网络往返只是为了被告知您有一个坏的文本字段 供应商应做到这一点,因为他们不应该信任客户(例如XSS和中间人攻击)。你怎么知道请求没有被拦截?验证一切 有几个级别的有效: 所有必填字段均存在,格式正确。这
null
,并满足一些其他要求,以便被调用方方法能够正常、成功地执行,并捕获任何潜在的异常?或者这是调用方的责任?用户端(客户端)和提供者端(API)验证
客户应该这样做,因为这意味着更好的体验。例如,为什么网络往返只是为了被告知您有一个坏的文本字段
供应商应做到这一点,因为他们不应该信任客户(例如XSS和中间人攻击)。你怎么知道请求没有被拦截?验证一切
有几个级别的有效:
只有提供者方可以执行#2和#3。验证数据是被调用方的责任。这是因为只有被调用方知道什么是有效的。这也是一个很好的安全实践。对于API,被调用方应始终进行适当的验证,并对无效数据抛出描述性异常 对于任何具有IO开销的客户端,客户端也应该进行基本验证…很好。。。视情况而定 如果您能确定如何处理被叫方内部的无效数据,那么就在那里进行处理 如果您不确定(例如,因为您的方法非常通用,并且在一些不同的地方和方式中使用),那么让调用者决定 例如,假设一个DAO方法必须检索某个实体,但您没有找到它。你能决定是否抛出一个异常,也许回滚一个交易,或者只是认为它可以吗?
在这种情况下,完全由调用方决定如何处理它。它也需要位于客户端和服务器端(被调用方和调用方) 客户:
谢谢打电话的人和被叫人之间应该有一种叫做合同的东西。如果输入数据在指定的值中,被调用方确保它做了正确的事情。他仍然应该根据这些规范检查输入数据是否正确。在Java中,您可以抛出一个
InvalidArgumentException
调用方还应在合同规范范围内工作。他是否应该检查他移交的数据取决于具体情况。理想情况下,您应该以一种不需要检查的方式对调用方进行编程,因为您确信数据的有效性。如果是用户输入,则无法确定其是否有效。在这种情况下,你应该检查它。如果你不检查它,你至少必须处理异常并做出相应的反应。这都是关于“合同”的。这是一个被调用方,它决定哪些参数是好的或不好的。
您可以在文档中输入“null”参数无效,然后抛出NullPointerException
或InvalidArgumentException
就可以了
如果返回null参数的结果有意义,请在文档中说明。通常这种情况是一种糟糕的设计-创建一个参数较少的重写方法,而不是接受null
只记得抛出描述性异常。根据经验法则:
NullPointerException
或InvalidArgumentException
)getpermissionsfourser(Integer userId)
调用方传递userId
不知道是否存在这样的用户,但它是非空整数。您的方法可能会返回权限列表或调用UserNotFoundException
。它可能是已检查的异常被叫方有责任检查其接收的数据是否有效。未能执行此任务几乎肯定会导致软件不可靠,并使您面临潜在的安全问题 话虽如此,如果您控制了客户机(调用方)代码,那么您还应该在那里至少执行一些验证,因为这将带来更好的总体体验
一般来说,尽可能早地发现数据中的问题,这样会减少后续工作中的麻烦。我将从不同的角度来看待这个问题。在包含的应用程序中工作时,调用者和被调用者都在同一代码中。然后,被调用方的合同所要求的任何验证都应由被调用方完成 你写了一首赋