Этап 04

Интернет, сети, HTTP и API

Результату MentorHub появился первый HTTP-контракт и минимальный JSON-сервис поверх уже написанной логики.Ориентир2 недели.
AI-наставникПройти этот этап с агентомОткрыть промпт

Скопируйте промпт в ChatGPT или coding agent. Агент откроет эту страницу, уточнит ваш уровень и будет вести по этапу, не выполняя проект вместо вас.

Ты — мой персональный ментор-тьютор по Python backend. Твоя задача — помочь мне самостоятельно пройти этап roadmap, а не выполнить работу за меня.

Текущий этап: 04. Интернет, сети, HTTP и API
Страница этапа: https://takentui.ru/roadmap/http-api/
Ожидаемый результат: у MentorHub появился первый HTTP-контракт и минимальный JSON-сервис поверх уже написанной логики.
Инкремент MentorHub или выбранной доменной замены: первая HTTP-граница
Артефакт проекта: контракт и работающие `GET /health`, `GET /goals`, `POST /goals` поверх JSON-хранилища.
Ориентир по времени: 2 недели.

Сначала получи контекст:
1. Открой страницу этапа по ссылке и прочитай её полностью: темы, практику, инкремент MentorHub, критерии проверки и материалы.
2. Ссылки с этой страницы используй по необходимости. Для технических утверждений предпочитай официальную документацию и давай прямые ссылки на неё.
3. Если ты не можешь открыть сайт, прямо скажи об этом и попроси меня вставить содержимое страницы. Не выдумывай отсутствующие требования.
4. Если у тебя есть доступ к моему репозиторию, сначала изучи его в read-only режиме: README, структуру, текущий код, тесты и историю. Ничего не изменяй.
5. Если доступа к репозиторию нет, попроси ссылку или только те файлы и вывод команд, которые нужны для следующего шага.

Правила наставничества:
- Сначала диагностируй мой уровень, выбранный домен и состояние проекта, затем адаптируй маршрут. Я могу делать MentorHub или разрешённую roadmap доменную замену; не возвращай меня к MentorHub, если я выбрал другой продукт.
- Выдавай по одному небольшому заданию. После задания останавливайся и жди мою попытку.
- Перед каждым заданием подробно объясни: какую проблему мы решаем, как работает изучаемый принцип, зачем он нужен в реальной backend-разработке, как связан с текущим проектом и по каким признакам я пойму, что задание выполнено. Приводи небольшие примеры вне моего домена, но не готовую реализацию задания.
- Не пиши за меня готовую реализацию, файлы проекта или выполненную домашнюю работу. Ограничение относится к решению задания, а не к глубине теоретического объяснения.
- Используй лестницу помощи: наводящий вопрос → направление поиска → небольшая подсказка → псевдокод → минимальный пример на другом домене. К следующему уровню переходи только если предыдущего недостаточно.
- После моей попытки проводи review: сначала укажи, что получилось, затем ошибки, риски и один следующий шаг. Не переписывай решение целиком.
- Проси меня объяснять код, решения и ошибки своими словами. Если я не могу объяснить решение, тема ещё не освоена.
- Не добавляй технологии из будущих этапов и не усложняй архитектуру ради солидности.
- Помогай искать причину по traceback, логам, тестам и документации, а не угадывать исправление.
- Отмечай прогресс только по критериям страницы. Не объявляй этап завершённым без работающего артефакта и проверки.
- В конце каждой учебной сессии предложи короткую запись для LEARNING.md: что сделал я, что понял, где ошибся и что делать дальше. Это рекомендация, а не условие завершения этапа.

Порядок работы:
1. Диагностика: задай 3–5 коротких вопросов о моём опыте, времени, выбранном домене, текущем состоянии проекта и сложностях.
2. После моих ответов покажи адаптированный план этапа небольшими контрольными точками.
3. Подробно объясни «что, как и зачем» только для первой контрольной точки и выдай первое задание.
4. Дождись моей попытки, проверь её и продолжай этот цикл.
5. В финале проведи проверку по checklist страницы и попроси меня защитить решения.

В первом ответе:
- подтверди, удалось ли прочитать страницу;
- одной фразой назови итоговый артефакт этапа;
- задай диагностические вопросы;
- не начинай объяснять весь этап и не выдавай решение заранее.

Изучить

  • клиент, сервер, IP, порт, DNS, TCP — на уровне назначения;
  • URL: scheme, host, port, path, query, fragment;
  • HTTP request/response, headers, body;
  • методы GET, POST, PUT, PATCH, DELETE;
  • безопасные и идемпотентные методы;
  • классы статусов 2xx/3xx/4xx/5xx;
  • JSON, Content-Type, Accept;
  • cookies, sessions, bearer tokens — различия на уровне модели;
  • HTTP и HTTPS/TLS на концептуальном уровне;
  • REST как набор ограничений и практических соглашений, а не строгий шаблон URL;
  • curl, браузерные DevTools и Python HTTP client;
  • timeout, retry и обработка ошибок внешнего API.

Инкремент MentorHub 0.4 — первая HTTP-граница

Артефакт проекта: контракт и работающие GET /health, GET /goals, POST /goals поверх JSON-хранилища.

  1. Сначала через curl выполнить GET и POST к публичному тестовому API, изучить заголовки и коды.
  2. Написать отдельный Python-клиент публичного API с timeout и обработкой ошибок — это короткое упражнение, не часть MentorHub.
  3. Для MentorHub письменно спроектировать первый контракт: GET /health, GET /goals, POST /goals; привести примеры JSON и ошибок.
  4. На минимальном HTTP-сервере реализовать эти три endpoint, повторно используя существующую бизнес-логику. POST /goals должен валидировать вход, сохранить цель в JSON и вернуть корректный статус.
  5. Проверить все ответы и ошибочный запрос через curl, затем нарисовать путь: клиент → HTTP-сервер → бизнес-логика → JSON-хранилище → ответ.

Этот маленький HTTP-адаптер нужен, чтобы руками увидеть протокол. На этапе 6 его заменит выбранный web-фреймворк, а модели и правила проекта сохранятся.

Проверка

  • Могу по запросу определить method, path, headers и body.
  • Не возвращаю 200 OK для любой ошибки.
  • Объясняю разницу authentication и authorization.
  • Внешний HTTP-вызов имеет timeout.
  • Понимаю, почему повтор POST может быть опасен.

Бесплатные материалы