Learning Platform
Глоссарий Troubleshooting
Урок 01.03 · 14 мин
Начальный
REST APIМетодикаИнструментыSandbox

Как учиться по этому курсу

Технические курсы, которые читают как книгу, не работают. Через две недели после прочтения вы помните общие идеи, но не помните, какой заголовок передать в requests.get, чтобы получить gzip-сжатый ответ. Это нормально — мозг устроен так, что моторная память (пальцы на клавиатуре) и декларативная (текст в голове) хранятся в разных местах.

Этот урок — про то, как настроить процесс, чтобы знания реально оседали. Минимум 30 минут на чтение этого урока — потому что без правильной настройки следующие 50 часов курса будут просто чтением, а не обучением.


Главное правило: терминал параллельно с уроком

Откройте этот курс в одной половине экрана, терминал — в другой. Каждая команда curl или Python-скрипт в уроке должна быть выполнена руками. Не скопирована в clipboard — а напечатана пальцами.

Раскладка экрана на время учёбы
Левая половинаБраузер с курсом. На macOS -- Cmd+стрелка влево пинит окно к левой половине экрана. На Windows -- Win+стрелка влево
50% экранаУдобно для длинного текста с диаграммами. На маленьких ноутбуках -- может быть 60/40
Правая половинаТерминал. На macOS лучше iTerm2, на Linux -- GNOME Terminal или Alacritty, на Windows -- Windows Terminal или WSL2 Ubuntu
50% экранаХватит для большинства команд. Если вывод длинный -- раскрывайте на полный экран временно

Почему именно пальцами, а не copy-paste? Потому что когда вы печатаете curl -X POST -H 'Content-Type: application/json' -d '{"name":"test"}' https://httpbin.org/post, ваш мозг запоминает: метод, заголовок, тело, URL. Это активная работа. Когда вы делаете Cmd+C / Cmd+V, мозг ничего не запоминает — он занят чем-то другим. Через неделю вы помните «была какая-то команда для POST», но не помните, как.

TIP

Backend-инженеры с 5-10 годами опыта набирают curl -v и httpie на автомате — мышцы пальцев знают эти команды без участия мозга. Так получается только через тысячи повторений. Начните формировать эту привычку с первого модуля.


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

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

Стек курса -- что должно быть установлено
Python 3.11+Целевая версия курса -- 3.13. Минимум 3.11 (нужен для современного httpx и pydantic v2). Установка через pyenv или официальный installer
pip + venvСтандартные инструменты, идут в комплекте с Python 3. Проверка: python3 -m venv --help
curlHTTP-клиент командной строки. Предустановлен на macOS и Linux. На Windows -- есть в современных версиях, или ставьте через Git Bash
httpieУдобный HTTP-клиент: вместо 'curl -X POST -H Content-Type:application/json -d ...' пишешь 'http POST url field=value'. Ставится pip install httpie
jqJSON-парсер для bash. Очень удобно в связке с curl: curl ... | jq '.field'. Ставится через brew install jq / apt install jq
VS Code или PyCharmЛюбой редактор, поддерживающий Python и Markdown. VS Code бесплатный, PyCharm Community тоже

Проверка установки — вот эти команды должны отработать без ошибок:

python3 --version
# Python 3.13.x (или 3.11+)

curl --version
# curl 8.x.x ...

# Опционально:
http --version
# 3.x.x

jq --version
# jq-1.7.x

Python-библиотеки, которые понадобятся в курсе, мы будем ставить по ходу — но если хотите подготовиться, создайте виртуальное окружение и установите базовый набор сразу.

mkdir -p ~/api-sandbox
cd ~/api-sandbox
python3 -m venv .venv
source .venv/bin/activate    # на Windows: .venv\Scripts\activate
pip install requests==2.34.* httpx==0.28.* pydantic==2.* pyyaml

Создайте api-sandbox

Через пару уроков мы будем экспериментировать с API. Чтобы не засорять реальные проекты, заведите отдельную директорию для упражнений:

