149 lines
7.5 KiB
HTML
149 lines
7.5 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<title>Справка по API — каталог пользователей</title>
|
||
<link rel="stylesheet" href="/css/app.css">
|
||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||
<style>
|
||
.help-card { max-width: 820px; }
|
||
.help-card h2 { margin-bottom: 4px; }
|
||
.help-card .subtitle { margin-bottom: 24px; }
|
||
.help-section { margin-top: 24px; }
|
||
.help-section h3 { font-size: 16px; color: var(--text); margin-bottom: 10px; }
|
||
.help-section p, .help-section li { color: var(--text-2); font-size: 14px; line-height: 1.6; }
|
||
.help-section ol, .help-section ul { padding-left: 20px; margin: 8px 0; }
|
||
.help-section li { margin: 4px 0; }
|
||
code {
|
||
background: var(--surface-2);
|
||
border: 1px solid var(--border);
|
||
border-radius: 6px;
|
||
padding: 1px 6px;
|
||
font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
|
||
font-size: 12.5px;
|
||
color: var(--accent-hover);
|
||
}
|
||
.code-block {
|
||
background: #0f172a; color: #cbd5e1;
|
||
border-radius: var(--radius-sm);
|
||
padding: 14px 16px;
|
||
font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
|
||
font-size: 12.5px;
|
||
overflow-x: auto;
|
||
white-space: pre;
|
||
margin: 10px 0;
|
||
line-height: 1.6;
|
||
}
|
||
.code-block .c { color: #64748b; }
|
||
table.spec { margin-top: 10px; }
|
||
table.spec th, table.spec td { font-size: 13px; }
|
||
.endpoint {
|
||
background: var(--accent-soft);
|
||
border: 1px solid var(--accent-soft-2);
|
||
border-radius: var(--radius-sm);
|
||
padding: 10px 14px;
|
||
font-family: ui-monospace, Consolas, monospace;
|
||
font-size: 14px;
|
||
color: var(--accent-hover);
|
||
font-weight: 600;
|
||
display: inline-block;
|
||
margin: 6px 0;
|
||
}
|
||
.back-link { margin-top: 28px; text-align: center; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="page-wrap">
|
||
<div class="card help-card">
|
||
<h2>Справка по API</h2>
|
||
<p class="subtitle">Каталог пользователей Active Directory</p>
|
||
|
||
<div class="help-section">
|
||
<h3>Что это</h3>
|
||
<p>Сервис предоставляет HTTP-API для получения списка пользователей домена: ФИО, должность, телефон, логин и почта. Поле «Должность» хранится в Active Directory в атрибуте <code>description</code> (Описание).</p>
|
||
</div>
|
||
|
||
<div class="help-section">
|
||
<h3>1. Получите ключ</h3>
|
||
<ol>
|
||
<li>Откройте <a href="/admin">панель администратора</a>.</li>
|
||
<li>В блоке «Настройки» найдите поле <strong>API-ключ для каталога</strong>.</li>
|
||
<li>Нажмите <strong>«Новый ключ»</strong> — будет сгенерирован новый ключ (старый перестанет работать).</li>
|
||
<li>Скопируйте ключ кнопкой <strong>«Копировать»</strong>.</li>
|
||
</ol>
|
||
<p>Ключ показывается только в админке и хранится в настройках сервиса. Храните его в секрете.</p>
|
||
</div>
|
||
|
||
<div class="help-section">
|
||
<h3>2. Эндпоинт</h3>
|
||
<div class="endpoint">GET /api/directory/users</div>
|
||
<p>Ключ передаётся в заголовке <code>X-API-Key</code> или параметром <code>?api_key=</code>.</p>
|
||
|
||
<h3>Примеры запросов</h3>
|
||
<div class="code-block"># Заголовком (Linux / macOS / Git Bash)
|
||
curl -H "X-API-Key: ВАШ_КЛЮЧ" \
|
||
https://ВАШ_СЕРВЕР/api/directory/users
|
||
|
||
<span class="c"># Параметром</span>
|
||
curl "https://ВАШ_СЕРВЕР/api/directory/users?api_key=ВАШ_КЛЮЧ"
|
||
|
||
<span class="c"># PowerShell (Windows)</span>
|
||
$headers = @{ "X-API-Key" = "ВАШ_КЛЮЧ" }
|
||
Invoke-RestMethod -Uri "https://ВАШ_СЕРВЕР/api/directory/users" -Headers $headers</div>
|
||
</div>
|
||
|
||
<div class="help-section">
|
||
<h3>3. Формат ответа</h3>
|
||
<p>Успешный ответ — JSON со списком пользователей:</p>
|
||
<div class="code-block">{
|
||
"success": true,
|
||
"count": 2,
|
||
"users": [
|
||
{
|
||
"login": "ivanov.i",
|
||
"fio": "Иванов Иван Иванович",
|
||
"position": "Учитель информатики",
|
||
"phone": "+79161234567",
|
||
"email": "ivanov.i@school25.ru"
|
||
}
|
||
]
|
||
}</div>
|
||
<p>Если поля нет (не заполнено) — возвращается пустая строка.</p>
|
||
|
||
<h3>Коды ошибок</h3>
|
||
<table class="spec table-wrap">
|
||
<thead>
|
||
<tr><th>Код</th><th>Значение</th></tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr><td data-label="Код">200</td><td data-label="Значение">Успех</td></tr>
|
||
<tr><td data-label="Код">401</td><td data-label="Значение">Неверный или отсутствующий API-ключ</td></tr>
|
||
<tr><td data-label="Код">503</td><td data-label="Значение">Ключ не настроен (сгенерируйте его в админке)</td></tr>
|
||
<tr><td data-label="Код">500</td><td data-label="Значение">Ошибка сервера или недоступен LDAP</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="help-section">
|
||
<h3>4. Описание полей</h3>
|
||
<table class="spec table-wrap">
|
||
<thead>
|
||
<tr><th>Поле</th><th>Описание</th><th>Атрибут AD</th></tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr><td data-label="Поле"><code>login</code></td><td data-label="Описание">Логин (sAMAccountName)</td><td data-label="Атрибут AD"><code>sAMAccountName</code></td></tr>
|
||
<tr><td data-label="Поле"><code>fio</code></td><td data-label="Описание">ФИО</td><td data-label="Атрибут AD"><code>displayName</code></td></tr>
|
||
<tr><td data-label="Поле"><code>position</code></td><td data-label="Описание">Должность</td><td data-label="Атрибут AD"><code>description</code></td></tr>
|
||
<tr><td data-label="Поле"><code>phone</code></td><td data-label="Описание">Телефон</td><td data-label="Атрибут AD"><code>telephoneNumber</code></td></tr>
|
||
<tr><td data-label="Поле"><code>email</code></td><td data-label="Описание">Электронная почта</td><td data-label="Атрибут AD"><code>mail</code></td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="back-link"><a href="/">На главную</a> · <a href="/auth">Вход</a> · <a href="/register">Регистрация</a></div>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|