Что такое api простыми словами django: создаём API для чтения данных (часть 1) / Хабр

Что такое Django REST Framework?

АВТОР:

АЛЕКСЕЙ КУРЫЛЕВ

Программист с хорошим опытом работы в международных компаниях. Эксперт по разработке API для клиент-серверных приложений. Воодушевленный преподователь, который хочет и может помочь в быстром карьерном продвижении в IT

Я написал эту статью, чтобы рассказать в ней теорию, которая будет необходима для изучения Django REST Framework. Информация, изложенная в этой статье, не является исчерпывающей в данной теме и показывает историю развития веб-приложений лишь отчасти. Я просто постараюсь объяснить, почему этот фреймворк — часть естественной эволюции веб-технологий, и как при помощи него мы можем по-новому решать старые задачи веб-разработки.

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

Framework

Создавая приложение или любой другой программный продукт, мы хотим делать это быстро и качественно. Проще этого добиться, используя опыт и наработки других разработчиков, ведь многие задачи, которые мы встречаем в процессе работы, уже были кем-то решены. По сути, использование фреймворка позволяет сосредоточится на задачах бизнеса и не задумываться над техническими деталями там, где это возможно. Нужно отрисовать кнопку на сайте? Сделать авторизацию или сброс пароля? Сохранить данные пользователя из формы на сайте в базу данных? Для этого всё уже готово — бери и пользуйся!

Также важно понимать отличия Framework от библиотеки. Это похожие вещи. В обоих случаях в Python вы должны установить нужный пакет, импортировать и пользоваться им. Разница в том, что библиотеку в проекте вы используете там, где нужно, и так, как вы хотите, а фреймворк сам определяет способ разработки приложения, то есть не только предоставляет удобные инструменты разработки в виде вспомогательных функций и классов, но и непосредственно формирует архитектуру проекта, создает структуру кода, проще говоря, определяет путь, по которому вы будете создавать свое приложение.

Django

На сегодняшний день наиболее функциональным фреймворком для создания веб-приложений на языке Python является фреймворк Django. Django можно назвать MVC-фреймворком, так он реализует взаимодействие пользователя и системы:

  • Model (хранит данные пользователя)

  • View (отображает данные пользователя)

  • Controller (принимает изменения данных от пользователя).

Внутри Django эта терминология звучит немного иначе, но суть остается той же.

Разработка Django началась в 2003 году программистами Adrian Holovaty и Simon Willison, а публичный релиз состоялся в 2005 году. Функционал фреймворка хорошо отвечал требованиям в веб-разработке того времени. Он активно развивается и до сих пор. Хотя этот фреймворк и считается довольно крупным и многофункциональным, сам по себе он не мог удовлетворить все запросы веб-разработчиков. За время его существования сторонними разработчиками было создано огромное множество библиотек и фреймворков в качестве дополнений к Django, которые упрощают реализацию тех или иных задач: аутентификация через социальные сети, кеширование данных, хранение файлов в облаке и многое другое. Некоторые из дополнений со временем сами стали частью проекта Django, как это произошло с библиотекой South, управляющей миграциями базы данных. Но большинство дополнений так и остались независимыми пакетами. Одним из них и является Django REST Framework, при помощи которого мы можем создавать Web API на основе Django.

Web API

Сегодня сеть интернет построена по принципу Клиент-Серверного взаимодействия. Клиент посылает запрос — Сервер ему отвечает. В случае, когда между собой общаются два Сервера, мы условно называем Клиентом того, который отправил запрос и ожидает ответ, а Сервером будет тот, кто принимает запрос и отвечает не него. Взаимодействие браузеров и веб-сайтов (первые выступают в роли Клиента, а вторые в роли Сервера) традиционно делалось при помощи технологии html-рендеринга, именно так изначально это делал Django. Чтобы получить данные с веб-сайта, браузер отправляет запрос GET к Серверу. Сервер формирует ответ в виде html-страницы и передает ее браузеру. Так Сервер передает данные браузеру, но как браузер может передать данные Серверу? В этой самой html-странице Сервер заложил все необходимые веб-формы, заполнив которые, пользователь мог бы передать свои данные обратно на сервер. Когда вы ввели свои данные в форму на сайте, бразуер отправляет Серверу запрос POST, в котором содержатся ваши данные, а Сервер обрабатывает их и записывает в базу данных.

