Архитектура клиент-серверного приложения на Django DRFАрхитектура клиент-серверного приложения на Django DRF

Сегодня разберёмся, как устроены клиент-серверные приложения, используя в качестве примера Django DRF. Представь, что у тебя есть сервис, который должен работать и в браузере, и в мобильном приложении, и, возможно, даже в десктопном клиенте. Как это всё взаимодействует между собой? Давай разбираться.

Что такое клиент-серверная архитектура?

Это классическая схема, где есть сервер, который управляет данными и логикой, и клиенты, которые запрашивают у него информацию и отображают её пользователям. Клиент может быть любым устройством — браузером, мобильным приложением или десктопной программой.

Сервер в этой схеме — это наш Django DRF. Он отвечает за хранение данных, их обработку и раздачу по запросу. Клиенты же могут быть написаны на чём угодно: веб-приложение на React или Vue, мобильное приложение на Flutter или Kotlin, десктоп-клиент на Electron или PyQt.

Как всё это взаимодействует?

Когда клиенту нужно получить данные (например, список товаров в интернет-магазине), он отправляет запрос на сервер. Запрос обычно идёт по протоколу HTTP или HTTPS, а данные передаются в формате JSON. Django DRF обрабатывает этот запрос, вытаскивает нужные данные из базы и отправляет их клиенту.

Процесс взаимодействия выглядит примерно так:

  1. Клиент (например, мобильное приложение) делает запрос: GET /api/products/
  2. Django DRF принимает запрос, находит данные в базе и отправляет JSON-ответ.
  3. Клиент получает JSON, парсит его и отображает данные пользователю.

Пример JSON-ответа от сервера:

{
  "products": [
    {"id": 1, "name": "Смартфон", "price": 30000},
    {"id": 2, "name": "Ноутбук", "price": 70000}
  ]
}

Клиент, будь то веб, мобильное или десктопное приложение, просто отображает эту информацию.

Где располагаются сервер и клиенты?

Сервер обычно живёт на удалённом хостинге — например, AWS, DigitalOcean или на выделенном сервере. Он запускается на каком-нибудь веб-сервере вроде Gunicorn + Nginx и ждёт запросов.

Клиенты же могут быть где угодно:

  • Веб-приложение работает в браузере и общается с сервером через fetch/Axios.
  • Мобильное приложение установлено на смартфоне и использует HTTP-клиент (например, Retrofit для Android, Alamofire для iOS).
  • Десктопное приложение — это отдельная программа, которая так же делает запросы к серверу через API.

Аутентификация и безопасность

Чтобы не раздавать данные кому попало, сервер должен проверять, кто делает запрос. Для этого используются токены — например, JWT или Session-based аутентификация. Клиент при каждом запросе отправляет заголовок с токеном, а сервер проверяет его и даёт (или не даёт) доступ к данным.

Пример заголовка с токеном:

Authorization: Bearer your_jwt_token

Заключение

Клиент-серверная архитектура позволяет сделать гибкие приложения, где один бэкенд обслуживает сразу несколько типов клиентов. Django DRF отлично подходит для этой задачи, потому что позволяет легко создавать API, к которому могут подключаться веб, мобильные и десктопные клиенты. Главное — правильно организовать взаимодействие, следить за безопасностью и учитывать нагрузку на сервер.

Поделится