DevGang
Авторизоваться

Создайте RESTful API с помощью Python 3 и FastAPI

В этой статье мы создадим простой RESTful API, используя Python 3 и FastAPI.

Но что такое FastAPI?

FastAPI — это современная, быстрая (высокопроизводительная) веб-инфраструктура для создания API с помощью Python 3.6+ на основе стандартных подсказок типов Python.

Для начала давайте импортируем необходимые модули и классы:

pip3 install fastapi uvicorn

Теперь импорт:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional
from uuid import UUID, uuid4
  • FastAPI из пакета fastapi для создания нашего веб-приложения.
  • HTTPException для обработки ответов об ошибках.
  • BaseModel от pydantic для проверки данных и управления настройками с использованием аннотаций типов Python.
  • Optional из typing для обозначения необязательных полей.
  • UUID и uuid4 для генерации и работы с универсально уникальными идентификаторами.

Определение моделей данных

Мы определяем модель Pydantic с именем Item, которая представляет структуру данных элемента в нашем API. Эта модель включает поля для name, description, price и on_offer, причем description является необязательным, а для on_offer по умолчанию установлено значение False.

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    on_offer: bool = False

Экземпляр приложения FastAPI и данные в памяти

app = FastAPI()
items = {}

Мы создаем items = {}, чтобы сохранить элементы в памяти для нашего теста.

RESTful операции

Теперь перейдем к созданию наших операций по сохранению items. Для этого мы создадим RESTfull API с функциями публикации, размещения, получения и удаления:

Начиная с post:

@app.post("/items/", response_model=Item)
async def create_item(item: Item):
    item_id = uuid4()
    items[item_id] = item
    return item

Этот код создаст новый элемент с uuid для создания индекса.

Далее давайте создадим два метода: один для вывода списка всех элементов, а другой для перечисления по идентификатору:

@app.get("/items/", response_model=dict)
async def read_items():
    return items

@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: UUID):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

Следующим шагом будут методы обновления и удаления:

@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: UUID, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item

@app.delete("/items/{item_id}", response_model=Item)
async def delete_item(item_id: UUID):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items.pop(item_id)

А теперь приступим к тестированию. Для этого в вашем терминале введите следующую команду:

uvicorn main:app --reload

Эта команда создаст сервер на порту 8000.

Теперь, чтобы создать новый элемент, мы можем использовать этот завиток ниже:

import requests
import json

url = "localhost:8000/items"

payload = json.dumps({
  "name": "Example",
  "description": "This is an example description for the item.",
  "price": 10.99,
  "on_offer": False
})
headers = {
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

И откройте localhost:8000/docs и проверьте свои конечные точки с помощью Swagger.

Источник:

#Python #FastAPI
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу