# API Документация — Apple Style App ## 📚 Обзор Бэкенд построен на **Node.js http** (без зависимостей). Данные хранятся в `data.json`. --- ## 🔌 PUBLIC API (без авторизации) ### Получить все продукты ``` GET /api/products ``` **Ответ:** ```json { "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 ``` **Ответ:** ```json { "ok": true, "data": { /* объект продукта */ } } ``` --- ### Получить активные объявления ``` GET /api/announcements ``` **Ответ:** ```json { "ok": true, "data": [ { "id": 1, "title": "Apple Event 2026", "date": "2026-09-15", "content": "Смотрите презентацию...", "active": true } ] } ``` --- ### Получить настройки сайта ``` GET /api/settings ``` **Ответ:** ```json { "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"] } ``` **Ответ:** ```json { "ok": true, "data": { /* созданный продукт с id и order */ } } ``` --- ### Обновить продукт ``` PUT /api/admin/products/:id Content-Type: application/json { "name": "Новое название", "price": 1099 } ``` --- ### Удалить продукт ``` DELETE /api/admin/products/:id ``` **Ответ:** ```json { "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) ```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) ### Загрузка продуктов ```javascript async function loadProducts() { const res = await fetch('/api/products'); const json = await res.json(); if (json.ok) { console.log(json.data); // массив продуктов } } ``` ### Добавление продукта (из админки) ```javascript 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 только для доверенных доменов --- ## 🧪 Тестирование ```bash # Получить все продукты 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"}' ```