mkdir -p ~/api-sandbox
cd ~/api-sandbox

Все упражнения курса делаются именно тут. Каждая практика — отдельная поддиректория:

~/api-sandbox/
├── lesson-01-http/         # упражнение из модуля 2
├── lesson-03-json/         # из модуля 4
├── lesson-05-requests/     # из модуля 6
└── ...
Структура api-sandbox
~/api-sandbox/Корень всех экспериментов. Тильда (~) -- это ваш home: /Users/имя на macOS, /home/имя на Linux
одна папка на модуль
lesson-NN-X/Например, lesson-01-http/, lesson-05-requests/. Удобно потом возвращаться и пересматривать
.venv/Виртуальное окружение Python -- изолированное от системного Python. Все pip install идут сюда
requirements.txtСписок зависимостей. Удобно фиксировать версии: pip freeze > requirements.txt

Не бойтесь сломать что-то в этой директории. Если venv накосорезил — удалите .venv/ и создайте заново. Это песочница, на то она и песочница.

WARNING

Никогда не делайте rm -rf в директории, где могут быть важные файлы. Перед командой удаления — pwd и убедитесь, что вы в ~/api-sandbox/, а не в ~/Projects/work-stuff/.


Используйте публичные API для практики

Чтобы не разворачивать свой сервер на каждом уроке, мы будем использовать публичные тестовые API. Это стандартный набор — все API в курсе из этого списка:

Публичные API для упражнений
httpbin.orgEcho-сервис: возвращает то, что вы прислали. Идеально для тестирования заголовков, методов, body. Поддерживает все HTTP-методы
jsonplaceholderFake REST API: посты, юзеры, комменты. Поддерживает GET/POST/PUT/PATCH/DELETE, но изменения не сохраняются
GitHub APIРеальный production API: api.github.com. С rate limits, OAuth2, pagination. Будем использовать в модулях 05-08
OpenWeatherAPI погоды с API key authentication. Бесплатный tier -- 60 запросов в минуту. Регистрация на openweathermap.org

Все эти API доступны без регистрации (кроме OpenWeather — но это бесплатно за 30 секунд). Не надо разворачивать ничего у себя на машине.


Делайте упражнения и решайте квизы

В конце большинства уроков — блок «Попробуй сам» с конкретным заданием. Это не риторика. Делайте каждое задание руками, даже если оно кажется элементарным. Цель — мышечная память.

После каждого урока — квиз из 4-5 вопросов. Тоже не пропускайте. Квизы построены так, чтобы вытащить «вроде понял» и проверить на «реально понял». Если вы ответили неправильно — не идите дальше, перечитайте раздел.

Цикл одного урока
1. Чтение15-20 минут спокойного чтения с одновременным выполнением curl-запросов в терминале
2. КомандыКаждый блок curl или Python в уроке -- выполняем руками. Не copy-paste, а печатаем
3. УпражнениеБлок 'Попробуй сам' -- задание шире, чем показанные команды. Заставляет применить знание
4. КвизПроверка понимания. Если ошибся -- перечитай раздел

Учите флаги через --help и man

В курсе мы покажем ключевые флаги для каждого инструмента. Но curl сам по себе — огромный, у него больше 250 флагов. Прокрутите man curl или curl --help all и посмотрите, что там есть. Не запоминайте — просто знайте, где искать.

curl --help            # короткая справка
curl --help all        # все доступные опции
man curl               # подробный мануал

# Для Python библиотек:
python3 -c "import requests; help(requests.get)"

Через полгода вы будете рефлекторно пробивать --help или dir()/help() в Python, когда увидите незнакомую команду или функцию, и это сэкономит тысячи походов в Google.

TIP

Хорошая привычка: когда вам в курсе встретилась новая команда или библиотека, потратьте 30 секунд на справку, проскрольте первый экран. Это закрепляет знание и даёт периферийное зрение — вы видите, какие ещё опции есть, даже если не запоминаете их.


Следите за безопасными и опасными запросами

