Коды ошибок и пагинация
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 | Ошибка сервера |
502 | Bad Gateway | Внешний сервис недоступен (YClients и т.д.) |
504 | Gateway Timeout | Таймаут внешнего сервиса |
Формат ошибки
{
"detail": "Описание ошибки",
"code": "error_code"
}
Ошибка валидации (400):
{
"phone": ["Введите корректный номер телефона."],
"date": ["Это поле обязательно."]
}
Пагинация
Списочные эндпоинты возвращают пагинированный ответ:
{
"count": 150,
"next": "https://api.salonai.ru/api/clients/?page=2",
"previous": null,
"results": [...]
}
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
page | integer | Номер страницы (по умолчанию 1) |
page_size | integer | Кол-во записей на странице (по умолчанию 20) |
GET /api/clients/?page=2&page_size=50
Фильтрация и сортировка
# Фильтрация
GET /api/records/?status=confirmed&date=2026-08-01
# Сортировка по убыванию
GET /api/records/?ordering=-created_at
# Поиск
GET /api/clients/?search=Иванова
Формат дат
Все даты в формате ISO 8601:
2026-08-01T10:30:00Z ← UTC
2026-08-01T13:30:00+03:00 ← Московское время
2026-08-01 ← только дата
Лимиты запросов
При превышении лимита:
HTTP 429 Too Many Requests
Retry-After: 60