Где может располагаться логика веб-приложения: на клиенте или на сервере?

«Где может располагаться логика веб-приложения: на клиенте или на сервере?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Логика в современных веб-приложениях распределяется между клиентом (frontend) и сервером (backend), что определяет подход к тестированию.

Логика на клиенте (Frontend):

  • Что это: Код, выполняемый в браузере пользователя (JavaScript, TypeScript).
  • Примеры:
    • Валидация ввода в формах.
    • Динамическое обновление контента без перезагрузки страницы (SPA).
    • Маршрутизация внутри приложения.
    • Простая бизнес-логика, не требующая данных от сервера.
      // Пример клиентской валидации email
      function validateEmailOnClient(email) {
      const regex = /^[^s@]+@[^s@]+.[^s@]+$/;
      return regex.test(email); // Возвращает true/false
      }
  • Риск: Эту логику можно обойти, отключив JavaScript или изменив код через DevTools.

Логика на сервере (Backend):

  • Что это: Код, выполняемый на сервере (Java, Python, C#, Node.js и т.д.).
  • Примеры:
    • Работа с базой данных (запросы, транзакции).
    • Сложные вычисления и алгоритмы.
    • Критичная для безопасности логика (аутентификация, авторизация, платежи).
    • Интеграция со сторонними системами.

Best Practice и тестирование:

  1. Дублирование проверок: Критичная валидация (например, формата email) должна всегда дублироваться на сервере, даже если есть на клиенте.
  2. Тестирование клиента: Проверяем корректность отображения, работу скриптов, UX.
  3. Тестирование сервера (API): Проверяем бизнес-логику, безопасность, работу с данными. Это основа надежности приложения.
  4. Совместное тестирование: Проверяем, что данные, отправленные с клиента, корректно обрабатываются на сервере и возвращаются обратно.