От внешнего интерфейса к серверному с помощью FastAPI
Создано DALL-E-3
Что такое API простым языком?
Представьте, что вы в ресторане и вам очень хочется вкусной еды. Вы садитесь за столик и с нетерпением ждете меню. В этом сценарии меню похоже на API (интерфейс прикладного программирования).
Меню как API . Меню — это ваш интерфейс к кухне ресторана. Он не раскрывает вам секреты кухни, но представляет блюда, которые вы можете заказать, и информацию, необходимую для выбора.
Заказ : Когда вы определитесь, что хотите, вам не нужно идти на кухню и готовить еду самостоятельно. Вместо этого вы сообщаете о своем выборе официанту (посреднику), который передает ваш запрос на кухню.
пример аналогии того, как работают API
Клиент : представляет программное обеспечение или приложение, которое хочет запросить информацию или услуги.
Официант : действует как посредник, аналогичный API, который принимает запрос клиента и передает его в ресторан (на кухню).
Ресторан (кухня): представляет систему или приложение, содержащее данные или услуги, необходимые клиенту.
В этой аналогии клиент (программное обеспечение) взаимодействует с официантом (API), чтобы запросить конкретную услугу (блюдо) у ресторана (системы). Запрос API аналогичен оформлению заказа, а ответ API — получению взамен готового блюда (данных или услуги).
Где используются API?
Давайте рассмотрим некоторые простые и удобные для новичков варианты использования API. Эти примеры помогут вам понять, как API обычно используются в повседневных сценариях:
Информация о погоде . Представьте, что вы используете приложение погоды на своем телефоне. Приложение само не генерирует данные о погоде; вместо этого он получает информацию о погоде из API метеорологической службы. Этот API предоставляет обновления погоды в режиме реального времени, которые отображает приложение.
Направления на карте . Когда вы перемещаетесь с помощью картографического приложения, такого как Google Maps, оно использует API для получения направлений и данных о трафике в реальном времени. Вы вводите пункт назначения, и приложение запрашивает API, чтобы рассчитать лучший для вас маршрут.
Публикация в социальных сетях . Делились ли вы когда-нибудь новостной статьей или фотографией в социальных сетях? Эти платформы часто позволяют сторонним приложениям подключаться через API. Когда вы делитесь чем-то из приложения, оно связывается с API платформы социальных сетей, чтобы опубликовать ваш контент.
Приложения чата . Приложения для обмена сообщениями используют API для отправки и получения сообщений. Когда вы отправляете текст или смайлик в приложении чата, оно использует API для передачи этих данных получателю.
Использование API
Чтобы проиллюстрировать, как разработчики взаимодействуют с API, давайте рассмотрим реальный пример вызова реального API. Мы начнем с подробной схемы компонентов клиента, сервера, API и базы данных, а затем очень подробно объясним каждый компонент, включая конечные точки, запросы и ответы.
URL -адрес REST API , который мы используем для этого примера:
https://api.sampleapis.com/coffee/hot
Объяснение компонентов:
Клиент : клиент, которым может быть веб-браузер или мобильное приложение, инициирует процесс, отправляя HTTP-запрос в API.
Сервер : сервер размещает API, получает запрос клиента и обрабатывает его.
API : Это ядро процесса. Он получает запрос клиента и служит посредником между клиентом и базой данных.
База данных : в базе данных хранятся данные, необходимые API для выполнения запроса. В этом случае он содержит информацию о разных видах кофе.
отношение клиент-сервер-база данных
Поток данных:
HTTP-запрос GET клиента отправляется на сервер.
Сервер пересылает запрос API.
API обрабатывает запрос, включая идентификацию конечной точки, и запрашивает базу данных.
База данных отвечает API запрошенными данными.
API отправляет HTTP-ответ обратно клиенту с данными.
Понимание URL-адреса
Давайте разберем URL-адрес » https://api.sampleapis.com/coffee/hot » шаг за шагом:
Протокол (https) : здесь указывается протокол, используемый для связи, в данном случае это » https », что указывает на безопасное HTTP-соединение. Это гарантирует, что данные, передаваемые между клиентом и сервером, зашифрованы в целях безопасности.
Домен ( api.sampleapis.com ) : Домен — это адрес сервера, на котором размещен API. В этом URL-адресе » api.sampleapis.com » является доменом. Это похоже на почтовый адрес сервера в Интернете.
Путь ( /coffee/hot ) : Путь — это конкретный маршрут или местоположение на сервере, где размещен API. В нашем URL-адресе » /coffee/hot » — это путь. Это похоже на переход к определенной папке или каталогу на компьютере.
Конечная точка API : полный URL-адрес, включая домен и путь, указывает уникальную конечную точку API. Это конкретное место, где API будет отвечать на запросы. В данном случае » https://api.sampleapis.com/coffee/hot » является конечной точкой.
Итак, когда клиент (например, веб-браузер или приложение) хочет взаимодействовать с этим API, он формирует запрос с этим URL-адресом, указывая протокол, домен и конечную точку. В этом примере это все равно, что сказать браузеру перейти на определенный безопасный адрес ( https://api.sampleapis.com ) и запросить информацию, связанную с » горячим кофе » (конечная точка). Сервер, на котором размещен API, обрабатывает этот запрос и предоставляет в ответ соответствующие данные.
Понимание HTTP-запросов и ответов
HTTP означает протокол передачи гипертекста , который является основой передачи данных во Всемирной паутине.
HTTP-запрос — это сообщение, отправленное клиентом (например, веб-браузером, мобильным приложением или любым программным обеспечением) для запроса информации с сервера.
Он состоит из запросов и ответов . Запрос — это данные, необходимые для выполнения вызова API, а ответ — это данные, которые вы получаете взамен.
HTTP-запросы
Он состоит из нескольких частей:
Метод запроса :
Это определяет действие, которое клиент хочет, чтобы сервер выполнил. Общие методы включают в себя:
1. GET-запрос:
Метод GET используется для получения данных из указанного ресурса.
Это запрос только для чтения , то есть он не изменяет данные на сервере.
Обычно используется в веб-браузерах при посещении веб-сайта, поскольку он запрашивает веб-страницы и ресурсы (изображения, стили, скрипты).
Запросы GET не должны иметь тела запроса и обычно кэшируются браузерами для более быстрого поиска.
2. POST-запрос:
Метод POST используется для отправки данных для обработки в указанный ресурс.
Он часто создает новый ресурс на сервере или выполняет такое действие, как отправка формы или выполнение транзакции.
POST-запросы могут иметь тело запроса, содержащее данные для обработки сервером.
3. PUT-запрос:
Метод PUT используется для обновления или замены существующего ресурса или создания нового ресурса, если он не существует.
Он идемпотентный , то есть повторяющиеся запросы будут иметь один и тот же результат, гарантируя, что выполнение нескольких одинаковых запросов не приведет к неожиданному поведению.
Запрос PUT обычно требует отправки всего представления ресурса для обновления. Это означает, что если вы хотите обновить одно поле, вам необходимо отправить весь ресурс с модификацией.
4. УДАЛИТЬ запрос:
Метод DELETE используется для запроса удаления указанного ресурса .
Он удаляет ресурс и связанные с ним данные с сервера.
Запросы DELETE обычно не имеют тела запроса .
5. Запрос ИСПРАВЛЕНИЯ:
Метод PATCH используется для внесения частичных изменений в ресурс.
Он часто используется, когда вы хотите обновить только определенные поля или атрибуты ресурса, не затрагивая весь ресурс.
Запросы PATCH требуют тела запроса, в котором указываются изменения, которые необходимо внести.
Разница между PUT и PATCH :
Основное различие заключается в том, как они обрабатывают обновления:
PUT : Заменяет весь ресурс новым представлением . Если вы опустите поле в новом представлении, оно часто интерпретируется как пустое или нулевое, что потенциально может перезаписать существующие данные. Он не очень подходит для частичных обновлений.
ИСПРАВЛЕНИЕ : обновляет определенные поля ресурса . Вы отправляете только те изменения, которые хотите применить, что делает возможным частичное обновление, не затрагивая другие поля. Это более эффективно, когда вам нужно внести небольшие изменения.
URL-адрес :
Это адрес ресурса или конечной точки API, с которой клиент хочет взаимодействовать.
Заголовки :
Они предоставляют дополнительную информацию о запросе, например тип данных, которые клиент может принять, или учетные данные аутентификации.
Тело :
Для таких методов, как POST и PUT, тело содержит данные, которые клиент хочет отправить на сервер, часто в формате JSON.
запросы на импорт # Определите URL-адрес конечной точки API url = "https://api.sampleapis.com/coffee/hot" # Отправьте ответ на запрос HTTP GET = Requests.get(url) # Проверьте, был ли запрос успешным (код состояния 200) ) if response.status_code == 200 : data = response.json() print ( "Данные получены:" ) print (data) else : print ( f"Запрос не выполнен с кодом состояния: {response.status_code} " )
HTTP-ответы
HTTP-ответ — это сообщение, отправленное сервером клиенту в ответ на HTTP-запрос.
Он также состоит из нескольких частей:
1. Коды состояния
Это трехзначное число , обозначающее результат запроса. Общие коды состояния включают в себя:
200 OK: запрос прошел успешно, и сервер отправляет запрошенные данные.
201 Created: запрос выполнен успешно, и сервер создал новый ресурс.
400 Неверный запрос: запрос был неверным или недействительным.
404 Not Found: запрошенный ресурс не найден на сервере.
500 Внутренняя ошибка сервера: при обработке запроса на сервере произошла ошибка.
2. Заголовки:
Подобно заголовкам запроса, они предоставляют дополнительную информацию об ответе, например тип отправляемых данных или информацию о сервере.
3. Тело:
Он содержит данные или контент, отправленные сервером в ответ на запрос клиента. Данные могут быть в различных форматах, таких как HT ML, JSON, XML или обычный текст.
[ { "title" : "Black" , "description" : "Черный кофе – это очень просто: молотые кофейные зерна завариваются в горячей воде и подаются теплыми. И если вы хотите, чтобы это звучало необычно, вы можете назвать черный кофе по его названию. имя собственное: кафе нуар». , «img» : [ «coffe» ] , «img» : «https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/A_small_cup_of_coffee.JPG/640px-A_small_cup_of_coffee.JPG» , «id» : 1 } , { "title" : "Латте" , "description" : "Как самый популярный кофейный напиток, латте состоит из порции эспрессо и вспененного молока с небольшим количеством пенки. Его можно заказать. простой или с добавлением чего-либо, от ванили до тыквенных специй». , «img» : [ "Espresso" , "Wareed Milk" ] , "Image" : "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/latte_at_doppio_ristretto_chiang_maumb_01.jpg/509px-latte_ristretto_chiang_mabi_01. .jpg " , "id" : 2 } , ... ]
FastAPI: современная платформа Python для создания API
FastAPI — это передовая веб-инфраструктура Python, предназначенная для быстрого и простого создания API. Он приобрел значительную популярность в сообществе разработчиков благодаря своим исключительным функциям и преимуществам. Давайте подробнее рассмотрим, что отличает FastAPI:
Автоматическая документация:
FastAPI упрощает разработку API, автоматически создавая интерактивную и удобную для пользователя документацию. Это означает, что вам не нужно отдельно документировать конечные точки API. Это удобная для разработчиков функция, которая упрощает совместную работу и интеграцию.
Типовая безопасность и проверка:
FastAPI использует подсказки типов Python для обеспечения безопасности типов при разработке API. Это не только помогает обнаружить ошибки на ранней стадии, но и помогает автоматически генерировать точные схемы API. Вы получаете проверку и сериализацию данных запросов и ответов без необходимости использования дополнительного кода.
Асинхронная поддержка:
FastAPI полностью поддерживает асинхронное программирование, что меняет правила игры для высокопроизводительных API. Вы можете создавать асинхронные маршруты, использовать Python
async
иawait
эффективно обрабатывать одновременные запросы.
Монтаж:
Сначала убедитесь, что в вашей системе установлен Python.
Установите FastAPI и Uvicorn, облегченный сервер ASGI, используя pip:
pip insatll fastapi uvicorn
Настройка кода:
Создайте новый файл Python (например,
main.py
) для написания приложения FastAPI.Импортируйте класс FastAPI из
fastapi
модуля:
from fastapi import
FastAPI = FastAPI()
Определите конечные точки:
Определите конечные точки API с помощью декораторов FastAPI.
Добавьте маршруты в свое приложение с помощью функций. Например:
@app.get( "/" )
def read_root ():
return { "Hello" : "World" }
Запустите ваше приложение:
uvicorn main :app --reload
Здесь main
относится к имени вашего файла Python (без расширения .py
) и app
представляет собой созданный вами экземпляр FastAPI.
Доступ к вашему API:
Ваше приложение FastAPI будет доступно
http://localhost:8000
по умолчанию.Вы можете использовать такие инструменты
curl
, как веб-браузер, для доступа к определенным конечным точкам.
Доступ к пользовательскому интерфейсу Swagger
Swagger UI — это мощная встроенная функция FastAPI, которая упрощает документацию API. Получив доступ localhost:8000/docs
к своему приложению FastAPI, вы обнаружите интерактивный веб-интерфейс, который предоставляет подробную информацию о конечных точках вашего API. С помощью пользовательского интерфейса Swagger вы можете исследовать и тестировать свой API, что упрощает понимание возможностей вашего API и взаимодействие с ними.
Архитектура MVC (модель-представление-контроллер)
MVC — это популярный архитектурный шаблон программного обеспечения, используемый для организации кода в приложениях, особенно в веб-приложениях и приложениях для настольных компьютеров. Он разделяет приложение на три взаимосвязанных компонента:
Модель (Данные):
Модель представляет данные и бизнес-логику приложения.
Он управляет и поддерживает состояние и поведение приложения.
Он отвечает за хранение, поиск, проверку и манипулирование данными.
Изменения в модели напрямую влияют на представление.
Просмотр (презентация):
Представление отвечает за представление данных пользователю.
Он имеет дело с пользовательским интерфейсом, включая такие элементы, как кнопки, формы и графические компоненты.
Представление не обрабатывает данные напрямую, а получает их от модели.
Он отвечает за отображение данных и реагирование на действия пользователя.
Контроллер (Логика):
Контроллер действует как посредник между Моделью и Представлением.
Он получает пользовательский ввод и преобразует его в действия для модели или представления.
Он содержит логику приложения, включая способы обработки и представления данных.
Он обновляет модель на основе взаимодействия с пользователем и может запускать обновления в представлении.
Тестирование API
Когда дело доходит до тестирования API, в распоряжении разработчиков есть различные инструменты. Два популярных варианта включают в себя:
cURL : Этот инструмент командной строки представляет собой швейцарский армейский нож разработчика для выполнения HTTP-запросов для тестирования API. С помощью cURL вы можете отправлять G ET, POST, PUT, DELETE и другие запросы для взаимодействия с вашим API непосредственно из терминала. Это легкий и универсальный инструмент для быстрого тестирования и отладки API.
2. Postman : Postman — это удобный инструмент тестирования API с графическим интерфейсом. Он позволяет создавать и организовывать запросы API, управлять средами и автоматизировать тестирование. Postman особенно полезен для тестирования сложных рабочих процессов, API с аутентификацией, а также для обмена тестовыми коллекциями с членами команды.
И cURL, и Postman удовлетворяют разные потребности: cURL отлично подходит для быстрых тестов и написания сценариев, а Postman предоставляет комплексную среду для углубленного тестирования API и совместной работы. Выбор между ними часто зависит от сложности ваших требований к тестированию и предпочтительного рабочего процесса.
Безопасность в API
Когда дело доходит до защиты API, для эффективной защиты ваших цифровых активов необходимо уделить внимание нескольким важным аспектам:
Аутентификация:
Аутентификация — это процесс проверки личности пользователей или систем, взаимодействующих с вашим API.
Общие методы аутентификации включают ключи API , токены (например, веб-токены JSON или токены OAuth) и базовую аутентификацию .
Эффективная аутентификация гарантирует, что только авторизованные пользователи или системы смогут получить доступ к вашему API.
Авторизация:
Авторизация выходит за рамки аутентификации и определяет, какие действия разрешено выполнять пользователям или системам после получения доступа.
Управление доступом на основе ролей (RBAC) и разрешения часто используются для управления тем, кто может читать, записывать или изменять данные через ваш API.
Правильная авторизация гарантирует, что пользователи имеют правильный уровень доступа, не выходя за его границы.
Ограничение скорости:
Ограничение скорости помогает предотвратить злоупотребление вашим API, ограничивая количество запросов, которые пользователь или система могут сделать в течение определенного периода времени.
Это крайне важно для защиты вашего API от распределенных атак типа «отказ в обслуживании» (DDoS) и обеспечения справедливого использования.
Ограничения скорости могут быть определены на основе IP-адресов, учетных записей пользователей или ключей API.
HTTPS и шифрование:
Чтобы защитить данные при передаче, всегда используйте HTTPS для шифрования связи между клиентами и вашим API.
Шифрование гарантирует, что данные, которыми обмениваются клиент и сервер, остаются конфиденциальными и безопасными .
Проверка ввода и очистка:
Проверяйте и очищайте входные данные для предотвращения атак путем внедрения, таких как внедрение SQL и межсайтовый скриптинг (XSS).
Это гарантирует, что вредоносные данные не смогут поставить под угрозу целостность вашего API или вашей базы данных.
Рекомендации по обеспечению безопасности API:
Следуйте общепринятым рекомендациям по обеспечению безопасности API, например обновляйте программное обеспечение и библиотеки для устранения известных уязвимостей.
Внедрите правильную обработку ошибок, чтобы избежать утечки конфиденциальной информации в ответах об ошибках.
Защитите себя от атак грубой силы, внедрив механизмы блокировки учетной записи.
Регулирование и мониторинг:
Внедрите решения для мониторинга, чтобы следить за производительностью и безопасностью вашего API.
Настройте автоматические оповещения для обнаружения необычной активности и реагирования на нее.
Внедрите регулирование, чтобы ограничить количество запросов от одного клиента за короткий период, что может помочь уменьшить злоупотребления и защитить ваши ресурсы.
Будущее API
Ландшафт API готов к трансформации: передовые технологии, такие как gRPC , WebSockets и GraphQL , меняют обмен данными. Заглядывая в будущее, ожидаем:
Эффективность благодаря gRPC . Высокопроизводительные возможности gRPC произведут революцию в архитектуре коммуникаций в реальном времени и микросервисов.
Работа в реальном времени : WebSockets обеспечит беспрецедентную интерактивность в реальном времени для приложений, от игр до инструментов для совместной работы.
Гибкий доступ к данным : GraphQL позволит клиентам запрашивать только те данные, которые им нужны, повышая эффективность API и удобство работы пользователей.
Дальнейшее чтение и ссылки
Вот некоторые ссылки и дополнительные материалы для чтения по различным аспектам, связанным с API:
Основы API:
Википедия: Интерфейс прикладного программирования (API) — подробный обзор API.
Веб-документы MDN: что такое API? — Объяснение API для начинающих.
RESTful API:
Диссертация Роя Филдинга по REST — оригинальная диссертация Роя Филдинга, создателя REST, объясняющая принципы архитектуры RESTful.
гРПК:
Официальная документация gRPC — официальная документация по gRPC, включая учебные пособия и примеры.
gRPC: Up and Running — Книга Касуна Индрасири и Данеша Куруппу — Полное руководство по gRPC.
Вебсокеты:
MDN WebSockets API — Подробный справочник по использованию WebSockets в веб-разработке.
WebSocket.org — центральный ресурс информации, связанной с WebSocket.
ГрафQL:
Официальная документация GraphQL — отличная отправная точка для понимания GraphQL и того, как его использовать.
How To GraphQL — комплексный ресурс с учебными пособиями и примерами для изучения GraphQL.
Безопасность API:
Десять крупнейших угроз безопасности API OWASP — список десяти крупнейших угроз безопасности API и рекомендации по их устранению.
Рекомендации по обеспечению безопасности API. Руководство по передовым методам обеспечения безопасности API.
Бессерверные API:
Документация AWS Lambda — официальная документация AWS Lambda, популярной бессерверной платформы.
Cloudflare Workers® — мгновенно развертывайте бессерверный код по всему миру, чтобы обеспечить ему исключительную производительность, надежность и масштабируемость.