我的印象是,到现在为止,每个人都同意这句话是错误的。但是我最近看到了这个答案,其中有一个“宽容”的评论被投票了137次(截止到今天)。
在我看来,宽容浏览器的原因是HTML和其他一些Web标准在几年前就完全混乱的直接原因,并且直到最近才开始从该混乱中明确体现出来。我的看法是,宽容您所接受的东西会导致这种情况。
格言的第二部分是“以静默方式丢弃错误的输入,除非规范要求,否则不返回错误消息”,这使人感到不快。任何在某些问题无声地失败时撞墙的程序员都会知道我的意思。
那么,我对此完全不对吗?我的程序是否应该宽容它所接受的内容并默默地吞下错误?还是我误解了这意味着什么?
最初的问题是“程序”,我对此表示赞同。宽大处理程序是有意义的。但是,我真正的意思是API:暴露给其他程序而非人的接口。HTTP就是一个例子。该协议是仅其他程序使用的接口。人们从不直接提供诸如“ If-Modified-Since”之类的标题中的日期。
因此,问题是:除标准实际要求的格式外,实施一项标准的服务器是否应宽松,并允许采用其他几种格式的日期?我认为,“宽容”应该适用于这种情况,而不是人机界面。
如果服务器是宽松的,这似乎是一个整体的改进,但是我认为在实践中,它只会导致客户端实现最终依赖宽大处理,因此无法以稍有不同的方式与另一台宽松的服务器一起工作。
那么,公开某些API的服务器应该宽容还是一个非常糟糕的主意?
现在开始宽大处理用户输入。考虑使用YouTrack(错误跟踪软件)。它使用的文字输入语言让人联想到Markdown。除了“宽大”。例如写
- foo
- bar
- baz
是不是创建一个项目符号列表的文档的方式,但它的工作。因此,它最终在我们的内部Bugtracker中被大量使用。下一个版本问世了,这个宽大的功能开始工作时略有不同,打破了一堆(误用)此(非)功能的列表。当然,创建项目符号列表的文档化方法仍然有效。
那么,我的软件应该宽容接受的用户输入吗?