Gernar
Бэкенд и базы данных

Как приложение получает информацию с базы данных

Разбор вопроса «Как приложение получает информацию с базы данных» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Как приложение получает информацию с базы данных

Профессия

Frontend Developer

Что хочет услышать интервьюер

Интервьюер хочет убедиться, что кандидат понимает полный цикл: от отправки запроса с фронтенда до обработки на сервере и возврата данных. Важно знание HTTP, API, безопасности и оптимизации.

Ключевые тезисы

  • Приложение взаимодействует с базой данных через API (например, REST или GraphQL), отправляя HTTP-запросы (GET, POST и т.д.).
  • Сервер обрабатывает запрос, выполняет SQL-запросы или использует ORM для получения данных из БД.
  • Данные возвращаются в формате JSON/XML, после чего фронтенд их обрабатывает и отображает пользователю.
  • Для безопасности используются аутентификация (токены, JWT) и валидация данных.
  • Оптимизация запросов (кеширование, пагинация) снижает нагрузку на БД.

Подробный ответ

Приложение получает данные из базы данных через промежуточный слой — API (Application Programming Interface). Это может быть REST API, GraphQL или другой протокол. Фронтенд отправляет HTTP-запрос (например, GET для получения данных или POST для их изменения) на сервер, который обрабатывает запрос, взаимодействует с базой данных через SQL-запросы или ORM (например, Sequelize для Node.js), и возвращает данные в формате JSON/XML. Для безопасности используются механизмы аутентификации (например, JWT-токены) и валидации данных. Оптимизация запросов достигается за счет кеширования (например, Redis), пагинации (разбивка данных на страницы) и ограничения возвращаемых полей (в GraphQL).

REST API использует стандартные HTTP-методы (GET, POST, PUT, DELETE) для CRUD-операций. GraphQL, в отличие от REST, позволяет клиенту запрашивать только нужные данные за один запрос, что уменьшает нагрузку на сеть. Например, в REST для получения пользователя и его заказов可能需要 два запроса, а в GraphQL — один, но с указанием требуемых полей.

Обработка ошибок на фронтенде включает проверку HTTP-статусов (200 — OK, 404 — Not Found, 500 — Server Error) и структуры ответа (например, поле error в JSON). Для частых запросов к API применяется кеширование на клиенте (например, через localStorage) или сервере (CDN, Redis).

Практические примеры

Пример 1

Пример GET-запроса к REST API на JavaScript (fetch):

fetch('https://api.example.com/users/1')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Пример 2

Пример GraphQL-запроса (получение имени пользователя и его заказов):

query {
  user(id: 1) {
    name
    orders {
      id
      total
    }
  }
}

Пример 3

Пример использования JWT для аутентификации:

fetch('https://api.example.com/protected', {
  headers: {
    'Authorization': 'Bearer ' + token
  }
});

Частые ошибки

  • Отсутствие обработки ошибок при запросах к API (например, игнорирование catch в fetch).
  • Чрезмерные запросы к API из-за отсутствия пагинации или кеширования.
  • Хранение чувствительных данных (например, токенов) в незащищенном хранилище (localStorage вместо httpOnly cookies).

Связанные темы

  • HTTP-методы (GET, POST, PUT, DELETE)
  • Аутентификация и авторизация (OAuth, JWT)
  • Оптимизация API-запросов (кеширование, CDN)
  • Сравнение REST и GraphQL
  • ORM (Sequelize, TypeORM)

Follow-up вопросы

Какие HTTP-методы чаще всего используются для работы с данными и в каких случаях?

Уровень: basic

GET — для получения данных, POST — для создания новых записей, PUT/PATCH — для обновления, DELETE — для удаления. Например, GET /users вернет список пользователей, а POST /users создаст нового.

Как можно оптимизировать частые запросы к базе данных?

Уровень: intermediate

Используют кеширование (например, Redis), пагинацию (limit/offset), индексы в БД, а также стратегии типа lazy loading или запросы только необходимых полей (GraphQL).

Какие риски безопасности возникают при работе с API и как их избежать?

Уровень: advanced

Основные риски: SQL-инъекции, CSRF, XSS. Защита: параметризованные запросы (ORM), CORS-политики, валидация данных на клиенте и сервере, HTTPS, JWT с ограниченным сроком действия.

В чем разница между REST и GraphQL при запросе данных?

Уровень: intermediate

REST возвращает фиксированные структуры данных (часто избыточные), а GraphQL позволяет клиенту запрашивать только нужные поля одним запросом, уменьшая нагрузку на сеть.

Как обрабатываются ошибки при запросах к API?

Уровень: basic

Сервер возвращает HTTP-статусы (например, 404 — не найдено, 500 — серверная ошибка) и JSON с описанием ошибки. Фронтенд обрабатывает их через try/catch или перехватчики (interceptors) в Axios/fetch.

Содержание