Все это отлично работало, но уже в середине нулевых такой подход перестал удовлетворять возрастающим требования в веб-разработке. Появлялись мобильные приложения, различные гаджеты с доступом в интернет, и для них уже не подходил стандартный способ html-рендеринга на сервере, ведь теперь каждому клиенту нужно было отрисовать данные по-своему. Постоянно увеличивалось взаимодействие серверов друг с другом, и html-формат уже не подходил. Для всех этих задач есть другой способ обмена данными — Web API. Смысл этого способа в том, что Сервер передает Клиенту не html-страницу, а непосредственно данные, никак не влияя на то, как эти данные будут в итоге представлены. Наиболее популярными форматами для передачи данных становятся XML и JSON. Таким образом Сервер полностью избавляется от задачи отрисовки данных. Какое-то время длился переходный период, когда разработчикам веб-приложений на Сервере приходилось поддерживать оба способа одновременно: html рендерился на Сервере для браузеров, а Web API использовался для мобильных приложений и интеграции с другими серверами. Понятно, что разработчикам приложений на Сервере приходилось делать двойную работу. Но в начале десятых ситуация стала меняться в пользу Web API. Этому способствовало молниеносное развитие инструментов на языке JavaScript, а также появление различных веб-фреймворков, одним из которых и является предмет данной статьи.

Браузерные приложения быстро научились отрисовывать веб-страницы самостоятельно, получая чистые данные с Сервера. Веб-приложения на сервере научились создавать API быстро и легко. Так сформировалась четкое разделение на Backend и Frontend разработку: тех, кто поддерживает приложение на Сервере, и тех, кто делает браузерные (клиентские) приложения. А Web API стал универсальным способом общения для Сервера и всех его клиентов (браузеров, мобильных приложений, других Серверов).
Конечно, это не могло не привести к развитию стандартов в общении между системами. И Клиенту, и Серверу необходимо знать каким образом общаться с друг с другом, как передавать данные, как сообщать об ошибках. Разработчики всегда могли договориться о том, как взаимодействовать их приложениям, но наличие некоего стандарта в веб-разработке позволило бы эту задачу облегчить. И вот в начале десятых таким стандартом стала концепция REST.

REST

В 2000 году Рой Филдинг написал докторскую диссертацию, где изложил концепцию REST. Там были рекомендации о том, как спроектировать Сервер, чтобы ему было удобно общаться с Клиентами. Выделю два главных принципа создания приложений в стиле REST:

  • Сервер не должен ничего знать о текущем состоянии Клиента. В запросе от Клиента должна быть вся необходимая информация для обработки этого запроса Сервером.
  • Каждый ресурс на Сервере должен иметь определенный Id, а также уникальный URL, по которому осуществляется доступ к этому ресурсу.

На данный момент мы можем найти фреймворк для создания приложений в стиле REST практически для каждого языка программирования, используемого в веб-разработке. Логика построения Web API на Сервере в этих фреймворках реализована одинаково.

Действия для управления данными привязаны к определенным HTTP-методам. Существует несколько стандартных действий для работы с данными — это Create, Read, Update, Delete. Часто их обобщают как CRUD.

  • Для создания объекта используется http-метод POST
  • Для чтения — http-метод GET
  • Для изменения — http-метод PUT
  • Для удаления — http-метод DELETE

Давайте представим сообщения от Клиента к Серверу через Web API в стиле REST .

У нас есть объект Кошка, и мы хотим создать запись о кошке на Сервере. Для этого мы отправляем запрос на сервер:

POST — http://www.pets-server.ru/cats/

С данными в теле запроса

Name: “My Best Cat”
Color: “Red”
Age: 2

Плюс к этому запросу (и все другим) будет добавлен ключ аутентификации.

