na-kakuyu-temu-mozhno-sozdat/API.md

319 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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"}'
```