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

6.1 KiB
Raw Blame History

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