“Auth-Token”: “IPjxTy7Lodas343Fswv2”

Ключ будет нужен, чтобы Сервер понял, что запрос происходит от авторизованного Клиента. Как мы помним из правила REST, каждый запрос от Клиента должен содержать всю необходимую информацию для обработки этого запроса Сервером. Здесь это правило работает: Сервер ничего не знает о Клиенте до запроса, но сам запрос содержит ключ авторизации, по которому Сервер определяет, что это за Клиент.

Сервер ответит на этот запрос вот таким сообщением:

Id: 21
Name: “My Best Cat”
Color: “Red”
Age: 2

Сервер взял все поля, переданные клиентом, и добавил к ним поле Id. Здесь работает правило REST, согласно которому каждый ресурс должен иметь уникальный идентификатор и быть доступным по определенному URL. Сервер создал ресурс и вернул нам его Id.

Теперь мы можем получить данную запись по URL

GET — http://www.pets-server.ru/cats/21

Ответ сервера:

Id: 21
Name: “My Best Cat”
Color: “Red”
Age: 2

Что, если Клиент хочет изменить созданные им данные на сервере?

Отправляем запрос:

PUT — http://www.pets-server.ru/cats/21

С телом запроса:

Id: 21
Name: “My Best Cat”
Color: “Black”
Age: 2

Ответ сервера:

Id: 21
Name: “My Best Cat”
Color: “Black”
Age: “2”

Метод PUT используется для изменения данных. Номер 21 в URL говорит о том, какой именно объект нужно изменить. Теперь наша кошка имеет цвет “Black”.

Для удаления записи на Сервере достаточно отправить запрос:

DELETE — http://www.pets-server.ru/cats/21

С телом запроса:

Тут также мы указываем в Id объекта в URL, но передавать никаких данных в теле запроса для удаления объекта уже не требуется.

Django REST Framework

Наконец, мы добрались до главной темы этой статьи. Мы вкратце разобрали каждый компонент этого словосочетания и теперь сможем понять, зачем использовать этот фреймворк, и какие задачи он решает.

Тут я бы хотел процитировать слова Тома Кристи, создателя Django REST Framework.

“Неудивительно, что Django REST framework — это API фреймворк для Django. И он пытается заполнить все пробелы в том, как исторически был спроектирован веб-фреймворк Django”.

И действительно, пусть Django был спроектирован давно, он до сих отлично решает свои задачи. Однако с появлением новых требований в веб-разработке, отсутствие компонентов для создания Web API воспринимается как пробел.

Django REST framework способен этот пробел заполнить.

А мы уже заполнили все пробелы в теории и терминологии и готовы перейти к практике!

Django Rest Framework — что это такое простыми словами. Часть 1 — Алексей Лавриненко | Oleksiy Lavrynenko

Python

Oleksiy

Привет всем! Я, наконец, дошел до того, что нужно разобраться с Django REST, и сегодняшняя запись будет небольшим конспектом, в котором (надеюсь) можно будет найти ответ на вопрос, который звучит как: Django Rest Framework — что это такое простыми словами?

Вдаваться в термины не буду. Кому интересно — переходим по ссылкам, и узнаем, что такое REST и когда он был придуман 🙂 По ссылке будет очень много букв, красивых терминов и прочего. Я же попробую сказать, что:
REST — это набор принципов, которые указывают как следует использовать HTTP и URL-адреса.

Кроме этого, у REST имеется пять принципов:

  1. Дайте все вещи идентификатору
  2. Свяжите все вещи вместе
  3. Используйте стандартизованные методы
  4. Особенности с несколькими представлениями
  5. Общение без статуса

Важно понять, что REST — не протокол (сродни HTTP и FTP). Это лишь архитектурная модель, основанная на HTTP-ресурсах:

  • GET
  • HEAD
  • POST
  • PUT
  • DELETE

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

