Hoe stel je een Fast API-toepassing in met een NoSQL-database

Inleiding

Bij het ontwikkelen van Python-toepassingen is FastAPI een uitstekende keuze voor de bouw van hoge-performance oplossingen. Het biedt snelheid, eenvoud en ondersteuning voor asynchroon programmeren, waardoor het ideaal is voor het ontwikkelen van moderne, schaalbare toepassingen.
In deze handleiding zullen we u door het proces van het opzetten van een FastAPI-toepassing met een NoSQL-database leiden. Bij het opslaan en beheren van gegevens bieden NoSQL-databases flexibiliteit en schaalbaarheid, waardoor ze een goede keuze zijn voor toepassingen die diverse en complexe gegevensstructuren moeten verwerken.

Vereisten

Voordat u begint, moet u ervoor zorgen dat u de volgende beschikt:

  • Een server die Ubuntu draait, een niet-root-gebruiker met sudo-rechten en een actieve firewall. Voor aanwijzingen over hoe dit in te stellen, kies uw distributie uit deze lijst en volg onze handleiding voor de beginserverinstelling. Zorg ervoor dat u met een ondersteunde versie van Ubuntu werkt.

  • Bekendheid met de Linux commandoregel. Voor een introductie of herinnering aan de commandoregel kunt u deze gids over Linux command line primer bezoeken.

  • Voer sudo apt-get update in in de Ubuntu terminal uit om er voor te zorgen dat uw systeem de nieuwste versies en beveiligingsupdates heeft voor de software beschikbaar in de op uw systeem geconfigureerde repositories.

Deze instructies zijn geldig voor de meest recente versies van Ubuntu: Ubuntu 24.04, Ubuntu 22.04 en Ubuntu 20.04. Als u Ubuntu versie <= 18.04 gebruikt, adviseren we u om te upgraden naar een nieuwere versie, aangezien Ubuntu geen ondersteuning meer biedt voor deze versies. Deze collectie gidsen helpt u bij het upgraden van uw Ubuntu-versie.

Stap 1 – Python-omgeving op uw machine instellen

Gedurende deze handleiding gebruiken we het pakket python3 om commando’s uit te voeren. De nieuwste Ubuntu-versies zijn uitgevoerd met Python 3, dus om de installatie te verifiëren, voer de volgende opdracht uit:

python3 --version

In het geval dat dit een foutmelding retourneert, kunt u het pakket installeren/herinstalleren door uit te voeren:

sudo apt-get install python3

Volgende moet u pip installeren om Python-pakketten en hun afhankelijkheden veilig te installeren.

sudo apt-get install python3-pip

Stap 2 – Maak virtuele omgeving

Als u Ubuntu versie < 24.04 gebruikt, moet u geen virtuele omgeving aanmaken, maar het is een goed gebruik om afhankelijkheden van uw project te isoleren.

Vanaf Python 3.11 en pip 22.3 is er een nieuwe PEP 668 die voorstelt om Python-basisomgevingen als “extern beheerd” te markeren, wat betekent dat u niet in staat zult zijn pip te gebruiken om pakketten succesvol te installeren tenzij u binnen een virtuele omgeving werkt.

In deze stap zult u een virtuele omgeving voor uw project maken die de afhankelijkheden van uw project isoleert om potentiële conflicten tussen verschillende pakketversies te vermijden. Voer in de terminal de volgende serie aanbevelende opdrachten uit:

sudo apt-get install python3-venv

Dit zal het vereiste venv pakket installeren om een virtuele omgeving te maken.

python3 -m venv fastapi-env

Deze opdracht zal een virtuele omgeving fastapi-env aanmaken binnen uw werkende map. Om te beginnen met werken binnen deze omgeving, moet u deze activeren.

source fastapi-env/bin/activate

Na succesvol uitvoeren zult u de terminalprompt zien die zo aangepast is:

(fastapi-env) user@machine:~$

Nu kunt u beginnen met het installeren van de vereiste afhankelijkheden binnen deze virtuele omgeving.

Stap 3 – Installeer vereiste bibliotheken en pakketten

In deze stap zult u enkele pakketten en bibliotheken installeren die nodig zijn om dit handleidingje succesvol door te volgen.

Startelen we door het installeren van fastapi, wat nodig is om uw FastAPI-toepassing te bouwen, en uvicorn, wat nodig is om de FastAPI-toepassing te draaien.

pip install fastapi uvicorn

In deze handleiding zullen we MongoDB gebruiken als NoSQL-database. Om met MongoDB te interacteren vanuit uw FastAPI, moet u motor installeren, dat een asynchroon Python-stuurprogramma voor MongoDB is.

pip install motor

Stap 4 – Installeer en configureer MongoDB op Ubuntu

Om MongoDB te installeren op uw Ubuntu-machine, voer de volgende opdrachten in in de terminal uit:

wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

Na succesvol uitvoeren van deze opdrachten, wordt het echo-parameter teruggegeven. Nu doe een snel:

