Что дороже : отправка дополнительных полей в полезной нагрузке или эквивалентный тест регулярных выражений на серверной части

#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:

Ответ заключается в том, что ни то, ни другое не является особенно дорогостоящим с точки зрения вычислений, поэтому любое решение будет работать. Это дизайнерское решение.

Тем не менее, я обычно пишу логику проверки на стороне сервера и оставляю как можно меньше возможностей для интерфейса. Вам все равно придется выполнить проверку входных данных, поэтому имеет смысл выполнить эту проверку и здесь.