Перейти к основному содержимому

Другая сторона API

Программы на Python — это не только серверы: они тоже вызывают API — получают данные, общаются с сервисами, интегрируются со сторонними системами. Работа с urllib.request из стандартной библиотеки сводится к трём привычкам:

1. отправить запрос (urlopen для простого GET, объект Request для полного контроля над методом, заголовками и телом),
2. открывать ответ в блоке with, чтобы он всегда закрывался,
3. помнить, что ответ 4xx или 5xx выбрасывает HTTPError — перехватывайте его там, где плохой код состояния — это случай, который вы обрабатываете.

Примеры ниже обращаются к локальному тестовому серверу, поэтому их вывод стабилен — а код клиента в точности такой же, какой вы направили бы на настоящий URL. (Популярный в экосистеме пакет requests оборачивает те же идеи в более удобный API; здесь всё остаётся в рамках стандартной библиотеки.)


GET и декодирование

Повседневная задача: выполнить GET по URL и декодировать JSON-тело. json.loads(resp.read()) даёт обычные данные Python, а dataclass превращает каждый словарь в типизированную запись с помощью User(**item).

Получить список в виде записей

Тело ответа разбирается в список записей User, а дальше это обычные данные Python — их перебирают в цикле и выводят поле за полем.

Prompt
Напишите программу на Python, которая выполняет GET-запрос JSON-массива пользователей с сервера (локального демонстрационного сервера в том же файле), разбирает тело с помощью json.loads, строит из него список dataclass-объектов User и выводит id и имя каждого пользователя.
Вывод: полная программа на Python

POST с JSON-телом

Отправка данных — зеркальное отражение: преобразуйте запись в байты JSON, отправьте их методом POST с правильным типом содержимого — а затем разберите ответ сервера, который здесь содержит id, назначенный сервером.

Отправить запись, прочитать ответ

Запись уходит в виде JSON, а обратно приходит созданный User(id=7, name='Cleo') — полный путь записи API-клиента в одной небольшой программе.

Prompt
Напишите программу на Python, которая преобразует новый dataclass-объект User в JSON, отправляет его методом POST с типом содержимого application/json на сервер, который назначает id и отвечает 201 (локальный демонстрационный сервер в том же файле), затем разбирает ответ и выводит код состояния и созданного пользователя с его новым id.
Вывод: полная программа на Python