Как документировать микросервис
Обзор
Микросервис категорий продуктов предназначен для управления иерархическими категориями продуктов для нескольких сайтов электронной коммерции, специализирующихся на оборудовании для отопления и вентиляции. Он поддерживает операции такие как добавление, обновление, удаление и извлечение категорий. Дополнительно, он предоставляет хлебные крошки для навигации, поддерживает вложенные структуры категорий и включает SEO-оптимизацию.
Презентация. Каталог электронной коммерции
Основные функции
-
Управление категориями
- Добавление новой категории для конкретного сайта.
- Обновление существующей категории для конкретного сайта.
- Удаление категории (с каскадным удалением дочерних категорий) для конкретного сайта.
-
Иерархическая структура
- Категории могут быть организованы в иерархию с максимальным уровнем вложенности до 5 уровней для каждого сайта.
- Каждая категория имеет следующие атрибуты:
id
: Уникальный идентификатор (UUID).name
: Название категории.slug
: Удобная для URL версия названия категории (должна быть уникальной на сайте).parent_id
: UUID родительской категории (илиNULL
для категорий верхнего уровня).site_id
: UUID сайта, к которому принадлежит категория.seo_title
: (Необязательно) Заголовок для SEO целей.seo_description
: (Необязательно) Описание для SEO целей.seo_keywords
: (Необязательно) Ключевые слова для SEO целей.
-
Поддержка нескольких сайтов
- Микросервис может управлять категориями продуктов для нескольких сайтов электронной коммерции.
- Сайты хранятся в отдельной таблице
sites
с следующими атрибутами:id
: Уникальный идентификатор (UUID).name
: Название сайта (например, “HVAC Store”).description
: (Необязательно) Краткое описание сайта.created_at
: Время создания сайта.updated_at
: Время последнего обновления сайта.
-
Хлебные крошки на основе slugs
- Хлебные крошки представлены как slugs, разделенные знаком
/
(например,heating/boilers/gas-boilers
). - Хлебные крошки генерируются динамически на основе иерархии для указанного сайта.
- Если slugs повторяются в рамках конкретного сайта, нужно добавить родительский slug, используя ’-’ в качестве разделителя.
- Хлебные крошки представлены как slugs, разделенные знаком
-
Извлечение вложенных категорий
- Извлечение всех вложенных категорий, начиная с конкретной
category_id
для указанногоsite_id
. - Вложенная структура включает дочерние категории каждой категории рекурсивно.
- Извлечение всех вложенных категорий, начиная с конкретной
-
Извлечение категорий верхнего уровня
- Извлечение всех категорий верхнего уровня (категорий, где
parent_id
равноNULL
) для указанногоsite_id
.
- Извлечение всех категорий верхнего уровня (категорий, где
-
Управление SEO информацией
- Извлечение SEO информации для конкретной категории.
- Обновление SEO информации для конкретной категории.
-
Управление сайтами
- Добавление, обновление, удаление и извлечение информации о сайтах электронной коммерции.
- Поддержка связей между сайтами и их категориями.
-
Загрузка данных из НСИ
- Чтение топиков кафка
dcfgd
dsfsdfds
- Размещение данных в стейджинговых таблицах
- Мердж в боевые таблицы из стейджинговых
- Чтение топиков кафка
API Эндпоинты
-
Управление сайтами
-
Создание сайта
-
Метод:
POST /sites/
-
Тело запроса:
{ "name": "СайтРу", "description": "Сайт, специализирующийся на оборудовании для отопления, вентиляции и кондиционирования воздуха." }
-
Ответ:
{ "id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "name": "СайтРу", "description": "Сайт, специализирующийся на оборудовании для отопления, вентиляции и кондиционирования воздуха.", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:00:00Z" }
-
-
Извлечение всех сайтов
-
Метод:
GET /sites/
-
Ответ:
[ { "id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "name": "HVAC Store", "description": "Сайт, специализирующийся на оборудовании для отопления, вентиляции и кондиционирования воздуха.", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:00:00Z" } ]
-
-
Извлечение сайта по ID
-
Метод:
GET /sites/{id}
-
Ответ:
{ "id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "name": "СайтРу", "description": "Сайт, специализирующийся на оборудовании для отопления, вентиляции и кондиционирования воздуха.", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:00:00Z" }
-
-
Обновление сайта
-
Метод:
PUT /sites/{id}
-
Тело запроса:
{ "name": "Обновленный СайтРу", "description": "Обновленное описание для сайта русклимат." }
-
Ответ:
{ "id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "name": "Обновленный СайтРу", "description": "Обновленное описание для сайта HVAC.", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:30:00Z" }
-
-
Удаление сайта
-
Метод:
DELETE /sites/{id}
-
Ответ:
{ "message": "Сайт успешно удален." }
-
-
-
Управление категориями
-
Добавление категории
-
Метод:
POST /categories/
-
Тело запроса:
{ "name": "Котлы", "slug": "boilers", "parent_id": null, "site_id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "seo_title": "Купить высококачественные котлы", "seo_description": "лучшие котлы для ваших нужд в отоплении.", "seo_keywords": "котлы, отопительное оборудование" }
-
Ответ:
{ "id": "b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678", "name": "Котлы", "slug": "boilers", "parent_id": null, "site_id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "seo_title": "Купить высококачественные котлы", "seo_description": "лучшие котлы для ваших нужд в отоплении.", "seo_keywords": "котлы, отопительное оборудование", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:00:00Z" }
-
-
Обновление категории
-
Метод:
PUT /categories/{id}
-
Тело запроса:
{ "name": "Обновленные котлы", "slug": "updated-boilers", "parent_id": null, "site_id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "seo_title": "Обновленный SEO-заголовок котлов", "seo_description": "Обновленное описание котлов.", "seo_keywords": "котлы, обновлено" }
-
Ответ:
{ "id": "b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678", "name": "Обновленные котлы", "slug": "updated-boilers", "parent_id": null, "site_id": "a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129", "seo_title": "Обновленный SEO-заголовок котлов", "seo_description": "Обновленное описание котлов.", "seo_keywords": "котлы, обновлено", "created_at": "2025-01-23T12:00:00Z", "updated_at": "2025-01-23T12:30:00Z" }
-
-
Удаление категории
-
Метод:
DELETE /categories/{id}
-
Параметр запроса:
site_id
-
Пример:
DELETE /categories/b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678?site_id=a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129
-
Ответ:
{ "message": "Категория успешно удалена." }
-
-
Извлечение вложенных категорий
-
Метод:
GET /categories/{id}/nested
-
Параметр запроса:
site_id
-
Пример:
GET /categories/b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678/nested?site_id=a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129
-
Ответ:
{ "id": "b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678", "name": "Boilers", "slug": "boilers", "seo_title": "Buy High-Quality Boilers", "seo_description": "Find the best boilers for your heating needs.", "seo_keywords": "boilers, heating equipment, HVAC", "children": [ { "id": "d34f6a89-7b4e-5c9e-8a7d-67e2d5c8a123", "name": "Gas Boilers", "slug": "gas-boilers", "seo_title": "Buy Gas Boilers", "seo_description": "Efficient gas boilers for home and commercial use.", "seo_keywords": "gas boilers, heating equipment, HVAC", "children": [] } ] }
-
-
Извлечение хлебных крошек
-
Метод:
GET /categories/{id}/breadcrumbs
-
Параметр запроса:
site_id
-
Пример:
GET /categories/b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678/breadcrumbs?site_id=a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129
-
Ответ:
{ "breadcrumbs": "heating/boilers/gas-boilers" }
-
-
Извлечение категорий верхнего уровня
-
Метод:
GET /categories/top-level
-
Параметр запроса:
site_id
-
Пример:
GET /categories/top-level?site_id=a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129
-
Ответ:
[ { "id": "e56f7d23-2a4b-5c9e-8f7d-12e3a4c7e456", "name": "Heating", "slug": "heating", "parent_id": null, "seo_title": "Shop Heating Equipment", "seo_description": "Explore top-quality heating equipment.", "seo_keywords": "heating, boilers, HVAC" }, { "id": "f67g8d34-3b5c-6d9e-8g7d-23f4b5d8e567", "name": "Ventilation", "slug": "ventilation", "parent_id": null, "seo_title": "Shop Ventilation Systems", "seo_description": "Discover advanced ventilation systems.", "seo_keywords": "ventilation, HVAC, air quality" } ]
-
-
Извлечение SEO информации
-
Метод:
GET /categories/{id}/seo
-
Параметр запроса:
site_id
-
Пример:
GET /categories/b12c6d78-5e4f-3b9e-8f7c-45d7e2f3c678/seo?site_id=a23b5c34-1d6f-4b8e-9f5a-25e7c3d5e129
-
Ответ:
{ "seo_title": "Buy High-Quality Boilers", "seo_description": "Find the best boilers for your heating needs.", "seo_keywords": "boilers, heating equipment, HVAC" }
-
-
Обновление SEO информации
-
Метод:
PUT /categories/{id}/seo
-
Параметр запроса:
site_id
-
Пример:
{ "seo_title": "Updated Boiler SEO Title", "seo_description": "Updated description for boilers.", "seo_keywords": "updated, boilers, HVAC" }
-
Ответ:
{ "seo_title": "Updated Boiler SEO Title", "seo_description": "Updated description for boilers.", "seo_keywords": "updated, boilers, HVAC" }
-
-
Обновление slug
-
Метод:
PUT /categories/{id}/slug
-
Параметр запроса:
site_id
-
Пример:
{ "slug": "boilers", }
-
Ответ:
{ "slug": "boilers" }
-
-
Схема базы данных
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL,
parent_id INT REFERENCES categories(id) ON DELETE CASCADE,
site_id INT NOT NULL,
seo_title VARCHAR(255),
seo_description TEXT,
seo_keywords TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE (slug, site_id)
);
CREATE TABLE sites (
id UUID PRIMARY KEY, -- Уникальный идентификатор для сайта
name VARCHAR(255) NOT NULL, -- Название сайта
description TEXT, -- Необязательно описание сайта
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Время создания сайта
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Время последнего обновления
);
CREATE TABLE staging_sites (
id UUID,
name TEXT,
description TEXT,
staging_created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE staging_categories (
id UUID,
name TEXT,
slug TEXT,
parent_id UUID,
site_id UUID,
seo_title VARCHAR(255),
seo_description TEXT,
seo_keywords TEXT,
staging_created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
);
Проектные соображения
-
Уникальность Slug
- Slugs должны быть уникальными на одном сайте, чтобы гарантировать правильную работу хлебных крошек и URL.
-
Производительность
- Добавить индексы в базе данных на
parent_id
,slug
иsite_id
для более быстрого поиска. - Кэшировать часто запрашиваемые эндпоинты (например, категории верхнего уровня) для повышения производительности.
- Добавить индексы в базе данных на
-
Обработка ошибок
- Возвращать ошибку
404
, если категория с такимid
не существует на указанном сайте. - Валидировать входные данные, чтобы они соответствовали схеме.
- Возвращать ошибку
-
Масштабируемость
- Сервис должен эффективно обрабатывать большие иерархии с помощью оптимизации рекурсивных запросов.
Будущие улучшения
- Добавить поддержку сортировки категорий по приоритету внутри каждого сайта.
- Добавить журнал аудита для изменений категорий на сайте.
- Проверка состояния (healthcheck).
- Пакетная загрузка(batch load).