DRF Flashcards
API
API (от англ. Application Programming Interface, «программный интерфейс приложения») — это интерфейс для обмена данными. Слово «программный» означает, что API служат в первую очередь для взаимодействия программ: с системой взаимодействует не разработчик, а код, написанный им.
JSON
Текстовый формат обмена данными, основанный на JavaScript. JavaScript Object Notation (англ. «объектная запись JavaScript»). Исторически сложилось так, что этот формат «вырос» из языка программирования JavaScript. По структуре JSON очень похож на тип данных dict: это последовательность пар «ключ-значение»; как и словари, JSON поддерживает вложенность. Но JSON более стандартизирован: например, ключи словаря в JSON пишутся только в двойных кавычках. Значениями ключей могут быть строки, числа, булевы значения, словари и списки.
XML
JSON — популярный, но не единственный формат для передачи данных.
XML (eXtensible Markup Language, «расширяемый язык разметки») тоже весьма популярен и широко применяется в разработке. Внешне этот язык чем-то похож на HTML, и это неслучайно: язык разметки веб-страниц — прямой потомок XML.
Архитектура REST
REST (англ. REpresentational State Transfer, «передача состояния представления») — это архитектурный стиль, набор принципов взаимодействия компьютерных систем, основанный на методах протокола HTTP. В отличие от SOAP, REST не подкреплен официальным стандартом.
REST
REpresentational State Transfer, REST (англ. «передача состояния представления») — это набор принципов, которых следует придерживаться при создании API. Если API сделан по этим принципам, его называют RESTful API (или просто REST API).
Принципы REST #1
- Клиент-сервер. Разделение ответственности между клиентом и сервером
Клиент и сервер отвечают за разные вещи. Ответственность клиента — пользовательский интерфейс, ответственность сервера — данные. Если API возвращает HTML-страницу, его нельзя назвать REST API: ведь при этом сервер берёт на себя ответственность за интерфейс.
Принципы REST #2
- Отсутствие состояния. Сервер не хранит состояние
Каждый запрос должен быть независимым, как будто он сделан в первый раз. Сервер не должен хранить какой-либо информации о клиенте. Каждый запрос клиента к серверу должен содержать всю информацию, необходимую для обработки этого запроса: кто запрашивает данные, какие данные запрашиваются.
Принципы REST #3
- Единый интерфейс
Интерфейс обращения к серверу одинаков для всех и не зависит от клиента. Запрос к данным может быть сформирован из браузера, мобильного приложения и с «умного» чайника по одним и тем же правилам.
Принципы REST #4
- Многоуровневость
Первый принцип гласит, что в коммуникации участвуют двое: клиент и сервер. Но можно строить более сложные системы, не нарушая этого принципа.
API сервиса Яндекс.Такси может использовать API Яндекс.Навигатора. Вы как клиент взаимодействуете только с API Яндекс.Такси, а он, в свою очередь, является клиентом навигатора. Здесь есть одно условие — каждый компонент должен видеть только свой уровень. Например, Яндекс.Навигатор не должен видеть все данные, которые вы отправили в Яндекс.Такси.
Принципы REST #5
- Кешируемость
Данные ответа могут быть закешированы. Это значит, что можно сохранить полученные данные на клиенте, а при идентичном запросе взять их из памяти клиента — кеша, а не ждать их с сервера. Нет смысла запрашивать данные повторно, если они никак не изменились.
Принципы REST #6
- Код по запросу
Этот принцип необязательный. Он гласит, что функциональность клиента может быть расширена кодом, приходящим с сервера. Сейчас такое можно встретить повсеместно: JavaScript используется для «оживления» страниц и исполнения каких-то сценариев на стороне клиента. Но принципы формулировались в 2000 году — тогда исполняемый код с сервера возвращали не так часто. Потому и выделили это в отдельный принцип.
Ключевая абстракция в REST
Ключевая абстракция в REST это ресурс. Любая информация, которая может быть названа, может быть ресурсом: пост в социальной сети, коллекция постов, подборка актуальных новостей, пользователь сайта, коллекция любых объектов или других ресурсов.
эндпоинт
В терминах REST URL-адрес, идентифицирующий ресурс, принято называть эндпоинтом (англ. endpoint, «конечная точка»).
HTTP-методы
Любой API предназначен для получения доступа к ресурсам. К ресурсу всегда можно обратиться по URL.
HTTP-метод запроса определяет, что следует сделать:
GET получает ресурсы;
POST создаёт ресурс;
PUT заменяет существующий ресурс целиком;
PATCH частично изменяет существующий ресурс;
DELETE удаляет ресурс.
Идемпотентность методов
Идемпотентность (от лат. idem — «тот же самый» и potens — «способный») — это свойство, заключающееся в том, что многократное выполнение этого метода по результату равно однократному. То есть, выполняя один и тот же запрос много-много раз, мы всегда будем получать один и тот же результат. Даже если сто раз отправить GET-запрос на получение никнейма конкретного пользователя, ответ не изменится
Безопасность методов
Безопасность: метод, который не изменяет ресурс, называется безопасным. Например, если в качестве ресурса рассматривать никнеймы пользователей, то сколько ни отправляй GET-запрос на получение никнейма конкретного пользователя — к изменению никнейма это не приведёт. Метод GET — безопасный.
Метод, который может изменить ресурс, в терминах архитектуры REST считается небезопасным. Такими методами могут быть PUT, PATCH, DELETE или POST.