Теперь поговорим об архитектуре REST, которая основана на:

  1. Ресурсах:
    которые обычно в Django показываются через серилизаторы. Например: User/Invoice/Groupe
  2. Действиях:
    которые определяют, что любой, использующий API, планирует делать с ресурсом. Все действия сопоставляются с HTTP VERBS, и наиболее часто используемыми являются: GET/POST/PUT/PATCH/DELETE.

    Например:

    1. GET/users #Возвращает список пользователей 
    2. GET/users/<id> #Возвращаем информацию по конкретному пользователю
    3. POST/users #Создаем нового пользователя 
    4. PUT/users/<id> #Полностью изменяем определенного пользователя
    5. PATCH/users/<id> #Частично обновляем информацию пользователя 
    6. DELETE/users/<id> #Удаляем определенного пользователя
  3. Представлениях:
    которые в REST — означают то, как данные ресурса показываются тому, кто делает запрос в конкретной конечной точке. Чаще всего эти функции показываются в формате JSON (но никто не говорит, что они могут иметь другие форматы).
    1. [ 
    2.   { 
    3.   «id»: 1, 
    4.   «name»: «Vasya Pupkin», 
    5.   }, 
    6.   { 
    7.   «id»: 2, 
    8.   «name»: «Pisya Kamushkin», 
    9.   }, 
    10.   { 
    11.   «id»: 3, 
    12.   «name»: «Ivan Petrov», 
    13.   } 
    14.   ]

На этом азы закончены. Более подробно о работе с Django REST Framework мы поговорим уже завтра (надеюсь, а то я еще сам вникаю 🙂 ).

Как всегда — в случае возникновения вопросов пишите на почту, или в Telegram.

DjangoRest

Больше …

Python — как передать json в объекте?

Привет всем! Вчера столкнулся с вопросом: как передать json в…

Создание базового REST API с использованием Django REST Framework

Индийский институт информационных технологий и менеджмента Атал Бихари Ваджпаи Гвалиор

Инженерный колледж BMS Basavanagudi, Бангалор

B.R.A.C.T’s Ban Vishwakarma Institute of Information Technology, Kondhwa

silal Ramath A Технологический институт Вишвакармы Trust, Бибвевади, Пуна

Технологический институт Сардара Пателя Бхартия Видья Бхаван, Андхери, Мумбаи

Технологический институт Бхилаи, Дом Бхилаи, Дург

Технологический институт Бирла, Гоа

Технологический институт Бирла, Хайрабад

Технологический институт Бирла, Месра, Ранчи

Технологический институт Бирла, Пилани, Раджастан

3 Технологический институт Бхарати

Технологический институт Коимбатура (автономный)

Инженерный колледж, Пуна

Инженерный колледж Даянанда Сагар Бангалор

Институт информации Дхирубхай Амбани. & Комм. Tech.,

DTU Delhi

Технологический и инженерный факультет (MSU), Вадодара

Технологический и инженерный факультет (GIA), Университет Дхармсин Десаи, (DDU), Nadiad

Govt. Engineering College, Raipur

IIIT Delhi

IIIT Hyderabad

Индийский институт инженерных наук и технологий, Shibpur

Индийский институт информационных технологий (IIIT) Pune

Индийский институт информационных технологий (IIIT) Кота, Раджастхан

Индийский институт информационных технологий Сурат

Индийский институт информационных технологий (IIIT) Килоград, Сонепат, Харьяна

Индийский институт информационных технологий (IIIT), Вадодара, Гуджрат

Индийский институт информационных технологий, дизайна и производства, Канчипурам

Индийский технологический институт (BHU) Варанаси

Индийский технологический институт (ISM) Дханбад

Индийский технологический институт Бхилаи

Индийский технологический институт Бхубанешвар

Индийский технологический институт Бомбея

Индийский технологический институт Дели

Индийский технологический институт Дхарвад

Индийский технологический институт Гандинагар

3

3

Индийский технологический институт Гандинагар

3

Индийский технологический институт

Индийский технологический институт Гувахати

Индийский технологический институт Хайдарабад

Индийский технологический институт Индор

Индийский технологический институт Джамму

Индийский технологический институт Джодхпур

Индийский технологический институт Канпур

Индийский технологический институт Харагпур

Индийский технологический институт Мадрас

