Learning Platform
Глоссарий Troubleshooting
Урок 01.01 · 12 мин
Начальный
REST APIHTTPВведениеData Engineering

Про этот курс

Это бесплатный практический курс по REST API и форматам данных для будущего Junior Data Engineer. Если вы уже умеете писать на Python, разбираетесь в SELECT-ах и собираетесь идти в команду, где данные приходят не из готовой таблицы PostgreSQL, а из десятка внешних сервисов через HTTP — этот курс закрывает большой и важный пробел: как разговаривать с интернетом по делу.

Курс рассчитан на 50-55 часов суммарно, разбит на 15 модулей, на русском, актуален на май 2026. Целевые версии: requests 2.34, httpx 0.28, Python 3.13, OpenAPI 3.1 (с обзором 3.2). Каждый урок — это лекция, диаграммы, упражнения для терминала и контрольный квиз. По всему курсу один и тот же фокус: «как оно работает на самом деле», а не «вот функция, скопируй».


Кому этот курс подходит

Идеальный читатель этого курса — это вы, если:

Портрет читателя курса
Junior DEData Engineer 0-2 года опыта, или человек, который через 3-6 месяцев пойдёт собеседоваться на эту роль
нужно
Уверенные APIНе 'умею вызвать requests.get', а 'понимаю, что произойдёт между моим клиентом и сервером -- и могу починить, если что'
PythonУровень нашего курса python-fundamentals: функции, классы, dict/list, обработка исключений, виртуальные окружения
Terminalcd, ls, mkdir, запуск программ. macOS Terminal, Linux shell или Windows WSL -- всё подходит
HTTPМожет быть, делали requests.get и видели JSON в ответе. Что значит 401 vs 403, почему PUT идемпотентен -- туман

Курс не для тех, кто впервые слышит слово «терминал» или путает Python с JavaScript — таким людям сначала нужны базы программирования. Курс также не для backend-инженеров с пятью годами опыта в проектировании API — для них тут будет скучно. А вот если Python — ваш рабочий инструмент, а HTTP пока ассоциируется с «адресной строкой браузера и иногда requests» — добро пожаловать. Через 15 модулей у вас будет жёсткое, до байтов, понимание, как устроена коммуникация в современных системах.


Анатомия HTTP: методы, заголовки, статусы

Почему ещё один курс по API в 2026 году

Курсов про API в рунете много. Большинство выглядит так: «вот requests.get, он делает запрос», «вот response.json(), он парсит JSON», «вот OAuth2 — там нужен токен, нажмите кнопку». Через неделю после прохождения такого курса в голове остаётся ощущение «что-то про API было», но не остаётся понимания, почему requests.post(url, json=data) отправляет один Content-Type, а requests.post(url, data=data) — совсем другой.

В индустрии в это время происходит следующее. Junior DE приходит на работу. Ему дают задачу: «забери данные из API партнёра, положи в наш Postgres». Junior пишет requests.get(url).json() и идёт обедать. Возвращается — скрипт упал на 1000-м запросе с HTTPError: 429. Что делать — непонятно. На курсе про 429 не говорили, потому что «продвинутая тема».

Этот курс построен иначе. Когда мы говорим «PUT идемпотентен» — мы тут же запускаем curl -X PUT дважды и смотрим, что состояние сервера не меняется после второго запроса. Когда говорим «JSON — это текстовый формат» — открываем raw bytes и считаем, что там за каждым символом. Когда говорим «OAuth2 Authorization Code flow» — мы проходим все шесть шагов, открываем в DevTools каждый redirect и смотрим, что в URL.

NOTE

Junior, который понимает HTTP до байтов, через год становится Middle. Junior, который умеет только requests.get и копирует Stack Overflow при первой ошибке — через год всё ещё ходит в Slack-чат с вопросом ‘у меня запрос возвращает 401, что делать’.


Что внутри

15 модулей, ~80 уроков, ~30 практических заданий. Покрываем всё, с чем сталкивается Data Engineer на работе при интеграции с внешними сервисами:

Прогрессия курса -- от первого HTTP-запроса до production ETL
Модули 00-04Введение, HTTP до байтов, HTTPS/кэш/CORS, форматы данных, REST принципы. Без этого блока остальное бессмысленно
Модули 05-08Python-клиенты (requests, httpx), OpenAPI, аутентификация (OAuth2/JWT), пагинация и устойчивость. Ежедневный набор Junior DE
Модули 09-11GraphQL, gRPC, real-time API (webhooks/SSE/WebSocket), бинарные форматы Avro и Parquet. То, что отличает middle от junior
Модули 12-13Тестирование API (pytest, mocking, VCR, contract testing) и capstone-проект -- реальный multi-source ETL

В вашей будущей работе вы будете писать requests.get десятки раз в день, читать OpenAPI-схемы пару раз в неделю, разбираться с OAuth2 раз в месяц, и ровно один раз — в момент, когда что-то развалилось ночью — будете лезть в логи и пытаться понять, почему ответ от сервера весит 5 MB и парсится 30 секунд. Курс готовит ко всему этому, особенно к последнему.


Это бесплатно — и без подвоха

