kwork-api/docs/HAR_ENDPOINTS_MAPPING.md
root e985e03ddb feat: Kwork API client with full CI/CD and E2E tests
Core Features:
- Async API client for Kwork.ru (45+ endpoints)
- Pydantic models for type-safe responses
- Comprehensive error handling (KworkAuthError, KworkApiError, etc.)
- 93% test coverage (57 unit tests)

CI/CD Pipeline:
- 3 parallel jobs: lint, test, security
- Ruff for linting/formatting (150x faster than flake8)
- MyPy for static type checking
- pip-audit for security scanning
- Pre-commit hooks for code quality

E2E Testing:
- Login/logout authentication
- Session restoration
- All endpoints tested against real API

Documentation:
- API reference with examples
- Usage guide
- Contributing guidelines

Based on HAR analysis (mitmproxy + har-analyzer skill):
- Correct endpoints: api.kwork.ru
- Proper authentication: Basic auth + cookies
- Form-urlencoded login payload
2026-03-29 23:31:28 +00:00

215 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HAR Endpoints Mapping
Сопоставление endpoints из `client.py` с реальными endpoints из HAR файла.
---
## 📊 Сопоставление endpoints
### ✅ Работающие endpoints (совпадают с HAR)
| client.py Endpoint | HAR Endpoint | Status | Notes |
|-------------------|--------------|--------|-------|
| `/projects` | `POST /projects` | ✅ 200 | GET в HAR, POST в client.py |
| `/api/validation/checktext` | N/A | ❓ | Нет в HAR - возможно не использовался |
---
### ❌ Неработающие endpoints (нужно исправить)
| client.py Endpoint | HAR Endpoint (реальный) | Status | Как исправить |
|-------------------|------------------------|--------|---------------|
| `/catalogMainv2` | `GET /categories/{slug}` | ❌ 404 | Использовать `GET /categories/{slug}` или найти JSON API |
| `/getKworkDetails` | `GET /projects/{id}/view` | ❌ 404 | Использовать `GET /projects/{id}/view` |
| `/userReviews` | `POST /user/get_reviews` | ❌ 404 | ✅ Исправить на `/user/get_reviews` |
| `/cities` | N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
| `/countries` | N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
| `/user` | `GET /user/{username}` | ❌ 404 | ✅ Исправить на `/user/{username}` |
---
## 🔍 Детальный анализ
### 1. Каталог кворков
**Текущий (не работает):**
```python
POST /catalogMainv2 # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /categories/design # ✅ 200 OK
GET /projects # ✅ 200 OK
```
**Проблема:** HAR показывает HTML страницы, не JSON API.
**Решение:** Нужно найти JSON API endpoint или парсить HTML.
**Как найти:**
1. Открыть DevTools → Network → XHR/Fetch
2. Перейти на https://kwork.ru/categories/design
3. Искать JSON запросы с данными кворков
4. Или искать в HAR файлы с "kworks", "catalog", "list"
---
### 2. Детали кворка
**Текущий (не работает):**
```python
POST /getKworkDetails # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /projects/3127023/view # ✅ 200 OK
```
**Проблема:** HAR показывает HTML страницу проекта.
**Решение:** Использовать `GET /projects/{id}/view` и парсить HTML.
**Как найти JSON API:**
1. Открыть DevTools → Network → XHR/Fetch
2. Перейти на https://kwork.ru/projects/{id}/view
3. Искать JSON запросы
---
### 3. Отзывы пользователя
**Текущий (не работает):**
```python
POST /userReviews # ❌ 404 Not Found
```
**Реальный из HAR:**
```
POST /user/get_reviews # ✅ 200 OK
Payload: {"userId":126921,"type":"positive"}
```
**Решение:** ✅ Исправить endpoint на `/user/get_reviews`
---
### 4. Информация о пользователе
**Текущий (не работает):**
```python
POST /user # ❌ 404 Not Found
```
**Реальный из HAR:**
```
GET /user/jtjagomega # ✅ 200 OK (HTML страница)
GET /user/alexey-liss # ✅ 200 OK (HTML страница)
POST /api/user/checknotify # ✅ 200 OK (JSON API, уведомления)
```
**Проблема:** Kwork **НЕ предоставляет JSON API** для user info!
**Решение:**
- Для профиля: `GET /user/{username}` + парсинг HTML
- Для уведомлений: `POST /api/user/checknotify` (уже реализовано)
**В client.py сейчас:**
```python
# Временно используем checknotify как placeholder
return await self.client._request("POST", "/api/user/checknotify")
```
---
### 5. Справочные данные (города, страны)
**Текущие (не работают):**
```python
POST /cities # ❌ 404 Not Found
POST /countries # ❌ 404 Not Found
```
**В HAR:** Нет таких endpoints.
**Проблема:** Возможно данные встроены в HTML или загружаются через JavaScript.
**Как найти:**
1. Открыть DevTools → Network
2. Перейти на страницу с формой (например, настройки)
3. Искать запросы с "cities", "countries", "regions"
4. Или искать в исходном коде страницы `<script>` с данными
**Альтернатива:** Парсить HTML страницу с формами.
---
## 🛠 План исправлений
### Приоритет 1 (есть в HAR):
1.`/userReviews``/user/get_reviews`
2.`/user``/user/{username}`
### Приоритет 2 (нужно искать):
3. 🔍 `/catalogMainv2` → искать JSON API или парсить HTML
4. 🔍 `/getKworkDetails` → использовать `/projects/{id}/view`
5. 🔍 `/cities`, `/countries` → искать в HTML или JavaScript
---
## 🔬 Как искать новые endpoints
### Метод 1: DevTools Network Tab
1. Открыть https://kwork.ru
2. DevTools (F12) → Network → XHR/Fetch
3. Выполнить действие (поиск, просмотр кворка и т.д.)
4. Искать JSON запросы
### Метод 2: Анализ HAR файла
```bash
cd /root
python3 << 'EOF'
import json
with open('kwork-dump.har') as f:
har = json.load(f)
# Искать конкретные endpoints
for entry in har['log']['entries']:
url = entry['request']['url']
if 'catalog' in url or 'kwork' in url or 'review' in url:
print(f"{entry['request']['method']} {url.split('?')[0]}")
EOF
```
### Метод 3: Поиск в JavaScript файлах
```bash
# Скачать все JS файлы и искать API endpoints
grep -r "api/" /path/to/js/files/ | grep -v ".map"
```
### Метод 4: Перехват трафика
Использовать mitmproxy для перехвата всех запросов:
```bash
mitmproxy --mode transparent --listen-port 8080
```
---
## 📝 Примечания
- **HAR файл** содержит только запросы которые были сделаны во время записи
- **Не все endpoints** попали в HAR (нужно дополнительно исследовать)
- **HTML vs JSON:** Kwork использует смешанный подход - некоторые данные в HTML, некоторые через JSON API
- **Динамические endpoints:** Некоторые endpoints могут требовать CSRF токены или другие заголовки
---
_Updated: 2026-03-29_