Индийский технологический институт Манди

Индийский технологический институт Палакад

Индийский технологический институт Патна

Индийский технологический институт Рурки

Индийский технологический институт Ропар 9Тел. Naya Raipur

Jadavpur University

Научно-технический университет JSS (ранее SJCE) Mysore

Инженерный колледж L.D., Ahmedabad

M S Ramaiah Institute of Technology Бангалор

Малавийский национальный технологический институт Джайпур

Маулана Азад Национальный технологический институт Бхопала

Мотилал Неру Национальный технологический институт Аллахабад

Национальный технологический институт Каликут

02 90390 Дели Национальный технологический институт National Institute of Technology Durgapur

National Institute of Technology Hamirpur

National Institute of Technology Karnataka, Surathkal

Национальный технологический институт Патна

Национальный технологический институт Райпур

Национальный технологический институт Андхра-Прадеш

Национальный технологический институт Джамшедпур

Национальный технологический институт Руркела

Национальный технологический институт Силчар

Национальный институт Тираплирупала

Национальный технологический институт Варангала

Технологический университет Нетаджи Субхаса, Нью-Дели (NSUT Delhi)

Университет PES (кампус Electronic City) Бангалор

Университет PES (кампус кольцевой дороги) Бангалор

Нефтяной университет Пандит Диндайал, Гандинагар

Образовательный фонд Пимпри Чинчвад, Инженерный колледж Пимпри Чинчвад, Пуна

3 9002 Дварка Прасад Мишра Индийский институт информационных технологий, дизайна и производства Джабалпур

Институт компьютерных технологий Пуны, Дханкавди, Пуна

Пенджабский инженерный колледж, Чандигарх

Инженерный колледж Р. В. Бангалор

Сардар Валлабхбхай Национальный технологический институт, Сурат

Школа инженерии и прикладных наук, Ахмедабад

Шри Виле Парле Инженерный колледж Келвани Мандала Дж. Сангхви, Виле Парле, Мумбаи

3 Шридженд

3 Инженерный колледж (состав JSS Univ.) Майсур

Шри Шивасубрамания Надар Колледж Энгг (автономный)

Национальный инженерный институт Майсур

Инженерный колледж Тиагараджар (автономный)

Университетский колледж инженерного колледжа Бангалор

Инженерный колледж Васави

Вермата Джиджабай Технологический институт (VJTI), Matunga, Mumbai

Vishwakar Технологический институт, Нагпур

VIT Vellore

Инженерный колледж Валчанда, Сангли

Одно из ДИД

Один из IIT

Один из NIT

COEP

VJTI, Mumbai

Другое

Что такое Django Rest Framework и почему вы должны его изучить

так много всего в нескольких строках, подождите, пока вы не узнаете, что такое Django Rest Framework.


Что такое API?
Зачем использовать API?
Почему Django Rest Framework?
Как изучить Django Rest Framework
Заключение

Что такое API?

Django Rest Framework позволяет создавать RESTful API: простой способ передачи информации между интерфейсом и базой данных.

Он разделяет пользовательский интерфейс и хранилище данных и связывает пользователя и базу данных, отправляя файл .json. Точно так же, как этот:

Встроенный визуальный интерфейс DRF

Вспомните, когда вы в последний раз совершали покупки в Интернете: помните ли вы, что каждая статья имела одинаковую структуру, но содержала разную информацию?

Они создали структуру с помощью HTML и CSS, а затем использовали API для заполнения каждой статьи.


Зачем использовать API?

Вы не сможете понять, что такое API, если не поймете, что он может делать.

Представьте, что вы хотите создать веб-приложение. Очевидно, вы бы выбрали Джанго.

Вы создаете его, и он становится хитом! Всем нравится ваше веб-приложение!

Им это так нравится, что они хотят версию для мобильных телефонов!

Время создать версию для Android! И версия для iOS.

И тогда вам придется реплицировать 2 раза один и тот же код для добавления, просмотра, удаления, обновления и удаления данных на разных языках.

Это открывает двери для многих возможных ошибок…

