Implementieren Sie die REST-API-Endpunkte
Jetzt kommt der spannende Teil! Lassen Sie uns die REST-API-Endpunkte für unsere Bücher entwickeln! Wir fügen die Endpunktimplementierung in die Datei routes.py ein und laden die Routen in die Datei main.py. Wir beginnen mit der Initialisierung eines APIRouter-Objekts in routes.py:
pymongo-fastapi-crud/routes.py
Wie Sie sehen, importieren wir „APIRouter“ aus dem fastapi-Paket. Wir verwenden dieses Objekt, um die Endpunkte für unsere REST-API zu definieren. Wir importieren außerdem die Modelle „Book“ und „BookUpdate“, die wir zuvor definiert haben.
POST /book
Der erste Endpunkt, den wir implementieren werden, ist der Endpunkt POST /books zum Erstellen eines neuen Buches. Fügen Sie nach der Zeile router = APIRouter() Folgendes hinzu:
pymongo-fastapi-crud/routes.py
Die Route ist „/“, weil wir allen Endpunkten der Bücher „/books“ voranstellen werden. Die „response_description“ wird in der API-Dokumentation angezeigt. Der „status_code“ ist der HTTP-Statuscode, der ausgegeben wird, wenn die Anfrage erfolgreich ist. Wir verwenden das Book-Modell, um sowohl die im Anforderungstext übergebenen Daten als auch die von uns zurückgesendete Antwort zu validieren. FastAPI übernimmt die Validierung für uns. Im Hauptteil der Funktion verwenden wir die Methode „insert_one()“ von PyMongo, um das neue Buch zur Buch-Collection hinzuzufügen. Wir verwenden die Methode „find_one()“, um das neu erstellte Buch aus der Datenbank abzurufen. Mehr über die Methoden „insert_one()“ und „find_one()“ finden Sie im PyMongo-Dokumentationsartikel für Operationen auf Collection-Ebene.
Zum Schluss rufen wir das erstellte Buch ab.
GET /book
Als Nächstes implementieren wir den Endpunkt „GET /book“, um eine Liste mit allen Dokumenten in der Buch-Collection auszugeben. Fügen Sie Folgendes am Ende der routes.py-Datei hinzu:
pymongo-fastapi-crud/routes.py
Für das Antwortmodell verwenden wir den Typ List[Book]. Dies bedeutet, dass die Antwort eine Liste von „Book“-Objekten sein wird. Wir verwenden auch die Methode „find()“, um nicht mehr als 100 Bücher aus der Datenbank abzurufen. Um mehr über „limit“ und die anderen Parameter der find()-Methode zu erfahren, besuchen Sie die entsprechende PyMongo-Dokumentationsseite.
GET /book/{id}
Erstellen wir einen weiteren GET-Endpunkt, um ein einzelnes Buch anhand seiner ID abzurufen. Fügen Sie Folgendes am Ende der routes.py-Datei hinzu:
pymongo-fastapi-crud/routes.py
Hier verwenden wir die Methode „find_one()“, um ein einzelnes Buch aus der Datenbank abzurufen. Falls das Buch gefunden wird, geben wir es aus. Falls das Buch nicht gefunden wird, lösen wir eine „HTTPException“ mit dem Statuscode „404 Not Found“ und einer passenden Nachricht aus.
PUT /book/{id}
Der wohl wichtigste Endpunkt unserer REST-API ist der Endpunkt PUT /book/{id}. Dieser Endpunkt ermöglicht es uns, ein einzelnes Buch zu aktualisieren. Fügen Sie die Implementierung ans Ende der Datei routes.py hinzu:
pymongo-fastapi-crud/routes.py
Lassen Sie uns den Code durchgehen. Zuerst erstellen wir ein Objekt, das wir verwenden werden, um das Buch zu aktualisieren. Wenn das „Buch“-Objekt dann Felder enthält, verwenden wir die Methode „update_one()“, um das Buch in der Datenbank zu aktualisieren. Es ist wichtig zu beachten, dass wir den Update-Operator „$set“ verwenden, um sicherzustellen, dass nur die angegebenen Felder aktualisiert werden, anstatt das gesamte Dokument neu zu schreiben.
Anschließend überprüfen wir das Attribut „modified_count“ des „update_result“, um sicherzustellen, dass das Buch aktualisiert wurde. Wenn dies der Fall ist, verwenden wir die Methode „find_one()“, um das aktualisierte Buch aus der Datenbank abzurufen und auszugeben.
Wenn das Buchobjekt keine Felder enthält, geben wir einfach das vorhandene Buch aus. Wenn das Buch jedoch nicht gefunden wird, lösen wir eine „HTTPException“ mit dem Statuscode „404 Not Found“ aus.
DELETE /book/{id}
Der letzte Endpunkt, den wir implementieren werden, ist DELETE /book/{id} zum Löschen eines einzelnen Buches anhand seiner ID. Fügen Sie Folgendes am Ende der routes.py-Datei hinzu:
pymongo-fastapi-crud/routes.py
Das einzig Bemerkenswerte hier ist, dass wir, wenn das Buch gelöscht wurde, einen Statuscode „204 No Content“ ausgeben. Dies ist ein Erfolgsstatuscode, der anzeigt, dass die Anfrage erfolgreich war und es keinen Inhalt gibt, der im Antworttext gesendet werden muss.
Registrieren Sie die Endpunkte
Zum Schluss müssen wir noch die /book-Endpunkte registrieren. Öffnen Sie die Datei main.py, importieren Sie das Modul routes und registrieren Sie den Buchrouter. Die endgültige Version der Datei main.py sollte wie folgt aussehen:
pymongo-fastapi-crud/main.py