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

Сервер вызывает вас

Веб-сервер на Python (стандартный модуль http.server) строится из классов-обработчиков: создайте дочерний класс от BaseHTTPRequestHandler и напишите метод do_GET. Сервер принимает соединения и вызывает ваш метод один раз на каждый запрос — self.path и self.headers содержат запрос, а send_response, send_header и self.wfile формируют ответ.

Настоящий сервер вызывает serve_forever() на фиксированном порту и работает бесконечно. Примеры здесь выбирают порт 0 — случайный свободный порт — и запускают serve_forever в фоновом потоке, поэтому каждый пример сам запускает свой сервер, использует его и завершается. Они также переопределяют log_message пустым методом: родительский класс печатает строку журнала с отметкой времени для каждого запроса, а демонстрациям нужен чистый и стабильный вывод.


Первый обработчик

Самый маленький обработчик пишет одну строку текста. Всё, что делает API, — JSON, коды состояния, маршрутизация — происходит внутри метода такой же формы.

Привет из обработчика

Обработчик пишет в self.wfile; клиент читает ровно это как тело ответа, со строкой состояния, выбранной через send_response(200).

Prompt
Напишите программу на Python с самым маленьким дочерним классом BaseHTTPRequestHandler, чей метод do_GET пишет строку приветствия, запустите его на свободном порту в фоновом потоке, отправьте один GET-запрос и выведите код состояния и тело ответа.
Вывод: полная программа на Python

Ответ в формате JSON

Обработчик API делает три вещи: выбирает код состояния, устанавливает заголовок Content-Type и записывает закодированные данные — json.dumps создаёт текст, self.wfile.write отправляет байты.

Порядок важен: сначала send_response, затем заголовки, затем end_headers, и только потом тело.

JSON-эндпоинт

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

Prompt
Напишите программу на Python с обработчиком, который отвечает JSON-пользователем, созданным через json.dumps, и заголовком Content-Type, запустите его на свободном порту в фоновом потоке, запросите его и выведите код состояния, тип содержимого и тело JSON.
Вывод: полная программа на Python