Курс полностью бесплатный. Нет paid tier, нет «купи курс за 99 рублей, чтобы открыть остальные модули», нет email-подписок с обещанием «20 советов про API в формате PDF». Всё содержимое — здесь, открыто, навсегда.

Почему? Потому что хороших бесплатных русскоязычных курсов по API на уровне глубже «вот requests.get» — почти нет. Курс существует, чтобы поднять русскоязычных Junior DE на одну ступеньку выше — это полезно индустрии и людям, которые в неё заходят.


Где этот курс в общей картине

Курс «REST API & Data Formats» — часть более крупной программы по подготовке Junior DE. Логика такая:

Место курса в программе подготовки Junior DE
Python FundamentalsБазовый Python: функции, классы, модули, dict/list, обработка исключений, виртуальные окружения. Без этого работа с requests/httpx будет на ощупь
Этот курсREST API + форматы данных. После него вы умеете забрать данные из любого API и сохранить их в нужном формате
ДальшеРасширенный Python (concurrency, async)
ДальшеAirflow -- оркестрация ETL-пайплайнов
ДальшеStorage Formats -- глубокое погружение в Parquet, Iceberg, Delta

После этого курса вы сможете написать Python-скрипт, который забирает данные из REST API партнёра с пагинацией, ретраями и обработкой 429, парсит ответ, валидирует через pydantic и кладёт результат в Parquet. Это и есть «один шаг до Airflow-пайплайна» — оркестрация добавится в следующем курсе.


Что нужно от вас

Курс читается как книга, но не работает как книга. Чтобы реально вынести знания, нужно:

  1. Открыть терминал параллельно с уроком. В каждом модуле есть блоки «Попробуй сам» — это не риторика. Каждый curl или Python-скрипт должен быть выполнен руками. Чтение, не подкреплённое практикой, забывается за две недели.
  2. Делать упражнения и квизы. В конце каждого урока — квиз из 4-5 вопросов. Не пропускайте. Квизы построены так, чтобы вытащить «вроде понял» и проверить на «реально понял».
  3. Не торопиться. 50 часов курса лучше растянуть на 4-6 недель, чем уплотнить в неделю. API — это инструмент, навыки нарабатываются не объёмом контента, а количеством повторений в реальных задачах.

В следующем уроке посмотрим, что именно в 15 модулях — общий обзор, который поможет сориентироваться, где вы сейчас и куда идёте.


Как создавался курс

Курс создан при участии Claude (Anthropic) как соавтора: ИИ помогал писать материалы, структурировать темы, генерировать примеры кода и диаграммы. Каждая глава проходила ручную сверку с первоисточниками — спецификациями, документацией, исходным кодом рассматриваемых систем — но гарантировать 100% точность невозможно.

Если вы заметили неточность, опечатку или хотите предложить улучшение — напишите в Telegram-группу курса. Это самый ценный вклад в курс, который вы можете сделать.


Углублённое изучение с Claude

Курс рассчитан на самостоятельное изучение, но любая теория быстрее ложится, если задавать вопросы. Рекомендую держать рядом браузерное расширение Claude (claude.com/download) — оно работает с контентом открытой страницы: выделяете кусок урока и спрашиваете напрямую.

Сценарии, которые особенно хорошо работают для углублённого погружения:

  • «Объясни проще» / «дай ещё один пример» — когда формулировка из урока не дошла с первого раза.
  • «Покажи, как это устроено на уровне кода / железа» — когда хочется спуститься на слой ниже того, что даёт урок.
  • «Как это связано с [другая тема курса]» — когда нужно увязать концепцию с тем, что было раньше.
  • «У меня в проекте стек X — как применить?» — когда хочется примерить материал на свой реальный кейс.

Это не замена курсу, а способ ускорить интеграцию материала в вашу картину мира. Если что-то из ответов Claude расходится с уроком — присылайте в Telegram-группу, курс будет уточнён.


Нашли ошибку?

Если заметили неточность, опечатку или хотите предложить улучшение:

Telegram-группа курса
Обсуждение, вопросы, предложения

Telegram-канал

Подписывайтесь, чтобы узнавать об обновлениях и новых курсах:

@levoely_channel
Новости, обновления, новые курсы

Проверка знанийKnowledge check
Почему этот курс делает упор на 'как HTTP работает на самом деле' (raw запросы, статус-коды, заголовки), а не на 'вот requests.get и поехали'?
ОтветAnswer
Потому что requests, httpx и любая другая высокоуровневая библиотека -- это всего лишь обёртка над HTTP. Когда сервер вернёт неожиданный ответ (например, редирект 308 вместо ожидаемого 301, или 429 с заголовком Retry-After: 120), у Junior, который знает только requests.get(), нет инструмента понять, что произошло. Он будет искать в Google готовый ответ для своей конкретной ситуации. А Junior, который понимает HTTP до уровня запроса/ответа, заголовков и кодов, посмотрит response.headers, сравнит с тем, что ожидал увидеть, и поймёт, почему сервер ведёт себя так. Курс готовит Junior второго типа: чтобы любая библиотека была интерфейсом, а не магической чёрной коробкой.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 3. Для кого в первую очередь написан этот курс?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3