REST API является архитектурным образцом для создания веб — сервисов. REST — это набор правил, в которых изложены лучшие практики обмена данными между клиентами и серверами. Они используют HTTP-запросы для управления данными и связи с веб-службами. API-интерфейсы REST не сохраняют состояние, кэшируются и согласованы. Они отлично подходят для создания универсальных и масштабируемых веб-приложений. Три основных фреймворка Python — это Django, Flask и FastAPI.
Сегодня мы собираемся изучить FastAPI, веб-фреймворк с открытым исходным кодом, используемый для создания API с помощью Python.
Что такое FastAPI?
Официальный веб-сайт FastAPI описывает FastAPI как современный и высокопроизводительный веб-фреймворк для создания API-интерфейсов с Python 3.6+ на основе стандартных подсказок типа Python. FastAPI работает очень быстро благодаря встроенной поддержке asyncфункции Python 3.6+.
FastAPI был выпущен в 2018 году и был создан Себастьяном Рамиресом. Рамирес был недоволен существующими фреймворками, такими как Flask и DRF, поэтому он создал свой собственный фреймворк, используя такие инструменты, как Starlette и Pydantic. Теперь многие крупные технологические компании, такие как Uber, Netflix и Microsoft, используют FastAPI для создания своих приложений.
Возможности FastAPI
FastAPI имеет много замечательных функций. Давайте посмотрим на них:
- Высокая производительность : как следует из названия, FastAPI работает быстро. Он считается одним из самых быстрых фреймворков Python, доступных в настоящее время.
- Надежность : вы можете создавать готовый к работе код, используя автоматическую интерактивную документацию.
- Интуитивно понятный : FastAPI был разработан, чтобы его было легко использовать и изучать. Он предлагает отличную поддержку редактора и документацию.
- Быстро кодировать : FastAPI увеличивает скорость разработки на 200% −300%.
- Меньше ошибок : это уменьшает около 40% индуцированных ошибок.
- Совместимость : он хорошо работает с открытыми стандартами для APIS, OpenAPI (ранее известного как Swagger) и схемы JSON.
- Плагины : вы можете легко создавать плагины, используя внедрение зависимостей.
- Подсказки типа : вы можете использовать подсказку типа для проверки и преобразования данных.
Flask против FastAPI
В этом разделе мы рассмотрим Flask и FastAPI. Обсудим их плюсы, минусы и варианты использования.
Flask
Flask — это микрофреймворк Python. Он поставляется с ORM, кешированием и аутентификацией. Он был разработан для создания веб-приложений с использованием Python. Он считается простым, быстрым и масштабируемым.
Плюсы
- Гибкость : вы можете управлять большинством аспектов Flask.
- Интуитивно понятный : Flask отлично подходит для начинающих из-за своей простоты.
- Встроенный сервер разработки : эта встроенная функциональность, наряду со встроенной поддержкой, позволяет проводить беспроблемное модульное тестирование.
Минусы
- Нет проверки данных: с помощью Flask вы можете передавать любой тип данных. Это может привести к частому сбою программ.
- Время: у него есть единственный источник, который обрабатывает запросы по очереди, а это означает, что для обработки запросов может потребоваться некоторое время.
Сценарии использования
Flask обычно используется для таких проектов, как:
- Системы электронной коммерции
- Боты для социальных сетей
- Социальные сети
- Статические сайты
FastAPI
FastAPI — это современный высокопроизводительный веб-фреймворк. Он используется для создания веб-API.
Плюсы
- Проверка данных : он проверяет ваш тип данных даже во вложенных запросах JSON.
- Обработка исключений : с FastAPI легко выполнять обработку исключений.
- Поддержка асинхронного кода : он поддерживает асинхронный код с использованием async/awaitключевых слов Python.
Минусы
- Проверка запроса: FastAPI использует Pydantic для проверки запроса. Этот процесс не всегда интуитивно понятен и иногда требует написания собственного валидатора.
- Меньшее сообщество: поскольку фреймворк все еще довольно новый, сообщество меньше по сравнению с другими фреймворками.
Сценарии использования
FastAPI обычно используется для таких проектов, как:
- Внутреннее антикризисное управление
- Развертывание моделей машинного обучения
- Создание учетных записей, логинов и аутентификации для веб-приложений
FastAPI Привет, мир
Попрактикуемся с FastAPI! Мы рассмотрим простой Hello World!и разберем на части.
from fastapi import FastAPIapp = FastAPI()@app.get(«/»)def root ():return {«message»: «Hello World!»}
Чтобы запустить сервер, нам нужно выполнить следующую команду:
uvicorn main:app —reload
Давайте разберемся с этим:
- main: относится к имени файла
- app: относится к объекту, FastAPIсозданному внутри файла hello.py
- —reload: параметр, который перезапускает сервер после изменения кода
Давайте разберем наш Hello World!код:
- Строка 1. Мы импортируем FastAPIкласс Python, обеспечивающий все функции API.
- Строка 3 : Мы создаем экземпляр класса FastAPIи называем его app. Это appупоминается uvicornв приведенной выше команде.
- Строка 5 : Создаем GETпуть.
- Строка 6 : мы определяем функцию, которая будет выполняться всякий раз, когда кто-то посещает указанный выше путь.
- Строка 7 : мы возвращаем ответ клиенту при каждом обращении к маршруту.
Базовые строительные блоки FastAPI
Давайте рассмотрим некоторые строительные блоки FastAPI, включая параметры пути, параметры запроса и тела запроса.
Path parameters
Параметры пути помогают ограничить вызов API до одного ресурса, что означает, что вам не нужно создавать тело для чего-то столь же простого, как поиск ресурсов.
Эти параметры заключены в фигурные скобки {}и позволяют вам контролировать представление определенных ресурсов. Они размещаются перед строкой запроса и на пути к конечной точке.
Давайте посмотрим, как их использовать:
from fastapi import FastAPIapp = FastAPI()@app.get(«/courses/{course_name}»)def read_course(course_name):return {«course_name»: course_name}
Значение параметра пути course_nameбудет передано функции read_couse()в качестве аргумента course_name.
Query parameters
Параметры запроса необязательны. В FastAPI параметры функции, которые не объявлены как часть параметров пути, автоматически интерпретируются как параметры запроса.
Давайте посмотрим на пример кода:
from fastapi import FastAPIapp = FastAPI()course_items = [{«course_name»: «Python»}, {«course_name»: «SQLAlchemy»}, {«course_name»: «NodeJS»}]@app.get(«/courses/»)def read_courses(start: int, end: int):return course_items[start : start + end]
Запроса является множество пар ключ-значение, которое приходит после знака вопроса ?в URL, разделенных амперсандом &.
Взгляните на следующий URL:
http://localhost:8000/courses/?start=0&end=10
Его параметры запроса:
startсо значением 0и endсо значением 10.
В строке 8 кода мы передаем два параметра запроса, которые ожидает наш API.
Request body
Тело запроса — это данные, отправленные клиентом в ваш API. Чтобы объявить один в FastAPI, мы можем использовать модели Pydantic.
Давайте посмотрим на примере, как мы можем это сделать:
from typing import Optionalfrom fastapi import FastAPIfrom pydantic import BaseModelclass Course(BaseModel):name: strdescription: Optional[str] = Noneprice: intauthor: Optional[str] = Noneapp = FastAPI()@app.post(“/courses/”)def create_course(course: Course):return course
Давайте разберемся с этим:
- Строки 1-3 : Импортируем необходимые пакеты.
- Строка 5 : объявляем модель данных запроса.
- Строка 11 : Мы создаем экземпляр FastAPIкласса.
- Строка 13 : Создаем POSTпуть.
- Строка 14 : Мы добавляем модель данных запроса в путь.