Last modified: July 07, 2024

This article is written in: 🇵🇱

Tworzenie API przy użyciu FastAPI

FastAPI to nowoczesne, wydajne i łatwe w użyciu narzędzie do tworzenia API w Pythonie. Za jego popularność odpowiada prostota tworzenia aplikacji, wbudowana walidacja danych oraz automatyczne generowanie dokumentacji.

Instalacja FastAPI

Aby zacząć pracę z FastAPI, musisz najpierw zainstalować odpowiednie pakiety. Oprócz samego FastAPI warto zainstalować serwer ASGI, np. uvicorn, który pozwoli na uruchamianie aplikacji:

pip install fastapi uvicorn

Tworzenie prostego API

Rozpocznij od utworzenia instancji FastAPI i zdefiniowania kilku ścieżek:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

Aby uruchomić powyższe API, zapisz kod do pliku, np. main.py, a następnie uruchom serwer za pomocą uvicorn:

uvicorn main:app --reload

Po uruchomieniu przejdź do przeglądarki i otwórz adres http://localhost:8000 - zobaczysz odpowiedź z powitaniem.

Przykładowe API

Model danych

Jednym z popularnych narzędzi do definiowania i walidacji modelu danych jest Pydantic. Dzięki niemu możemy w sposób deklaratywny określić strukturę naszych danych oraz oczekiwane typy wartości.

Poniżej mamy przykład modelu Item:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

items = {}  # prosty "słownik" do przechowywania danych

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

Model ten przedstawia przedmiot, który posiada następujące atrybuty:

Tworzenie przedmiotu (POST)

@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return {"id": item_id, **item.dict()}

Pobieranie przedmiotu (GET)

@app.get("/items/{item_id}")
def read_item(item_id: int):
    item = items.get(item_id)
    if item is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

Usuwanie przedmiotu (DELETE)

@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"status": "success"}

Pełny kod API do zarządzania przedmiotami

Poniżej znajduje się pełny, wykonywalny przykład API do zarządzania przedmiotami, wykorzystujący biblioteki FastAPI oraz Pydantic do definicji modelu danych. Zawiera definicję modelu oraz funkcje do tworzenia, odczytywania i usuwania przedmiotów przechowywanych w prostym słowniku.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn

app = FastAPI()

# Przechowywanie danych w słowniku
items = {}

# Definicja modelu danych przy użyciu Pydantic
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

# Endpoint do tworzenia przedmiotu (POST)
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return {"id": item_id, **item.dict()}

# Endpoint do odczytywania przedmiotu (GET)
@app.get("/items/{item_id}")
def read_item(item_id: int):
    item = items.get(item_id)
    if item is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

# Endpoint do usuwania przedmiotu (DELETE)
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"status": "success"}

# Uruchomienie serwera
if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

Uruchomienie serwera

Funkcja uvicorn.run(app, host="127.0.0.1", port=8000) określa, że aplikacja ma być dostępna pod adresem localhost (127.0.0.1) na porcie 8000.

Aby uruchomić ten serwer, wystarczy, że uruchomisz ten plik bezpośrednio z Pythona, używając polecenia:

python nazwa_pliku.py

Gdzie nazwa_pliku.py to nazwa pliku, w którym umieściłeś powyższy kod.

Swagger UI

Swagger UI jest automatycznie generowanym interfejsem użytkownika dla dokumentacji API, dostępnym w FastAPI dzięki integracji z OpenAPI. Dostarcza on przeglądarkę dokumentacji, która pozwala na interaktywne eksplorowanie API, wykonywanie żądań i przeglądanie odpowiedzi bezpośrednio z przeglądarki internetowej.

Swagger UI Example

Funkcjonalności Swagger UI

Korzyści z używania Swagger UI

Korzystanie z API przy użyciu requests

Aby komunikować się z API w Pythonie, potrzebujemy biblioteki requests, którą możemy zainstalować za pomocą poniższej komendy:

pip install requests

Poniżej znajdują się przykłady jak używać tej biblioteki do tworzenia, pobierania i usuwania przedmiotów za pomocą API.

Tworzenie przedmiotu (POST)

Używając metody requests.post, możemy wysłać dane w formacie JSON do endpointu /items/, aby utworzyć nowy przedmiot. Poniżej znajduje się przykład kodu:

import requests

# URL API
url = "http://127.0.0.1:8000/items/"

# Dane przedmiotu
item_data = {
    "name": "example",
    "description": "This is an example item",
    "price": 10.0,
    "tax": 2.0
}

# Wysłanie żądania POST
response = requests.post(url, json=item_data)

# Wyświetlenie odpowiedzi
print(response.status_code)  # Sprawdzenie statusu odpowiedzi
print(response.json())  # Wyświetlenie odpowiedzi w formacie JSON

Pobieranie przedmiotu (GET)

Aby pobrać dane konkretnego przedmiotu, możemy użyć metody requests.get z odpowiednim item_id. Poniżej znajduje się przykład kodu:

import requests

# URL API z dodanym item_id
url = "http://127.0.0.1:8000/items/1"

# Wysłanie żądania GET
response = requests.get(url)

# Wyświetlenie odpowiedzi
if response.status_code == 200:
    print(response.json())  # Wyświetlenie danych przedmiotu
else:
    print("Item not found")  # Wyświetlenie informacji, jeśli przedmiot nie został znaleziony

Usuwanie przedmiotu (DELETE)

Aby usunąć przedmiot na podstawie item_id, możemy użyć metody requests.delete. Poniżej znajduje się przykład kodu:

import requests

# URL API z dodanym item_id
url = "http://127.0.0.1:8000/items/1"

# Wysłanie żądania DELETE
response = requests.delete(url)

# Wyświetlenie odpowiedzi
if response.status_code == 200:
    print(response.json())  # Wyświetlenie statusu usunięcia
else:
    print("Item not found")  # Wyświetlenie informacji, jeśli przedmiot nie został znaleziony

Spis Treści

    Tworzenie API przy użyciu FastAPI
    1. Instalacja FastAPI
    2. Tworzenie prostego API
    3. Przykładowe API
      1. Model danych
      2. Tworzenie przedmiotu (POST)
      3. Pobieranie przedmiotu (GET)
      4. Usuwanie przedmiotu (DELETE)
    4. Pełny kod API do zarządzania przedmiotami
    5. Uruchomienie serwera
    6. Swagger UI
      1. Funkcjonalności Swagger UI
      2. Korzyści z używania Swagger UI
    7. Korzystanie z API przy użyciu requests
      1. Tworzenie przedmiotu (POST)
      2. Pobieranie przedmiotu (GET)
      3. Usuwanie przedmiotu (DELETE)