Проверяет понимание слоистой архитектуры обмена данными между фронтендом и бэкендом, включая API-слой, модели данных и обработку ошибок.
При разработке веб-приложений важно разделять ответственность между фронтендом и бэкендом. Слоистая архитектура помогает изолировать логику работы с данными от пользовательского интерфейса. Основная идея — создать промежуточный слой на клиенте, который отвечает за взаимодействие с сервером, и на сервере — за предоставление данных через стабильный API.
На фронтенде обычно выделяют следующие слои:
Пример API-слоя на JavaScript с использованием fetch:
// api/user.js
const API_URL = '/api';
export async function fetchUser(id) {
const response = await fetch(`${API_URL}/users/${id}`);
if (!response.ok) {
throw new Error('Failed to fetch user');
}
return response.json(); // возвращает объект, соответствующий модели User
}Затем в компоненте или хуке вызывается этот метод, и данные попадают в состояние:
// hooks/useUser.js
import { useState, useEffect } from 'react';
import { fetchUser } from '../api/user';
export function useUser(id) {
const [user, setUser] = useState(null);
useEffect(() => {
fetchUser(id).then(setUser).catch(console.error);
}, [id]);
return user;
}На сервере также применяется слоистость: контроллеры принимают запросы, сервисы содержат бизнес-логику, а репозитории работают с базой данных. Ответы формируются в виде DTO (Data Transfer Object), чтобы не передавать лишние поля и защитить внутреннюю структуру.
Пример на Node.js (Express):
// controllers/userController.js
const userService = require('../services/userService');
async function getUser(req, res) {
const user = await userService.getUserById(req.params.id);
res.json({ id: user.id, name: user.name }); // DTO
}Фронтенд и бэкенд общаются через HTTP-протокол. Важно заранее согласовать контракт API: какие эндпоинты существуют, какие параметры принимают и что возвращают. Для этого часто используют OpenAPI (Swagger) или GraphQL-схемы. На фронтенде можно генерировать типы из схемы, чтобы избежать расхождений.
В API-слое стоит централизованно обрабатывать ошибки (например, 401, 500) и преобразовывать их в понятные сообщения. Также можно добавить кэширование ответов, чтобы уменьшить нагрузку на сервер.
Слоистая организация обмена данными помогает поддерживать чистоту кода, упрощает тестирование и масштабирование. Применяйте её в проектах средней и большой сложности, где важно разделение ответственности и возможность замены отдельных частей без влияния на остальные.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию