-
Notifications
You must be signed in to change notification settings - Fork 0
API
n0pashkov edited this page Mar 2, 2025
·
1 revision
Система заявок предоставляет REST API для взаимодействия с ней. Все эндпоинты API доступны по базовому пути /api/v1/.
Для доступа к большинству эндпоинтов API требуется аутентификация с использованием JWT токена. Токен должен быть передан в заголовке Authorization в формате Bearer <token>.
POST /api/v1/token
Тело запроса:
{
"username": "string",
"password": "string"
}Ответ:
{
"access_token": "string",
"token_type": "bearer"
}GET /api/v1/users/
Параметры запроса:
-
skip(int, опционально): количество пропускаемых записей (для пагинации) -
limit(int, опционально): максимальное количество возвращаемых записей
Ответ:
[
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": true,
"role": "user"
}
]POST /api/v1/users/
Тело запроса:
{
"email": "user@example.com",
"username": "string",
"password": "string",
"full_name": "string",
"role": "user"
}Ответ:
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": true,
"role": "user"
}GET /api/v1/users/me/
Ответ:
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": true,
"role": "user"
}GET /api/v1/users/{user_id}
Ответ:
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": true,
"role": "user"
}PUT /api/v1/users/{user_id}
Тело запроса:
{
"email": "user@example.com",
"username": "string",
"password": "string",
"full_name": "string",
"role": "user"
}Ответ:
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": true,
"role": "user"
}DELETE /api/v1/users/{user_id}
Ответ:
{
"id": 1,
"email": "user@example.com",
"username": "string",
"full_name": "string",
"is_active": false,
"role": "user"
}GET /api/v1/tickets/
Параметры запроса:
-
skip(int, опционально): количество пропускаемых записей (для пагинации) -
limit(int, опционально): максимальное количество возвращаемых записей -
status(string, опционально): фильтр по статусу заявки -
priority(string, опционально): фильтр по приоритету заявки -
category(string, опционально): фильтр по категории оборудования
Ответ:
[
{
"id": 1,
"title": "string",
"description": "string",
"status": "new",
"priority": "medium",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": null
}
]POST /api/v1/tickets/
Тело запроса:
{
"title": "string",
"description": "string",
"priority": "medium",
"category": "string"
}Ответ:
{
"id": 1,
"title": "string",
"description": "string",
"status": "new",
"priority": "medium",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": null
}GET /api/v1/tickets/{ticket_id}
Ответ:
{
"id": 1,
"title": "string",
"description": "string",
"status": "new",
"priority": "medium",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": null
}PUT /api/v1/tickets/{ticket_id}
Тело запроса:
{
"title": "string",
"description": "string",
"priority": "high",
"status": "in_progress",
"category": "string",
"assigned_to_id": 2
}Ответ:
{
"id": 1,
"title": "string",
"description": "string",
"status": "in_progress",
"priority": "high",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": 2
}PUT /api/v1/tickets/{ticket_id}/assign/{agent_id}
Ответ:
{
"id": 1,
"title": "string",
"description": "string",
"status": "assigned",
"priority": "medium",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": 2
}PUT /api/v1/tickets/{ticket_id}/status/{status}
Ответ:
{
"id": 1,
"title": "string",
"description": "string",
"status": "completed",
"priority": "medium",
"category": "string",
"created_at": "2023-01-01T00:00:00",
"updated_at": "2023-01-01T00:00:00",
"user_id": 1,
"assigned_to": 2
}GET /api/v1/tickets/{ticket_id}/comments/
Ответ:
[
{
"id": 1,
"text": "string",
"created_at": "2023-01-01T00:00:00",
"ticket_id": 1,
"author_id": 1
}
]POST /api/v1/tickets/{ticket_id}/comments/
Тело запроса:
{
"text": "string"
}Ответ:
{
"id": 1,
"text": "string",
"created_at": "2023-01-01T00:00:00",
"ticket_id": 1,
"author_id": 1
}DELETE /api/v1/comments/{comment_id}
Ответ:
{
"success": true,
"message": "Comment deleted successfully"
}| Код | Описание |
|---|---|
| 400 | Неверный запрос |
| 401 | Не авторизован |
| 403 | Доступ запрещен |
| 404 | Ресурс не найден |
| 422 | Ошибка валидации |
| 500 | Внутренняя ошибка сервера |
import requests
# Авторизация
auth_response = requests.post(
"http://localhost:8000/api/v1/token",
json={"username": "user", "password": "password"}
)
token = auth_response.json()["access_token"]
# Создание заявки
headers = {"Authorization": f"Bearer {token}"}
ticket_response = requests.post(
"http://localhost:8000/api/v1/tickets/",
headers=headers,
json={
"title": "Не работает принтер",
"description": "Принтер HP в кабинете 101 не печатает",
"priority": "medium",
"category": "Принтеры и МФУ"
}
)
print(ticket_response.json())