Miałem wrażenie, że do tej pory wszyscy zgadzają się, że ta maksyma była błędem. Ale ostatnio widziałem tę odpowiedź, która ma „łagodny” komentarz, który był oceniany 137 razy (na dzień dzisiejszy).
Moim zdaniem pobłażliwość w akceptowaniu przeglądarek była bezpośrednią przyczyną totalnego bałaganu, jaki HTML i niektóre inne standardy sieciowe miały kilka lat temu, a dopiero niedawno zaczęły właściwie krystalizować się z tego bałaganu. Sposób, w jaki ja to widzę, łagodny w tym, co akceptujesz , doprowadzi do tego.
Druga część maksymy to „odrzuć wadliwe dane w trybie cichym, bez zwracania komunikatu o błędzie, chyba że jest to wymagane przez specyfikację” , a to wydaje się być obraźliwe. Każdy programista, który uderzył głową w ścianę, gdy coś się nie powiedzie, będzie wiedział, co mam na myśli.
Czy więc całkowicie się mylę? Czy mój program powinien być łagodny w tym, co akceptuje i cicho połykać błędy? Czy też źle interpretuję, co to znaczy?
Pierwotne pytanie brzmiało „program”, a ja o tym wszystkim myślę. Programy mogą być łagodne. Jednak tak naprawdę miałem na myśli interfejsy API: interfejsy udostępnione innym programom , a nie ludziom. HTTP jest przykładem. Protokół jest interfejsem używanym tylko przez inne programy. Ludzie nigdy nie podają bezpośrednio dat, które wpisują się w nagłówki, takie jak „Jeśli-zmodyfikowano-od”.
Pytanie zatem brzmi: czy serwer implementujący standard powinien być łagodny i dopuszczać daty w kilku innych formatach oprócz tego, który jest rzeczywiście wymagany przez standard? Uważam, że „łagodność” powinna odnosić się do tej sytuacji, a nie do ludzkich interfejsów.
Jeśli serwer jest łagodny, może się to wydawać ogólną poprawą, ale myślę, że w praktyce prowadzi to tylko do implementacji klienta, które ostatecznie polegają na łagodności i tym samym nie działają z innym serwerem, który jest łagodny w nieco inny sposób.
Czy serwer ujawniający niektóre interfejsy API powinien być łagodny, czy to bardzo zły pomysł?
Teraz na łagodną obsługę danych wprowadzanych przez użytkownika. Rozważ YouTrack (oprogramowanie do śledzenia błędów). Używa języka do wprowadzania tekstu, który przypomina Markdown. Tyle że jest „łagodny”. Na przykład pisanie
- foo
- bar
- baz
to nie udokumentowany sposób tworzenia listy punktowanej, a mimo to działało. W rezultacie zostało to często używane w naszym wewnętrznym narzędziu do wykrywania błędów. Pojawia się kolejna wersja, a ta łagodna funkcja zaczyna działać nieco inaczej, łamiąc garść list, które (źle) używały tej (nie) funkcji. Oczywiście udokumentowany sposób tworzenia list wypunktowanych nadal działa.
Czy moje oprogramowanie powinno być łagodne w zakresie akceptowanych danych wejściowych ?