#java #node.js #spring #spring-boot #backend
Вопрос:
Дороже ли отправлять дополнительные поля в теле запроса или запускать регулярное выражение на сервере и вычислять эквивалент дополнительных полей?
Например: во внешнем приложении есть два поля ввода для внутреннего и международного номера, но пользователь может ввести только одно из них. Предполагая, что серверная часть должна знать, является ли это внутренним или международным номером, который, по-видимому, является лучшей полезной нагрузкой, отправляемой внешним интерфейсом:
{
"phoneNumber":"( 123)45567891",
"isInternational":true
}
или
{
"phoneNumber":"( 123)45567891",
}
и проверьте с помощью теста регулярных выражений, является ли » 123″ внутренним или международным в бэкэнде?
Комментарии:
1. Я думаю, что «что дороже» — это неправильный вопрос, который следует задавать здесь в 99% случаев. Самый первый вопрос, который вы должны задать: доверяете ли вы клиенту принять это решение за вас и каковы будут последствия, если он вам солгал? Что было бы, если бы вы получили
{ "phoneNumber": "abcd", "isInternational": true }
? В данном конкретном случае, вероятно, не так уж много, но в общем случае это кажется серьезной проблемой безопасности.2. Спасибо @JoachimSauer никогда не думал в этом направлении, и теперь я получил ответ на свой вопрос, но мне любопытно, посмотрим ли мы на безопасность и другие аспекты — что будет дороже?
3. В общем случае это действительно трудно сказать, потому что как анализ одного дополнительного поля, так и применение простого регулярного выражения к короткой входной строке являются довольно дешевыми операциями, так что какой именно из них будет быстрее, ответить непросто.
Ответ №1:
Ответ заключается в том, что ни то, ни другое не является особенно дорогостоящим с точки зрения вычислений, поэтому любое решение будет работать. Это дизайнерское решение.
Тем не менее, я обычно пишу логику проверки на стороне сервера и оставляю как можно меньше возможностей для интерфейса. Вам все равно придется выполнить проверку входных данных, поэтому имеет смысл выполнить эту проверку и здесь.