API для управления продуктами, разработанное на Go с использованием Gin framework.
- Go 1.16 или выше
- Gin framework
- Postman (для тестирования)
- Клонируйте репозиторий:
git clone https://github.com/Afra1m/product_api.git
cd product_api- Установите зависимости:
go mod download- Запустите сервер:
go run main.goСервер будет запущен на http://localhost:8080.
GET /api/products- Получить список всех продуктовGET /api/products/:id- Получить продукт по IDPOST /api/products- Создать новый продуктPUT /api/products/:id- Обновить существующий продуктDELETE /api/products/:id- Удалить продукт
GET /api/products/category/:category- Получить продукты по категорииGET /api/products/search?q=query- Поиск продуктовGET /api/products/price-range?min=X&max=Y- Получить продукты в указанном диапазоне ценGET /api/products/in-stock- Получить продукты в наличииPUT /api/products/:id/stock- Обновить количество товара
GET /api/products/categories- Получить список всех категорийGET /api/products/stats- Получить статистику по продуктам
POST /api/products/batch- Создать несколько продуктовPUT /api/products/batch- Обновить несколько продуктовDELETE /api/products/batch- Удалить несколько продуктов
GET /api/products/:id/history- Получить историю изменений продуктаGET /api/products/popular?limit=N- Получить популярные продуктыGET /api/products/new?limit=N- Получить новые продуктыGET /api/products/discount- Получить продукты со скидкойPUT /api/products/:id/discount- Обновить скидку продукта
GET /api/products/similar/:id- Получить похожие продуктыGET /api/products/related/:id- Получить связанные продуктыGET /api/products/trending?limit=N- Получить трендовые продуктыGET /api/products/featured- Получить рекомендуемые продуктыPUT /api/products/:id/feature- Обновить статус рекомендации
GET /api/products/export- Экспорт продуктовPOST /api/products/import- Импорт продуктов
GET /api/products/validate/:id- Проверить валидность продуктаGET /api/products/duplicates- Получить дубликаты продуктовGET /api/products/out-of-stock- Получить продукты, которых нет в наличииGET /api/products/low-stock?threshold=N- Получить продукты с низким запасом
type Product struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
Category string `json:"category"`
Stock int `json:"stock"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Discount float64 `json:"discount"`
Featured bool `json:"featured"`
Popularity int `json:"popularity"`
Views int `json:"views"`
Tags []string `json:"tags"`
SKU string `json:"sku"`
Barcode string `json:"barcode"`
Weight float64 `json:"weight"`
Dimensions string `json:"dimensions"`
Status string `json:"status"`
History []ProductHistory `json:"history"`
}type ProductInput struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
Price float64 `json:"price" binding:"required,gt=0"`
Category string `json:"category" binding:"required"`
Stock int `json:"stock" binding:"required,gte=0"`
Discount float64 `json:"discount" binding:"gte=0,lte=100"`
Featured bool `json:"featured"`
Tags []string `json:"tags"`
SKU string `json:"sku"`
Barcode string `json:"barcode"`
Weight float64 `json:"weight"`
Dimensions string `json:"dimensions"`
Status string `json:"status"`
}type ProductHistory struct {
Field string `json:"field"`
OldValue interface{} `json:"old_value"`
NewValue interface{} `json:"new_value"`
Timestamp time.Time `json:"timestamp"`
}type ProductStats struct {
TotalProducts int `json:"total_products"`
TotalCategories int `json:"total_categories"`
AveragePrice float64 `json:"average_price"`
TotalStock int `json:"total_stock"`
OutOfStockCount int `json:"out_of_stock_count"`
LowStockCount int `json:"low_stock_count"`
DiscountedCount int `json:"discounted_count"`
FeaturedCount int `json:"featured_count"`
MostPopularCategory string `json:"most_popular_category"`
}Для тестирования API используется Postman. Коллекция тестов находится в файле postman_collection.json.
- Создайте новое окружение в Postman
- Добавьте следующие переменные:
base_url:http://localhost:8080product_id: ID продукта (будет установлен после создания продукта)
- Импортируйте коллекцию
postman_collection.jsonв Postman - Выберите созданное окружение
- Запустите коллекцию
product_api/
├── main.go # Точка входа приложения
├── models/
│ └── product.go # Модели данных
├── storage/
│ └── product_storage.go # Хранилище данных
├── handlers/
│ └── product_handler.go # Обработчики HTTP-запросов
├── postman_collection.json # Коллекция тестов Postman
└── README.md # Документация