6.1 KiB
6.1 KiB
API Документация — Apple Style App
📚 Обзор
Бэкенд построен на Node.js http (без зависимостей). Данные хранятся в data.json.
🔌 PUBLIC API (без авторизации)
Получить все продукты
GET /api/products
Ответ:
{
"ok": true,
"data": [
{
"id": 1,
"name": "Vision Pro",
"tagline": "Пространственный компьютер здесь",
"description": "...",
"price": 3499,
"image": "https://...",
"features": ["M2", "R1"],
"category": "premium",
"order": 1
}
]
}
Получить продукт по ID
GET /api/products/:id
Ответ:
{
"ok": true,
"data": { /* объект продукта */ }
}
Получить активные объявления
GET /api/announcements
Ответ:
{
"ok": true,
"data": [
{
"id": 1,
"title": "Apple Event 2026",
"date": "2026-09-15",
"content": "Смотрите презентацию...",
"active": true
}
]
}
Получить настройки сайта
GET /api/settings
Ответ:
{
"ok": true,
"data": {
"heroTitle": "Добро пожаловать в будущее",
"heroSubtitle": "Инновации, которые меняют мир",
"theme": "dark"
}
}
🔐 ADMIN API (для редактирования)
Добавить продукт
POST /api/admin/products
Content-Type: application/json
{
"name": "iPhone 18 Pro",
"tagline": "Ещё мощнее",
"description": "Описание...",
"price": 999,
"category": "phones",
"image": "https://...",
"features": ["A18 чип", "Face ID", "5G"]
}
Ответ:
{
"ok": true,
"data": { /* созданный продукт с id и order */ }
}
Обновить продукт
PUT /api/admin/products/:id
Content-Type: application/json
{
"name": "Новое название",
"price": 1099
}
Удалить продукт
DELETE /api/admin/products/:id
Ответ:
{
"ok": true,
"deleted": 123
}
Добавить объявление
POST /api/admin/announcements
Content-Type: application/json
{
"title": "Специальное предложение",
"date": "2026-12-01",
"content": "Скидки до 30%",
"active": true
}
Обновить объявление
PUT /api/admin/announcements/:id
Content-Type: application/json
{
"title": "Обновлённый заголовок",
"active": false
}
Удалить объявление
DELETE /api/admin/announcements/:id
Обновить настройки сайта
PUT /api/admin/settings
Content-Type: application/json
{
"heroTitle": "Новый заголовок",
"heroSubtitle": "Новый подзаголовок",
"theme": "light"
}
🗂 Структура данных (data.json)
{
"products": [
{
"id": number,
"name": string,
"tagline": string,
"description": string,
"price": number,
"image": string (URL),
"features": string[],
"category": string,
"order": number
}
],
"announcements": [
{
"id": number,
"title": string,
"date": string (ISO date),
"content": string,
"active": boolean
}
],
"siteSettings": {
"heroTitle": string,
"heroSubtitle": string,
"theme": string ("dark" | "light")
}
}
🚀 Архитектура сервера
server.js
├── Routes (API)
│ ├── GET /api/products → список продуктов
│ ├── GET /api/products/:id → продукт по ID
│ ├── GET /api/announcements → активные объявления
│ ├── GET /api/settings → настройки сайта
│ │
│ └── ADMIN (CRUD)
│ ├── POST /api/admin/products
│ ├── PUT /api/admin/products/:id
│ ├── DELETE /api/admin/products/:id
│ ├── POST /api/admin/announcements
│ ├── PUT /api/admin/announcements/:id
│ ├── DELETE /api/admin/announcements/:id
│ └── PUT /api/admin/settings
│
└── Static Files
├── / → index.html
├── /admin.html
├── /style.css
├── /app.js
└── /admin.js
📝 Примеры использования (Frontend)
Загрузка продуктов
async function loadProducts() {
const res = await fetch('/api/products');
const json = await res.json();
if (json.ok) {
console.log(json.data); // массив продуктов
}
}
Добавление продукта (из админки)
async function addProduct(data) {
const res = await fetch('/api/admin/products', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
const json = await res.json();
return json.ok;
}
🔒 Безопасность (TODO для продакшена)
Сейчас API открыт. Для продакшена добавить:
- JWT или session аутентификацию для
/api/admin/* - Валидацию входных данных
- Rate limiting
- CORS только для доверенных доменов
🧪 Тестирование
# Получить все продукты
curl http://localhost:3000/api/products
# Добавить продукт
curl -X POST http://localhost:3000/api/admin/products \
-H "Content-Type: application/json" \
-d '{"name":"Test","tagline":"Test","price":99,"category":"test","features":[]}'
# Обновить настройки
curl -X PUT http://localhost:3000/api/admin/settings \
-H "Content-Type: application/json" \
-d '{"heroTitle":"Hello"}'