Kiedy należy przyciąć wejście?

11

Jestem stażystą, ucząc się ton o branży poza środowiskiem akademickim.

Jedną z rzeczy, o których myślałem dzisiaj, było przycinanie danych wejściowych.

Po jednej stronie monety nie chcę, aby użytkownik / implementator stale odbierał nieoczekiwane wyniki, ponieważ ich dane wejściowe miały zbyt wiele spacji, dlatego muszę stale przycinać dane wejściowe użytkownika po każdym wywołaniu funkcji.

Ale jednocześnie Jeśli tworzę bibliotekę API do użytku wewnętrznego tutaj w biurze, końcowe / białe znaki mogą być kluczowe dla wyników.

Są też przypadki, w których nie jestem pewien, czy białe znaki będą ważne, czy nie.

Dużym problemem jest dla mnie to, że stale wzywam .trim () wszędzie w moim kodzie.

Czy ktoś ma jakieś praktyczne wskazówki lub po prostu przemyślenia, jak radzić sobie z pewnymi sytuacjami?

TacticalMin
źródło
1
Kiedy mówisz tutaj „API”, czy mówisz o pisaniu biblioteki, czy mówisz o wewnętrznej usłudze internetowej? To ważny szczegół.
Sean McSomething,
Tak naprawdę byłaby to biblioteka, którą buduję (dzięki)
TacticalMin
To brzmi samo-odpowiedź ... jeśli nie jesteś pewien, że biała przestrzeń nie jest potrzebna, prawdopodobnie nie powinieneś przycinać tekstu.
GrandmasterB,

Odpowiedzi:

13

Nigdy nie przycinaj spacji arbitralnie w interfejsie API.

Jedynym powodem arbitralnego przycinania białych znaków jest funkcja interfejsu użytkownika. Ludzie często opuszczają spacje na końcu wprowadzonych pól, ale nie widzą, że to zrobili. Zwracanie wiadomości jest dość mylące, więc - z wyjątkiem rzadkiego przypadku, gdy użytkownik może wpisać „A” w celu oznaczenia czegoś innego niż „A” - zwykle można porzucić dowolne bezużyteczne spacje.

Ale komputery nie dodają spacji przez pomyłkę, dodają spacje, ponieważ programista im to nakazał, a jeśli zepsują implementację interfejsu API, powinieneś zwrócić błąd programistom. Jeśli nie, to powinieneś ich po prostu użyć.

Istnieje oczywiście możliwość, że dane te pochodzą od człowieka za pośrednictwem aplikacji, ale to jest kwestia twórcy aplikacji, a nie twojej. Ponownie, jeśli spowodują problem, odrzuć je; jeśli nie, zaakceptuj je. Nie przycinaj ich i zakładaj, że konsument wie, że tak się stanie.

pdr
źródło
Dzięki za poświęcenie czasu na odpowiedź. Podsumowałeś to, co wszyscy mówią.
TacticalMin
3

Jedną przydatną zasadą jest tutaj YAGNI : „Nie będziesz go potrzebował”. Co to znaczy, że kiedy masz pomysł na cechę, że nie jesteś pewna, że rzeczywiście trzeba, nie wdrożyć go, dopóki nie na pewno potrzebne. Następnie, gdy zajdzie taka potrzeba, miejsca w bazie danych, w których jest to rzeczywiście konieczne, powinny być również widoczne.

Mason Wheeler
źródło
1

Zależy, do czego dane wejściowe będą używane. Jeśli przycinasz spacje z danych wprowadzonych jako wyszukiwane hasło, rozumiem, dlaczego to robisz. Dobrym nawykiem jest nauczyć się nie ufać danym wchodzącym do systemu, myślę przede wszystkim o SQL Injection, ale są też inne aspekty.

Być może nie zawsze trzeba przycinać dane wejściowe, ale zdecydowanie należy zawsze sprawdzać dane wejściowe.

Daniel Hollinrake
źródło