私は、今ではこの格言が間違いであることに誰もが同意するという印象を受けていました。しかし、私は最近、「寛大な」コメントが137回(今日現在)支持されているこの回答を見ました。
私の意見では、ブラウザが受け入れるものに対する寛大さが、HTMLや他のいくつかのWeb標準が数年前にあった完全な混乱の直接の原因であり、ごく最近その混乱から適切に結晶化し始めました。私はそれを見る方法、あなたが受け入れるものの中に寛大されますこれにつながります。
格言の2番目の部分は、「仕様で要求されていない限り、エラーメッセージを返さずにエラーのある入力を静かに破棄する」ことです。何かが静かに失敗したときに頭を壁にぶつけたプログラマーは、私の言っていることを知っているでしょう。
だから、私はこれについて完全に間違っていますか?私のプログラムは、受け入れるものに寛容で、静かにエラーを飲み込むべきですか?または、これが意味するものを誤って解釈していますか?
元の質問は「プログラム」でしたが、それについてはみんなの意見を取り入れています。プログラムが寛大であることは理にかなっています。しかし、私が本当に意味したのはAPIです。人々ではなく、他のプログラムに公開されるインターフェースです。HTTPはその一例です。プロトコルは、他のプログラムのみが使用するインターフェースです。「If-Modified-Since」のようなヘッダーに入る日付を直接提供することはありません。
したがって、問題は次のとおりです。標準を実装しているサーバーは寛大で、標準で実際に必要なものに加えて、いくつかの他の形式の日付を許可する必要がありますか?「寛大になる」というのは、ヒューマンインターフェースではなく、この状況に当てはまると思われます。
サーバーが寛大な場合、それは全体的な改善のように思えるかもしれませんが、実際には、寛容に依存するクライアント実装につながるため、わずかに異なる方法で寛大な別のサーバーで動作することに失敗すると思います。
だから、いくつかのAPIを公開するサーバーは寛大である必要がありますか、それとも非常に悪い考えですか?
次に、ユーザー入力の緩やかな処理について説明します。YouTrack(バグ追跡ソフトウェア)を検討してください。Markdownを連想させる言語をテキスト入力に使用します。「寛大」であることを除いて。たとえば、書く
- foo
- bar
- baz
でない箇条書きリストを作成するための文書化の方法、そしてまだそれが働きました。その結果、内部バグトラッカー全体で多く使用されることになりました。次のバージョンが登場し、この寛大な機能はわずかに異なる動作を開始し、この(非)機能を(誤って)使用したリストの束を壊します。箇条書きリストを作成する文書化された方法は、もちろん機能します。
だから、私のソフトウェアは、それが受け入れるユーザー入力に寛容でなければなりませんか?