Сегодня разберёмся, как устроены клиент-серверные приложения, используя в качестве примера Django DRF. Представь, что у тебя есть сервис, который должен работать и в браузере, и в мобильном приложении, и, возможно, даже в десктопном клиенте. Как это всё взаимодействует между собой? Давай разбираться.
Что такое клиент-серверная архитектура?
Это классическая схема, где есть сервер, который управляет данными и логикой, и клиенты, которые запрашивают у него информацию и отображают её пользователям. Клиент может быть любым устройством — браузером, мобильным приложением или десктопной программой.
Сервер в этой схеме — это наш Django DRF. Он отвечает за хранение данных, их обработку и раздачу по запросу. Клиенты же могут быть написаны на чём угодно: веб-приложение на React или Vue, мобильное приложение на Flutter или Kotlin, десктоп-клиент на Electron или PyQt.
Как всё это взаимодействует?
Когда клиенту нужно получить данные (например, список товаров в интернет-магазине), он отправляет запрос на сервер. Запрос обычно идёт по протоколу HTTP или HTTPS, а данные передаются в формате JSON. Django DRF обрабатывает этот запрос, вытаскивает нужные данные из базы и отправляет их клиенту.
Процесс взаимодействия выглядит примерно так:
- Клиент (например, мобильное приложение) делает запрос:
GET /api/products/
- Django DRF принимает запрос, находит данные в базе и отправляет JSON-ответ.
- Клиент получает 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, к которому могут подключаться веб, мобильные и десктопные клиенты. Главное — правильно организовать взаимодействие, следить за безопасностью и учитывать нагрузку на сервер.