L2 Открытый урок · Новичок
L2.7. HTTP, REST, API и первый вызов LLM
Запрос и ответ, коды статуса, REST, таймауты и первый вызов LLM API через SDK: сообщения, блоки ответа, токены и ошибки.
- Объём
- 4 урока · 10 часов
- Компетенции
- PROG-05·F, API-01·F
Запрос и ответ
Программы общаются по HTTP: клиент отправляет запрос (метод, адрес, заголовки, тело), сервер возвращает ответ (код статуса, заголовки, тело — часто JSON).
| Код | Значит | Что делать |
|---|---|---|
| 200 | всё хорошо | читать ответ |
| 400 | ошибка в запросе | исправить запрос |
| 401 / 403 | нет доступа | проверить ключ и права |
| 404 | нет такого ресурса | проверить адрес |
| 429 | слишком много запросов | подождать и повторить |
| 500–599 | сбой на сервере | повторить позже |
REST — стиль API, где адрес обозначает ресурс (/repos/python/cpython), а метод — действие: GET — получить, POST — создать или отправить.
Первый запрос к публичному API
import requests
resp = requests.get("https://api.github.com/repos/python/cpython", timeout=10)
resp.raise_for_status() # ошибка, если код не 2xx
data = resp.json()
print(data["full_name"], data["stargazers_count"])
Всегда ставьте timeout: без него программа может ждать вечно.
Первый вызов LLM API
У провайдеров моделей есть SDK — библиотека, которая делает HTTP-запросы за вас. Пример с Claude (pip install "anthropic>=1.0,<2"):
import anthropic
client = anthropic.Anthropic() # ключ берётся из ANTHROPIC_API_KEY
resp = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000, # у этой модели рассуждение входит в лимит — не ставьте мало
messages=[{"role": "user", "content": "Объясни, что такое токен, в двух предложениях."}],
)
text = next(b.text for b in resp.content if b.type == "text") # ответ — список блоков
print(text)
print("токенов:", resp.usage.input_tokens, "+", resp.usage.output_tokens)
Что здесь важно:
- Сообщения — список с ролями:
user(вы),assistant(модель). История диалога — это этот список (вспомните L1.1). - Ответ — не строка, а объект. Текст лежит в блоках
content; кроме текста там бывают другие блоки — например, рассуждение модели. Поэтому берём именно блокtext. - Токены приходят в
usage— по ним считается цена (задача 20 из L2.4). - Ошибки: SDK сам повторяет запрос при 429, 5xx и сетевых сбоях, а остальные бросает исключениями:
anthropic.AuthenticationError(неверный ключ),anthropic.APIConnectionError(нет сети),anthropic.APIStatusError(другие коды).
Практикум: вызов публичного API
Скрипт: запрашивает данные публичного API (GitHub или любой без ключа) по названию из аргумента командной строки, обрабатывает 404 и отсутствие сети понятным сообщением, сохраняет нужные поля в JSON-файл.