sudo apt-get update

Dit zal ervoor zorgen dat u de laatste updates krijgt nadat u de MongoDB-sleutels heeft ingesteld.

Volgend moet u een afhankelijkheid van openssl op uw systeem installeren, dat nodig is voor de installatie van MongoDB.

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Na uitvoering zal u gevraagd worden services opnieuw op te starten. Na herstarten installeert u MongoDB met de volgende opdracht:

sudo apt-get install -y mongodb

Start en schakel de MongoDB-services in:

sudo systemctl start mongod
sudo systemctl enable mongod

U kunt de status van de MongoDB-dienst controleren en de verbinding testen door de volgende commando’s uit te voeren:

sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'

Stap 5 – FastAPI applicatie maken

De volgende stap is om een FastAPI applicatie te maken. Maak in uw werkmap een bestand aan genaamd database.py:

nano database.py

Dit opent een lege tekst编辑器. Schrijf uw databaseverbindinglogica hier.

database.py
from motor.motor_asyncio import AsyncIOMotorClient

MONGO_DETAILS = "mongodb://localhost:27017"

client = AsyncIOMotorClient(MONGO_DETAILS)

db = client.mydatabase

collection = db.mycollection

Houdend in gedachte dat mycollection van mydatabase is opgevuld met enige gegevens, maak nu een main.py aan dat de logica van uw applicatie bevat. In het volgende FastAPI app, wordt een databaseverbinding opgesteld met behulp van database.py routes voor AI voorspelling zijn gedefinieerd. Met deze routes wordt de invoer gecontroleerd.

nano main.py

In de tekst编辑器, schrijf de logica:

main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection

app = FastAPI()

# eenvoudig dataset en model
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegressions()
model.fit(x, y)

# definieer het Pydantic model voor invoervalidatie
class InputData(BaseModel):
  feature: float

# route_1 voor het voorschatten van de uitvoer op basis van invoerkenmerk
@app.post("/predict/")
async def predict(input_data: InputData):
  try:
    prediction = model.predict([[input_data.feature]])
    return {"prediction": prediction[0]}
  except Exception as ex:
    raise HTTPException(status_code=400, detail=str(ex))

# route_2 om te interacteren met MongoDB
@app.get("/items/")
async def get_item():
  items = []
  async for item in collection.find():
    items.append(item)
  return items

# route_3 om een nieuw item toe te voegen aan MongoDB
@app.post("/items/")
async def create_item(item: dict):
  new_item = await collection.insert_one(item)
  created_item = await collection.fine_one({"_id": new_item.inserted_id})
  return created_item

Hier is een overzicht van wat deze applicatie doet:

  • Lineaire Regressie Model van sklearn: Dit model voorspelt een uitvoer op basis van een enkele invoerkenmerk.
  • Invoergegevens vanuit Pydantic-model: Dit definieert de verwachte invoerstructuur voor de voorspellingsendpoint. In dit geval is het een float.
  • MongoDB-routeringen: De routeringen /items/ en POST /items/ geven u toegang om items op te halen en toe te voegen aan uw MongoDB-collectie.

Stap 6 – Voer FastAPI-toepassing uit

Om deze toepassing succesvol uit te voeren, moet u de in de toepassing gebruikte bibliotheken en pakketten installeren.

pip install pydantic scikit-learn numpy

Gebruik nu het volgende commando om deze toepassing uit te voeren:

uvicorn main:app --reload

Het resultaat van dit commando zal zijn:

Output
INFO: Will watch for changes in these directories: ['/path/to/your/project'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [XXXXX] using statreload INFO: Started server process [XXXXX] INFO: Waiting for application startup. INFO: Application startup complete.

FastAPI heeft automatisch een interactieve API-documentatie gegenereerd met Swagger UI. U kunt ertoegang krijgen door naar http://127.0.0.1:8000/docs te navigeren.

U kunt tools zoals curl of Postman gebruiken om de endpoint aan te roepen die een waarde voorspelt op basis van uw invoer.

curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'

Stap 7 [OPTIONEEL] – Voer toepassing uit met Docker Compose

U kunt uw toepassing containeriseren en ermee uitvoeren met behulp van docker-compose. Door uw toepassing te containeriseren, wordt het proces van implementatie geoptimaliseerd door middel van gemakkelijkere implementatie, schaalbaarheid en onderhoud. Om uw toepassing als een Dockerfile te definiëren, volg de gestelde stappen in Deploy FastAPI Application using Docker Compose.

Conclusie

In dit handleiding, heeft u geleerd hoe u een FastAPI-toepassing met MongoDB kunt succesvol instellen, een eenvoudige AI-gebaseerde app om opslag en terughalen van invoervoorspellingen mogelijk te maken.

De combinatie van FastAPI en een NoSQL-database biedt een krachtige en flexibele omgeving voor het bouwen en schalen van AI-gebaseerde toepassingen.

Source:
https://www.digitalocean.com/community/tutorials/set-up-fastapi-app-with-nosql-db