HTTP-методы делятся на две категории:

Безопасные и изменяющие HTTP-методы
SafeТолько читают данные с сервера, ничего не меняют. Можно повторять сколько угодно -- состояние не изменится
GETПолучить ресурс. Самый частый метод. Никогда не меняет состояние сервера (если API нормально спроектирован)
HEADТо же, что GET, но без тела ответа. Полезно для проверки существования или размера ресурса
OPTIONSЗапрос метаданных: какие методы поддерживает endpoint. Используется в CORS preflight
ModifyingМеняют состояние на сервере. Здесь нужно быть внимательным -- особенно с retry-логикой
POSTСоздаёт ресурс или вызывает действие. НЕ идемпотентен -- повторный запрос создаст ещё один объект
PUTПолная замена ресурса. Идемпотентен -- повтор даст тот же результат
DELETEУдаление ресурса. Идемпотентен -- повторное удаление того же ресурса даст 404 или 204, но состояние не изменится

Safe-методы запускайте без страха — curl -I (HEAD) и curl -X OPTIONS для исследования API это здоровая привычка. Modifying — сначала подумайте, что произойдёт на сервере, потом нажимайте Enter. Особенно с DELETE на реальных production API.

В sandbox можете крутить любые запросы свободно. Тем более httpbin.org ничего не сохраняет — там всё just for echo.


Ритм: 1 модуль за 2 дня = 1.5-2 часа в день

Найдите фиксированное время в дне для курса. Утро перед работой, вечер после, выходные — неважно, важна регулярность. Курс отлично заходит за 1.5-2 часа в день, по половине модуля. За 4-5 недель заканчивается полный курс.

Реалистичное расписание
БудниПонедельник-пятница. По 1.5-2 часа вечером. За 5 дней -- 2-3 модуля
ВыходныеСуббота-воскресенье. Можно сделать большой модуль глубоко (08 или 13 capstone) или повторить пройденное
Всего15 модулей, реальный темп -- 4-5 недель с учётом 2-3 дней отдыха

Не делайте марафоны. Если по 8 часов в день — на третий день усталость не даст ничего усвоить. Лучше 2 часа в день каждый день.


Когда станет страшно — это нормально

В этом курсе будут моменты, когда вы прочитаете «OAuth2 Authorization Code flow с PKCE» и подумаете «я это никогда не пойму». Это нормально. Любой backend-инженер первый раз читал спецификацию OAuth2 и думал то же самое. Через две-три попытки картинка собирается.

Если урок не зашёл с первого раза — это сигнал, что нужно: (а) выполнить все команды руками, (б) перечитать через день, (в) посмотреть на свой curl-вывод и понять, что в нём изменилось. Не сигнал, что курс «слишком сложный» или «вы не понимаете API». Все понимают, у всех первый раз был такой же.

Готовы? В следующем модуле начинаем — с того, что такое HTTP, как он устроен, и почему весь современный веб говорит на одном этом протоколе.


Проверка знанийKnowledge check
Почему важно использовать curl и httpie в терминале на каждом уроке, а не сразу писать requests.get в Python?
ОтветAnswer
Потому что requests, httpx и любая Python-библиотека -- это обёртка, которая прячет детали HTTP. Когда вы пишете requests.get(url), библиотека сама добавляет заголовки User-Agent, Accept-Encoding, обрабатывает редиректы, парсит JSON. Вы не видите, что реально летит на сервер. Когда вы пишете curl -v https://..., вы видите КАЖДЫЙ заголовок запроса (отмечен '>'), КАЖДЫЙ заголовок ответа ('<'), и тело. Это формирует картину 'что на самом деле передаётся'. Когда потом в requests что-то странное -- вы понимаете, в каком слое искать проблему: в библиотеке, в сети или на сервере. Без curl-фундамента requests кажется магией; с curl-фундаментом requests становится удобной обёрткой над понятным протоколом.

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

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. Какой набор инструментов является минимально необходимым для прохождения практической части курса?

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

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

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

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