1. Основы REST архитектуры и настройка проекта Django [mkdev.me](https://mkdev.me/ru/posts/chto-takoe-django-rest-framework)
Основы REST архитектуры и настройка проекта Django
Добро пожаловать в курс по разработке RESTful API. Это первая статья, в которой мы заложим фундамент для всей дальнейшей работы. Прежде чем писать код, необходимо разобраться, что именно мы строим и какие инструменты будем для этого использовать.
Мы начнем с теории архитектурного стиля REST, разберем ключевые принципы работы HTTP, а затем перейдем к практике: настройке окружения и созданию базового проекта на Django с подключением Django REST Framework (DRF).
Что такое REST и почему это стандарт?
REST (Representational State Transfer) — это не протокол и не библиотека. Это архитектурный стиль взаимодействия компонентов распределенного приложения в сети. Впервые этот термин был введен Роем Филдингом в 2000 году. Сегодня REST является стандартом де-факто для построения публичных API.
Основная идея REST заключается в том, что взаимодействие между клиентом (например, мобильным приложением или фронтендом на React) и сервером строится вокруг ресурсов. Ресурс — это любая информация, к которой можно дать имя: пользователь, товар, заказ, статья.
Ключевые принципы REST
Чтобы система считалась RESTful, она должна соответствовать ряду ограничений:
Ресурсы и их представление
В REST каждый ресурс имеет свой уникальный идентификатор — URI (Uniform Resource Identifier). Обычно это URL-адрес.
Пример URI:
https://api.example.com/users/ — коллекция пользователей.https://api.example.com/users/42/ — конкретный пользователь с ID 42.Сервер не отдает клиенту базу данных напрямую. Он отдает представление ресурса. Самым популярным форматом обмена данными в современном вебе является JSON (JavaScript Object Notation), хотя REST не запрещает использование XML или HTML.
Протокол HTTP: глаголы и коды состояний
REST API опирается на протокол HTTP. Понимание методов (глаголов) и кодов ответов — это 50% успеха в проектировании API.
HTTP Методы
Методы определяют, какое действие мы хотим совершить над ресурсом.
| Метод | Описание | Идемпотентность* | | :--- | :--- | :--- | | GET | Получение данных. Не изменяет состояние сервера. | Да | | POST | Создание нового ресурса. | Нет | | PUT | Полное обновление ресурса (заменяет объект целиком). | Да | | PATCH | Частичное обновление ресурса (меняет только переданные поля). | Нет (обычно) | | DELETE | Удаление ресурса. | Да |
*Идемпотентность означает, что повторный идентичный запрос приведет к тому же состоянию сервера, что и одиночный запрос.
Коды состояния HTTP
Сервер всегда должен сообщать клиенту, как прошел запрос, используя числовые коды:
* 2xx (Успех):
* 200 OK: Запрос выполнен успешно (обычно для GET, PUT, PATCH).
* 201 Created: Ресурс успешно создан (обычно ответ на POST).
* 204 No Content: Успешно, но тела ответа нет (часто при DELETE).
* 4xx (Ошибка клиента):
* 400 Bad Request: Ошибка валидации данных или неверный синтаксис.
* 401 Unauthorized: Пользователь не авторизован (нет токена).
* 403 Forbidden: Авторизация есть, но нет прав на это действие.
* 404 Not Found: Ресурс не найден.
* 5xx (Ошибка сервера):
* 500 Internal Server Error: Что-то сломалось на стороне бэкенда.
Зачем нам Django REST Framework?
Django сам по себе — мощный инструмент, но он изначально создавался для генерации HTML-страниц (паттерн MVT — Model-View-Template). Когда мы строим API, нам не нужны HTML-шаблоны, нам нужен JSON.
Согласно mkdev.me: > Использование фреймворка позволяет сосредоточится на задачах бизнеса и не задумываться над техническими деталями там, где это возможно. Нужно отрисовать кнопку на сайте? Сделать авторизацию или сброс пароля? Сохранить данные пользователя из формы на сайте в базу данных? Для этого всё уже готово — бери и пользуйся!
Django REST Framework (DRF) — это надстройка над Django, которая предоставляет инструменты специально для API:
Практика: Настройка окружения и установка
Перейдем от слов к делу. Мы создадим проект с нуля. Предполагается, что у вас уже установлен Python (версии 3.8 или выше).
Шаг 1: Виртуальное окружение
Никогда не устанавливайте пакеты глобально. Изоляция зависимостей — это база профессиональной разработки.
Создадим папку проекта и виртуальное окружение:
Активируем окружение:
* Windows: venv\Scripts\activate
* macOS/Linux: source venv/bin/activate
Шаг 2: Установка зависимостей
Нам понадобятся сам Django и библиотека djangorestframework. Обратите внимание на нейминг пакетов.
Согласно habr.com: > Первое, что нас встречает - это установка пакета "djangorestframework" в виртуальную среду... Довольно неудобный и не запоминающийся нейминг для установки пакета, потому что далее для Django мы его подключаем как "rest_framework".
Выполните команду:
Шаг 3: Создание проекта
Создадим стандартный проект Django. Не забудьте точку в конце команды, чтобы не создавать лишнюю вложенность папок.
Теперь структура вашей папки должна выглядеть так:
Шаг 4: Настройка settings.py
Теперь самое важное. Нам нужно сообщить Django, что мы собираемся использовать DRF. Откройте файл config/settings.py и найдите список INSTALLED_APPS.
Добавьте туда 'rest_framework':
Также хорошей практикой является предварительная настройка конфигурации самого DRF. Добавьте этот словарь в конец файла settings.py:
Разберем, что мы здесь написали:
* DEFAULT_PERMISSION_CLASSES: Определяет политику доступа по умолчанию. AllowAny означает, что пока наше API открыто для всех (удобно для старта, но в будущем мы это изменим).
* DEFAULT_RENDERER_CLASSES: Указывает, в каком виде отдавать данные. JSONRenderer — для программных клиентов, BrowsableAPIRenderer — для красивого интерфейса в браузере.
Шаг 5: Проверка работоспособности
Применим стандартные миграции (Django создает таблицы для пользователей и админки) и запустим сервер.
Если вы видите сообщение:
Starting development server at http://127.0.0.1:8000/
Поздравляю! Вы успешно настроили базу для разработки REST API. Пока по этому адресу вы увидите стандартную стартовую страницу Django (ракету), так как мы еще не создали ни одного эндпоинта.
Итоги
В этой статье мы заложили теоретический и технический фундамент курса.
djangorestframework и добавить rest_framework в INSTALLED_APPS.В следующей статье мы создадим нашу первую модель данных и напишем для нее сериализатор, чтобы получить первый реальный JSON-ответ от сервера.