<!doctype html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Hono — лаборатория HTTP API</title><link rel="stylesheet" href="bootstrap.min.css"><link rel="stylesheet" href="style.css"></head><body><main class="container-fluid workshop">
<header><div class="eyebrow">NODE.JS · WEB REQUEST / RESPONSE</div><h1>Hono: лаборатория API</h1><p>Меняйте запросы, проверяйте ответы и наблюдайте поток данных.</p><div class="runtime">Настоящий Hono 4.13.18 · <strong>app.request в браузере</strong>. Запросы не отправляются на публичный Node-сервер. Все заявки вымышлены и живут в памяти вкладки.</div></header>
<div class="layout"><aside><label for="scenario" class="form-label">Выберите опыт</label><select id="scenario" class="form-select"></select><p class="aside-note">Девять ситуаций из практики API. Начните с готового запроса, затем измените параметры.</p><nav id="scenario-nav" aria-label="Опыты Hono"></nav><a href="../hono-project.zip" class="archive" download>Скачать весь проект ZIP</a><a href="README.md" target="_blank" rel="noopener">Инструкция запуска</a></aside>
<section class="workspace" aria-label="Запрос и ответ"><div class="panel"><h2 id="scenario-title"></h2><p id="goal"></p><p id="tip" class="tip"></p><div id="variants" class="variants" aria-label="Готовые запросы"></div>
<form id="request-form"><div class="request-line"><div><label for="method" class="form-label">Метод</label><select id="method" class="form-select"><option>GET</option><option>POST</option><option>OPTIONS</option></select></div><div><label for="path" class="form-label">Путь и параметры</label><input id="path" class="form-control" maxlength="300" required aria-describedby="path-help"><div id="path-help" class="form-text">Только /api/… — без адресов других сайтов.</div></div></div>
<label for="token" class="form-label mt-3">Учебный Bearer-токен</label><input id="token" class="form-control" maxlength="80" placeholder="Пусто — без авторизации" autocomplete="off"><div class="form-text">Для опыта 6: demo-anna. Настоящие секреты сюда не вводите.</div>
<div id="body-wrap"><label for="body" class="form-label mt-3">Тело JSON</label><textarea id="body" class="form-control code-input" rows="5" maxlength="5000" spellcheck="false"></textarea><div id="bytes" class="form-text"></div></div>
<div class="actions"><button type="submit" id="run" class="btn btn-success">Выполнить запрос</button><button type="button" id="cancel" class="btn btn-outline-danger" disabled>Остановить поток</button><button type="button" id="reset" class="btn btn-outline-secondary">Сбросить всё</button></div></form></div>
<div class="panel result"><h2>Ответ API</h2><p id="status" role="status" aria-live="polite">Запрос ещё не выполнен.</p><div id="progress-wrap" hidden><label for="progress">Прогресс потока</label><progress id="progress" max="100" value="0"></progress><span id="progress-label">0%</span></div><pre id="response" tabindex="0" aria-label="Тело ответа">Нажмите «Выполнить запрос».</pre><button id="download-json" class="btn btn-outline-success" disabled>Скачать результат JSON</button><details><summary>Заголовки ответа</summary><pre id="headers" tabindex="0">—</pre></details><details open><summary>Порядок middleware</summary><ol id="events"></ol></details><details><summary>Исходник текущего запроса</summary><pre id="code" tabindex="0"></pre><button id="download-code" class="btn btn-outline-success">Скачать .mjs</button><p class="form-text">Файл предназначен для Node.js внутри скачанного проекта. Полный router: <a href="source/router.js.txt" target="_blank" rel="noopener">посмотреть код</a>.</p></details></div></section></div>
<footer>Учебная мастерская ae-nekrasov.ru · данные не сохраняются · <a href="THIRD-PARTY-LICENSES.txt" target="_blank" rel="noopener">лицензии библиотек</a></footer></main><script type="module" src="app.js"></script></body></html>
