До этого момента мы писали только консольные приложения: программы, которые запускаются, выполняются и завершаются. Пользователь взаимодействовал с ними через ввод с клавиатуры и вывод в терминал. Но современные приложения работают иначе: они запускаются один раз и работают постоянно, ожидая запросов от пользователей через интернет. Такие приложения называются веб-серверами. Когда вы открываете сайт, ваш браузер отправляет запрос к веб-серверу, сервер обрабатывает запрос и отправляет ответ. То же самое происходит, когда мобильное приложение загружает список товаров, когда телеграм-бот получает сообщение, когда погодное приложение запрашивает прогноз. В этой части курса мы начнём изучение веб-разработки на Python с использованием современного и очень быстрого фреймворка FastAPI.
Почему FastAPI? Этот фреймворк появился в 2018 году и быстро стал одним из самых популярных в Python. Он очень быстрый (наравне с Go и Node.js), имеет встроенную валидацию данных через Pydantic, автоматически генерирует документацию (Swagger UI) и поддерживает асинхронность из коробки. FastAPI используется такими компаниями, как Netflix, Uber, Microsoft. Он идеально подходит для создания API — программных интерфейсов, через которые разные приложения обмениваются данными.
В этом уроке (первом из двух по FastAPI) мы изучим основы веб-разработки. Вы узнаете, что такое API (Application Programming Interface), как устроена клиент-серверная архитектура, какие бывают HTTP методы. GET используется для получения данных (например, список товаров), POST — для создания новых данных (регистрация пользователя), PUT — для полного обновления (замена всех полей товара), PATCH — для частичного обновления (изменение только цены), DELETE — для удаления данных. Изучим HTTP-статусы: 200 — успех, 201 — создано, 400 — ошибка в запросе, 404 — не найдено, 500 — ошибка сервера. Научимся устанавливать FastAPI и Uvicorn (ASGI-сервер для запуска FastAPI), создавать первое приложение и запускать его.
Мы научимся создавать маршруты (эндпоинты) — это URL-адреса, по которым клиенты обращаются к нашему API. Например, /tasks — для работы со списком задач, /users — для работы с пользователями. Создадим обработчики для разных HTTP-методов. Познакомимся с Pydantic — библиотекой для валидации данных, которая встроена в FastAPI. Создадим схемы данных и научимся автоматически валидировать входящие запросы. Если клиент отправит неверные данные (например, строку вместо числа), FastAPI сам вернёт понятную ошибку.
Особое внимание уделим тестированию API. Установим и настроим Postman или Insomnia — программы для отправки HTTP-запросов и просмотра ответов. Научимся отправлять GET-запросы для получения данных, POST-запросы с телом в формате JSON для создания данных, PUT-запросы для полного обновления, PATCH-запросы для частичного обновления и DELETE-запросы для удаления. Все эти запросы мы будем тестировать в реальном времени, видя ответы сервера.
Для управления зависимостями мы будем использовать uv — быстрый менеджер пакетов на Rust, который мы изучали в уроке 15. uv работает значительно быстрее pip и умеет управлять версиями Python. Мы создадим виртуальное окружение с помощью uv venv, активируем его и установим необходимые пакеты.
Все примеры будут максимально практичными: создадим простое API для управления списком задач (todo list), которое будет хранить задачи в памяти (без базы данных — это для начала, базу данных подключим позже). Научимся получать список всех задач, получать задачу по ID, добавлять новую задачу, обновлять задачу полностью (PUT) или частично (PATCH), удалять задачу. Все операции будем тестировать через Postman.
К концу урока вы создадите свой первый работающий API и поймёте, как устроены современные веб-приложения на Python.