← Назад к вопросам
Спроектировать REST API для интернет-магазина книг
1.3 Junior🔥 161 комментариев
#API и интеграции
Условие
Вам нужно спроектировать REST API для интернет-магазина книг.
Основные сущности:
- Книги (название, автор, ISBN, цена, количество на складе)
- Пользователи (регистрация, авторизация)
- Корзина
- Заказы
Требования:
- Опишите эндпоинты для CRUD-операций с книгами
- Опишите эндпоинты для работы с корзиной (добавление, удаление, просмотр)
- Опишите эндпоинт для оформления заказа
- Укажите HTTP-методы, параметры запросов, формат ответов
- Опишите коды ответов для каждого эндпоинта
Формат ответа: Swagger/OpenAPI спецификация или текстовое описание API
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
REST API для интернет-магазина книг
Общие принципы проектирования
Базовый URL: https://api.bookstore.com/v1
Аутентификация: JWT токен в заголовке Authorization: Bearer {token}
Формат ответов: JSON
1. Эндпоинты работы с книгами
Получение списка всех книг
GET /books
Параметры:
- page (int): номер страницы (по умолчанию 1)
- limit (int): количество книг на странице (по умолчанию 20)
- sort (string): сортировка (price_asc, price_desc, title, rating)
- author (string): фильтр по автору
- search (string): полнотекстовый поиск
Ответ 200 OK:
{
"data": [{"id": "uuid", "title": "Война и мир", "author": "Лев Толстой", "isbn": "978-5-17-070490-8", "price": 599.99, "stock": 45, "rating": 4.8}],
"pagination": {"page": 1, "limit": 20, "total": 156}
}
Получение книги по ID
GET /books/{id}
Ответ 200 OK:
{
"id": "uuid",
"title": "Война и мир",
"author": "Лев Толстой",
"isbn": "978-5-17-070490-8",
"price": 599.99,
"stock": 45
}
Ответ 404 Not Found: {"error": "Book not found"}
Создание новой книги (администратор)
POST /books
Требуется: Authorization
Тело запроса:
{"title": "Война и мир", "author": "Лев Толстой", "isbn": "978-5-17-070490-8", "price": 599.99, "stock": 100}
Ответ 201 Created: {"id": "uuid", ...}
Ответ 400 Bad Request: {"error": "Invalid ISBN format"}
Ответ 409 Conflict: {"error": "Book with this ISBN already exists"}
Ответ 403 Forbidden: {"error": "Access denied"}
Обновление книги
PUT /books/{id}
Требуется: Authorization (администратор)
Тело запроса:
{"price": 699.99, "stock": 80}
Ответ 200 OK: {"id": "uuid", ...}
Ответ 404 Not Found
Ответ 403 Forbidden
Удаление книги
DELETE /books/{id}
Требуется: Authorization (администратор)
Ответ 204 No Content
Ответ 404 Not Found
Ответ 403 Forbidden
2. Эндпоинты работы с корзиной
Получение содержимого корзины
GET /cart
Требуется: Authorization
Ответ 200 OK:
{
"id": "uuid",
"items": [
{"id": "uuid", "book_id": "uuid", "title": "Война и мир", "price": 599.99, "quantity": 2, "subtotal": 1199.98}
],
"total": 1199.98,
"currency": "RUB"
}
Добавление книги в корзину
POST /cart/items
Требуется: Authorization
Тело запроса:
{"book_id": "uuid", "quantity": 2}
Ответ 200 OK:
{"id": "uuid", "book_id": "uuid", "title": "Война и мир", "price": 599.99, "quantity": 2, "subtotal": 1199.98}
Ответ 400 Bad Request: {"error": "Quantity exceeds available stock", "available": 10}
Ответ 404 Not Found: {"error": "Book not found"}
Обновление количества в корзине
PUT /cart/items/{item_id}
Требуется: Authorization
Тело запроса:
{"quantity": 5}
Ответ 200 OK: {"id": "uuid", "quantity": 5, "subtotal": 2999.95}
Ответ 400 Bad Request: {"error": "Quantity exceeds available stock"}
Ответ 404 Not Found: {"error": "Item not found in cart"}
Удаление книги из корзины
DELETE /cart/items/{item_id}
Требуется: Authorization
Ответ 204 No Content
Ответ 404 Not Found
Очистка корзины
DELETE /cart
Требуется: Authorization
Ответ 204 No Content
3. Эндпоинты для оформления заказа
Создание заказа
POST /orders
Требуется: Authorization
Тело запроса:
{
"shipping_address": {"street": "ул. Красная, 10", "city": "Москва", "postal_code": "123456", "country": "Россия"},
"payment_method": "credit_card",
"notes": "Оставить у двери"
}
Ответ 201 Created:
{
"id": "uuid",
"status": "pending",
"items": [...],
"total": 1529.98,
"payment_status": "pending",
"estimated_delivery": "2024-03-25"
}
Ответ 400 Bad Request: {"error": "Cart is empty"}
Ответ 400 Bad Request: {"error": "Invalid shipping address"}
Получение заказа по ID
GET /orders/{id}
Требуется: Authorization
Ответ 200 OK:
{"id": "uuid", "status": "shipped", "items": [...], "total": 1529.98, "payment_status": "completed", "tracking_number": "TRK123456789"}
Ответ 404 Not Found
Ответ 403 Forbidden: {"error": "You don't have access to this order"}
Получение списка заказов пользователя
GET /orders
Требуется: Authorization
Параметры:
- status: фильтр (pending, confirmed, shipped, delivered, cancelled)
- limit (по умолчанию 20)
- page (по умолчанию 1)
Ответ 200 OK: {"data": [...], "pagination": {...}}
Отмена заказа
POST /orders/{id}/cancel
Требуется: Authorization
Тело запроса:
{"reason": "Changed my mind"}
Ответ 200 OK:
{"id": "uuid", "status": "cancelled", "refund_amount": 1529.98, "refund_status": "processing"}
Ответ 400 Bad Request: {"error": "Order cannot be cancelled (already shipped)"}
4. Коды HTTP ответов
| Код | Описание |
|---|---|
| 200 | OK - Успешно |
| 201 | Created - Ресурс создан |
| 204 | No Content - Успешно удалено |
| 400 | Bad Request - Ошибка валидации |
| 401 | Unauthorized - Требуется аутентификация |
| 403 | Forbidden - Доступ запрещен |
| 404 | Not Found - Ресурс не найден |
| 409 | Conflict - Конфликт (дубликат) |
| 422 | Unprocessable Entity - Ошибка в данных |
| 429 | Too Many Requests - Превышен лимит запросов |
| 500 | Internal Server Error - Ошибка сервера |
Основные принципы API
1. RESTful соглашения:
- Существительные вместо глаголов в URL
- HTTP методы соответствуют действиям (GET=чтение, POST=создание, PUT=обновление, DELETE=удаление)
- Версионирование в URL (/v1/)
2. Безопасность:
- JWT аутентификация для защиты
- Проверка прав доступа на уровне администратора
- Валидация всех входных данных
- HTTPS обязателен
3. Масштабируемость:
- Пагинация для списков
- Фильтрация и сортировка
- Кэширование возможных ответов
- Rate limiting для защиты от DDoS
4. Удобство:
- Понятные коды ошибок
- Полные описания ошибок в ответах
- Консистентная структура всех ответов
- Поддержка поиска и фильтрации
Эта спецификация обеспечивает полную функциональность интернет-магазина книг с надежной безопасностью и удобным API для фронтенда.