Что лучше: проверка из внешнего интерфейса или из внутреннего интерфейса?
Я пытаюсь начать простую дискуссию о том, лучше ли использовать проверку данных формы, например, во внешнем интерфейсе или непосредственно на сервере?
Я полагаю, что нет правильного или неправильного ответа, возможно, это просто лучшие практики, но до сих пор я разрабатываю большинство своих веб-приложений для использования проверки, и я имею в виду простую проверку, такую как регулярные выражения для имени пользователя, пароля и т. Д. интерфейс.
Я вижу преимущество использования проверки на бэкэнде при использовании API, например, если пользователь напрямую попадает в конечную точку и отправляет неверную или неверную информацию, что может стать проблематичным, создавать ошибки в производительности API, а также вызывать сбой самого сервера.
Однако при работе с частными API-интерфейсами, предназначенными для использования только вашим веб-сайтом, я обнаружил, что использование проверки на интерфейсе потенциально может выгружать часть работы с сервера, в основном, серверной части не нужно выполнять дополнительную работу, когда данные приходят, логика проще, и должно работать немного быстрее.
Мне было бы очень интересно услышать другие точки зрения или мнения по этому поводу. Как я уже сказал, определенно нет правильного или неправильного, но я думаю, что это хорошая тема, которая поможет сбалансировать плюсы и минусы обоих методов.
Спасибо
1 ответ
(Это основано на мнении, но ...) если вы оцениваете интерфейс, вы можете (почти) гарантировать, что в базовый API не будут отправлены ошибочные данные. Вы бы не хотели, чтобы пользователь мог отправлять ему все, что он хочет, поэтому имеет смысл обрабатывать валидацию, когда ввод поступает через интерфейс. Кроме того, многие языки, которые работают рядом с интерфейсом, имеют функции для обработки ввода, а те, которые обрабатывают внутреннюю реализацию, могут не иметь.
Идиоматично, может быть лучше проверить раньше, чем позже. Один из способов, при котором это могло произойти, - это обойти проверку ввода на веб-интерфейсе и без проверок на серверной части пользователь мог бы отправить что-нибудь. Вы должны доверять своему тесту и тому факту, что его нельзя игнорировать. Если вы не можете доверять ему, то вашему бэкэнду тоже могут потребоваться эти проверки ввода.
Распространенной идиомой программирования также является то, что каждый бит вашего приложения выполняет один процесс. По этому определению серверная часть API должна делать только это. Также может быть проще отлаживать и понимать код, когда его область действия ограничена.
Итак, куда должна идти проверка? Вероятно, с интерфейсом, но вам нужно дополнительно убедиться, что эти проверки нельзя обойти, иначе ваш API будет открыт.