Но, несмотря на это, предположим, что вы создали одно и то же приложение, используя 3 разных языка.

Теперь вы заметили, что ваш сайт статичен. Вы хотите, чтобы ваше веб-приложение было более динамичным и современным. Для этого вам нужен Javascript.

Хотя вы можете сделать это только с помощью Vanilla Javascript, лучше использовать JS-фреймворк, такой как React или Vue.

Теперь вам нужно заново сделать то, что вы делали в Django, iOS и Android.

Или вы можете создать REST API.

С помощью DRF вы можете создать API для предоставления информации пользовательскому интерфейсу.

Вы можете создать FrontEnd с Vue, приложением для Android и iOS, и все три разные платформы подключены к одному и тому же API

Вам нужно создать логику только один раз, и каждая из ваших платформ подключается к одному и тому же API.

Таким образом, если вы хотите обновить его или добавить больше функций, вам нужно изменить только одну сторону, а не на каждой платформе.

Так проще, да? Проще, масштабируемее и надежнее.

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


Почему Django Rest Framework?

Теперь мы знаем, что REST API важны, потому что они позволяют нам легко взаимодействовать с базой данных, и мы можем использовать ее на разных платформах.

Но зачем использовать Django Rest Framework, а не Node.js, Golang, Rust и т. д.?

Ну, для начала, DRF использует Python, простой для изучения язык.

DRF, как и Django, делает все проще и проще. Знаете ли вы представления Django? У вас они есть и в DRF!

Вам нужна конечная точка (HTTP-адрес), которая возвращает вам список со всеми пользователями со всеми их полями и еще одну для создания новых пользователей? Круто, вот код:

 class UserList(generics.ListCreateAPIView):
    набор запросов = User.objects.all()
    сериализатор_класс = UserSerializer 

Вот и все. Вы создаете класс с именем UserList, который наследует методы от ListCreateAPIView.

Как следует из названия, вы можете составить список и создать пользователей. Если вы запросите URL-адрес (GET), вы получите список пользователей, если вы отправите (POST) информацию на этот URL-адрес, он создаст нового пользователя.

3 строки кода. Это все, что вам нужно.

Еще одно замечательное свойство DRF? Его документация. Наряду со Scrapy, у него есть лучшая документация по Django Framework, которую я когда-либо видел.

Есть и более технические аспекты, например, как обрабатываются миграции, как у каждого объекта есть модель, насколько легко переключать базы данных и многое другое.

Будьте уверены, вы не ошибетесь, выбрав Django Rest Framework.


Как изучить Django Rest Framework

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

Хороший вопрос! Помимо простоты использования, у вас есть много бесплатных ресурсов для изучения:

  • Документация по Django Rest Framework. Все, что вам нужно для начала, и даже больше
  • Django опрашивает API с помощью DRF. Помните вводные опросы Django? Теперь версия DRF через Agiliq
  • Создание API с помощью Django и Django Rest Framework. Бесплатная онлайн-книга о Django и DRF. Опять же, благодаря Agiliq
  • Создайте школьную систему с помощью DRF и React. Видео версия
  • Создайте Rest API с помощью Django REST Framework. Видеоверсия
  • Удобная для начинающих версия официального руководства по Django REST Framework, статья Уильяма Висента
  • Давайте создадим API с помощью Django REST Framework, статья Medium

Заключение

Подытожим все, что мы сегодня узнали о Rest API и Django Framework:

  • REST API позволяют нам обмениваться информацией между интерфейсами и база данных.
  • Мы можем использовать один REST API для поддержки любой платформы, которую захотим. Это устраняет дублирование кода и упрощает его эскалацию.
  • DRF использует Python, язык, который легко освоить.
  • Благодаря использованию Python и структуре DRF нам нужно всего несколько строк, чтобы что-то сделать.
  • Отличная документация
  • В Интернете есть много бесплатных ресурсов
  • Он имеет отличный встроенный интерфейс

Если вам нужно отправлять и получать данные между мобильным или веб-приложением, вы не можете пойти не так с Django Rest Framework.

This entry was posted in Популярное