Tenía la impresión de que ahora todos están de acuerdo en que esta máxima fue un error. Pero recientemente vi esta respuesta que tiene un comentario de "ser indulgente" votado 137 veces (a partir de hoy).
En mi opinión, la indulgencia en lo que aceptan los navegadores fue la causa directa del desorden total que HTML y algunos otros estándares web fueron hace unos años, y solo recientemente han comenzado a cristalizarse adecuadamente de ese desorden. La forma en que lo veo, siendo indulgentes en lo que acepta se llevará a esto.
La segunda parte de la máxima es "descartar silenciosamente la entrada defectuosa, sin devolver un mensaje de error a menos que así lo requiera la especificación" , y esto se siente ofensivo. Cualquier programador que se haya golpeado la cabeza contra la pared cuando algo falla en silencio sabrá a qué me refiero.
Entonces, ¿estoy completamente equivocado sobre esto? ¿Debería mi programa ser indulgente en lo que acepta y tragar errores en silencio? ¿O estoy interpretando mal lo que se supone que significa esto?
La pregunta original decía "programa", y tomo el punto de vista de todos sobre eso. Puede tener sentido que los programas sean indulgentes. Sin embargo, lo que realmente quise decir es API: interfaces expuestas a otros programas , en lugar de personas. HTTP es un ejemplo. El protocolo es una interfaz que solo usan otros programas. La gente nunca proporciona directamente las fechas que van en los encabezados como "If-Modified-Since".
Entonces, la pregunta es: ¿el servidor que implementa un estándar debe ser indulgente y permitir fechas en varios otros formatos, además del que realmente exige el estándar? Creo que se supone que "ser indulgente" se aplica a esta situación, en lugar de las interfaces humanas.
Si el servidor es indulgente, puede parecer una mejora general, pero creo que en la práctica solo conduce a implementaciones del cliente que terminan dependiendo de la indulgencia y, por lo tanto, no funcionan con otro servidor que es indulgente de maneras ligeramente diferentes.
Entonces, ¿un servidor que exponga alguna API sea indulgente o es una muy mala idea?
Ahora en el manejo indulgente de la entrada del usuario. Considere YouTrack (un software de seguimiento de errores). Utiliza un idioma para la entrada de texto que recuerda a Markdown. Excepto que es "indulgente". Por ejemplo, escribiendo
- foo
- bar
- baz
no es una forma documentada de crear una lista con viñetas y, sin embargo, funcionó. En consecuencia, terminó siendo utilizado mucho en todo nuestro rastreador de errores interno. La próxima versión sale, y esta característica indulgente comienza a funcionar de manera ligeramente diferente, rompiendo un montón de listas que (mal) usaron esta (no) característica. La forma documentada de crear listas con viñetas todavía funciona, por supuesto.
Entonces, ¿mi software debería ser indulgente con las entradas de usuario que acepta?