Django REST Framework - что это такое

Курс по Django: https://stepik.org/a/183363

Смотреть материал на YouTube

Этим видео мы открываем серию занятий по очень популярному пакету Django REST Framework (сокращенно – DRF). Как вы уже догадались из названия – это дополнение к известному фреймворку Django, о котором мы с вами уже говорили. Если вы с ним не знакомы, то советую вначале посмотреть этот плейлист:

https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xO_39zZll2u1lz_Q-Mwn1F

Так что же делает DRF и зачем он нужен? Сейчас, современным web-сайтам приходится взаимодействовать не только с браузерами клиентов, где отображаются соответствующие HTML-документы, но и с другими произвольными конечными устройствами. Часто это смартфоны, работающие под различные ОС (например, Android, iOS) и программы, написанные, как правило, на языке Java, также должны получать доступ к данным сайта и уметь с ним взаимодействовать. Например, у многих установлены программы по online-банкингу или программы от сотового оператора, где можно оперативно посмотреть информацию и выполнить определенные действия.

Как раз здесь происходит взаимодействие с сервером по определенному программному протоколу. И аббревиатура

REST (от англ. Representational State Transfer)

в названии DRF – как раз и следует интерпретировать, как архитектурный стиль взаимодействия между сервером и различными клиентами. Звучит несколько мудрено, но по-простому – это описание способа взаимодействия между сервером и любым конечным устройством, подключенным к сети Интернет.

Как реализуется это взаимодействие? На стороне сервера создается специальный программный интерфейс, который сокращенно называется:

API (от англ. Application Programming Interface)

И Django REST Framework как раз обеспечивает взаимодействие любого конечного устройства через API с сайтом на сервере. То есть, DRF, фактически, это инструмент создания API для нашего сайта с целью удаленного взаимодействия с ним. Например, мы хотим в программе на Java, которая запущена на смартфоне, отобразить список статей сайта. Для этого из java-программы отправляется обычный GET-запрос к сайту, скажем, такой:

https://proproprogs.ru/api/v1/listpages/

Сайт формирует данные по этому запросу и возвращает их клиенту (смартфону), например, в JSON-формате:

{"pages": 
    [
        {"title": "Django - what is that", 
         "url": "https://proproprogs.ru/django/django-chto-eto-takoe-poryadok-ustanovki"},
        {"title": "Model MTV", 
         "url": "https://proproprogs.ru/django/model-mtv-marshrutizaciya-funkcii-predstavleniya"},
        {"title": "Request, redirect", 
         "url": "https://proproprogs.ru/django/marshrutizaciya-perenapravleniya"}
    ]
}

То есть, возвращается не HTML-документ, а «сырые» данные в формате JSON. Как раз они и формируются с помощью Django REST Framework. Затем, формат JSON обрабатывается Java-программой на смартфоне и отображаются данные уже в приложении клиента.

Это один, простейший пример взаимодействия клиента и сервера (сайта) через API. Конечно, если бы нам нужны были только такие простые действия, то никакого отдельного фреймворка не нужно было бы создавать. Однако реальное API должно поддерживать множество дополнительных возможностей, в частности:

  • создание, чтение, изменение и удаление данных (сокращенно это называется CRUD);
  • проверку корректности передаваемых данных от клиента и защиту от возможных хакерских атак;
  • авторизацию и регистрацию пользователей;
  • права доступа к данным через API.

Все это типовые задачи, поэтому каждый раз прорабатывать их с нуля было бы неразумно, да и не так просто. Именно поэтому и появился Django REST Framework, который значительно облегчает разработку своего API для проектов, написанных на Django.

Преимущество DRF не только в относительной простоте создания API сайта, но и высокая скорость работы. Его совершенно спокойно можно использовать в высоконагруженных проектах. Например, на сайте в 100 тыс. запросов в день, он великолепно себя ведет без каких-либо проблем. Кроме того, разрабатывая API на DRF мы получаем унифицированный код, понятный большому числу разработчиков сайтов на Django. То есть, если в будущем придет другой специалист, то ему не составит труда быстро разобраться в программе с использованием Django REST Framework. В отличие от ситуации, когда API пишется самостоятельно «с нуля» или на своем фреймворке. Здесь поддержка продукта будет испытывать некоторые сложности.

Конечно, есть и определенные недостатки DRF. Но они, на мой взгляд, незначительны и их легко обойти при необходимости, так как Django REST Framework предоставляет возможность переопределять его работу на достаточно низком уровне, меняя базовые алгоритмы. Хотя это требуется далеко не всегда.

Архитектура Django REST Framework

Теперь, когда мы с вами в целом разобрались для чего нужен Django REST Framework, давайте посмотрим на его общую архитектуру, из которой хорошо виден принцип работы DRF.

Вначале приходит запрос от клиента, который обрабатывается маршрутизатором фреймворка Django. Например, такой:

https://proproprogs.ru/api/v1/listpages/

Далее, с этим запросом связано одно из представлений, которое реализует API-сайта. То есть, представление для API уже создается средствами DRF. Задачей представления является обработка запроса и отправка результата пользователю. Так как для обработки необходимо сформировать некоторые данные, как правило, в формате JSON, то для этого управление передается специальному объекту – сериализатору. Сериализаторы – это «сердце» Django REST Framework. Именно они формируют данные для ответа на API-запросы, а также выполняют парсинг входной информации. Например, сериализатор может взять данные из таблиц БД и вернуть JSON-строку узлу, который отправил запрос. Или, сериализатор может удалить или изменить данные в таблицах БД по определенному запросу.

На последующих занятиях мы подробно познакомимся с созданием представлений, сериализаторов, а также управлением правами доступа и задачами авторизации и аутентификации пользователей. Поехали!

Курс по Django: https://stepik.org/a/183363