Skip to content

Latest commit

 

History

History
152 lines (99 loc) · 14 KB

File metadata and controls

152 lines (99 loc) · 14 KB

30 дней Python: День 28 - API

<< День 27 | День 29 >>

30DaysOfPython

📘 День 28

Application Programming Interface(API)

API

API расшифровывается как интерфейс прикладного программирования. Тип API, который мы рассмотрим в этом разделе, - это Web-API. Web-API - это определенные интерфейсы, посредством которых происходит взаимодействие между сервером предприятия и приложениями клиента, использующими его ресурсы, что также является соглашением об уровне обслуживания (Service Level Agreement, SLA), определяющим функционального поставщика и предоставляющим пользователям API путь или URL-адрес для доступа к сервису.

В контексте веб-разработки, API определяется как набор спецификаций, таких как сообщения запросов по протоколу передачи гипертекста (HTTP), вместе с определением структуры ответных сообщений, обычно в формате XML или JavaScript Object Notation (JSON).

Web-API шаг за шагом отходит от веб-сервисов на базе простого объектного доступа к протоколу (Simple Object Access Protocol, SOAP) и архитектуры ориентированной на службы (service-oriented architecture, SOA) в сторону более прямого стиля передачи состояния представления (representational state transfer, REST) и работы с веб-ресурсами.

Благодаря web-API социальные медиа-сервисы позволяют веб-сообществам обмениваться контентом и данными между различными сообществами и платформами.

С использованием API контент, созданный динамически в одном месте, может быть опубликован и обновлен в нескольких местах в сети Интернет.

Например, REST API Twitter позволяет разработчикам получать доступ к основным данным Twitter, а Search API предоставляет методы для взаимодействия разработчиков с поиском и данными о трендах в Twitter.

Множество приложений предоставляют конечные точки API. Некоторые примеры API включают API стран, API пород кошек.

В этом разделе мы рассмотрим RESTful API, который использует методы запросов HTTP для получения (GET), обновления (PUT), создания (POST) и удаления (DELETE) данных.

Построение API

RESTful API представляет собой интерфейс прикладного программирования (API), который использует HTTP-запросы для выполнения операций GET, PUT, POST и DELETE с данными. В предыдущих разделах мы изучили Python, Flask и базу данных MongoDB. Мы будем использовать полученные знания для разработки RESTful API с использованием Python Flask и базы данных MongoDB. Всякое приложение, которое имеет операции CRUD (Create, Read, Update, Delete), имеет API для создания данных, получения данных, обновления данных или удаления данных из базы данных.

Для создания API полезно понимать протокол HTTP и цикл запроса и ответа HTTP.

HTTP(Hypertext Transfer Protocol)

HTTP - это установленный протокол связи между клиентом и сервером. Клиент в данном случае - это браузер, а сервер - это место, где вы получаете доступ к данным. HTTP - это сетевой протокол, используемый для доставки ресурсов, которые могут быть файлами во Всемирной паутине, будь то HTML-файлы, файлы изображений, результаты запросов, скрипты или другие типы файлов.

Браузер является HTTP-клиентом, поскольку он отправляет запросы на HTTP-сервер (веб-сервер), который затем отправляет ответы обратно клиенту.

Структура протокола HTTP

HTTP использует модель клиент-сервер. HTTP-клиент открывает соединение и отправляет сообщение запроса на HTTP-сервер, а HTTP-сервер возвращает ответное сообщение, которое является запрошенными ресурсами. Когда цикл ответа на запрос завершается, сервер закрывает соединение.

HTTP request response cycle

Формат сообщений запроса (Request) и ответа (Response) аналогичен. Оба вида сообщений имеют

  • начальная строка (initial line),
  • ноль или более строк заголовка (header lines),
  • пустая строка (то есть CRLF),
  • и, при наличии, необязательное тело сообщения (например, файл, данные запроса или результат запроса).

Давайте рассмотрим пример запроса и ответа при переходе на сайт: https://thirtydaysofpython-v1-final.herokuapp.com/. Обратите внимание, что этот сайт развернут на бесплатном динамическом сервере Heroku, и в некоторых месяцах он может не работать из-за большого количества запросов.

Request and Response header

Начальная строка запроса (строка статуса)

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

  • имя метода (GET, POST, HEAD),
  • путь к запрашиваемому ресурсу,
  • версия HTTP, используемая в запросе. Например, GET / HTTP/1.1.

GET является наиболее распространенным методом HTTP, который используется для получения или чтения ресурса, а POST - распространенный метод запроса для создания ресурса.

Начальная строка ответа (строка статуса)

Начальная строка ответа, называемая строкой состояния (status line), также состоит из трех частей, разделенных пробелами:

  • Версия HTTP
  • код состояния ответа, который указывает результат запроса, и причина, которая описывает код состояния. Примеры строк состояния (status lines) могут быть следующими:: HTTP/1.0 200 OK или HTTP/1.0 404 Not Found

Примечания:

Самые распространенные коды состояния: 200 OK: Запрос выполнен успешно, и результатирующий ресурс (например, файл или вывод скрипта) возвращается в теле сообщения. 500 Server Error: Внутренняя ошибка сервера. Полный список кодов состояния HTTP можно найти здесь. Также его можно найти здесь.

Поля заголовка

Как вы видите на приведенном выше скриншоте, строки заголовка (header lines) предоставляют информацию о запросе или ответе, а также об объекте, отправляемом в теле сообщения.

GET / HTTP/1.1
Host: thirtydaysofpython-v1-final.herokuapp.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: https://thirtydaysofpython-v1-final.herokuapp.com/post
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,fi-FI;q=0.8,fi;q=0.7,en-CA;q=0.6,en-US;q=0.5,fr;q=0.4

Тело сообщения

HTTP-сообщение может иметь тело данных, отправляемое после строк заголовка. В ответе это место, где возвращается запрошенный ресурс клиенту (самое распространенное использование тела сообщения), или, возможно, пояснительный текст в случае ошибки. В запросе это место, куда отправляются пользовательские данные или загруженные файлы на сервер.

Если в HTTP-сообщении присутствует тело, обычно в сообщении есть строки заголовка, описывающие это тело. В частности,

  • Заголовок Content-Type указывает MIME-тип данных в теле сообщения (например, text/html, application/json, text/plain, text/css, image/gif).
  • Заголовок Content-Length указывает количество байтов в теле сообщения.

Методы запросов

В HTTP существуют четыре основных метода запросов, которые мы будем реализовывать в нашем API или приложении для выполнения операций CRUD:

  1. GET: Метод GET используется для получения информации с сервера по указанному URI. Запросы с использованием GET должны только извлекать данные и не должны оказывать другого влияния на данные.

  2. POST: Метод POST используется для создания данных и отправки их на сервер, например, при создании нового поста, загрузке файлов и т.д., с использованием HTML-форм.

  3. PUT: Метод PUT используется для замены всех текущих представлений целевого ресурса загруженным содержимым. Он используется для модификации или обновления данных.

  4. DELETE: Метод DELETE используется для удаления данных или ресурсов. Он позволяет удалить указанные данные с сервера.

💻 Упражнения: День 28

  1. Ознакомьтесь с API и HTTP.

🎉 ПОЗДРАВЛЯЕМ ! 🎉

<< День 27 | День 29 >>