Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Izrada REST API-ja često je mehanički zadatak, koji uključuje puno osnovnog dizajna i programiranja napamet. Srećom, alati kao što je FastAPI mogu se osloboditi mnogih zamornih detalja.

Koristeći FastAPI, možete brzo izgraditi učinkovit, potpun REST API za svoju CRUD aplikaciju. Uz MongoDB kao izvor podataka, ovaj vodič će vas voditi prema postavljanju vašeg vlastitog API-ja u tren oka.

Što je FastAPI?

FastAPI je brz Python web okvir otvorenog koda za izgradnju API-ja. Pruža ugrađenu podršku za asinkrone zahtjeve, automatsku provjeru valjanosti podataka i automatsku dokumentaciju API krajnjih točaka.

Prednosti FastAPI-ja u odnosu na druge Python okvire

  • FastAPI je relativno brži od drugih okvira kao što su Django i Flask. To je zato što se FastAPI nadograđuje na asyncio, asinkronu I/O biblioteku za Python koja može brže obraditi istodobne zahtjeve.
  • FastAPI pruža čist i jednostavan način za izradu API-ja uz minimalan napor budući da zahtijeva manje koda od Flaska ili Djanga.
    instagram viewer
  • Konačno, FastAPI olakšava generiranje dokumentacije za krajnje točke. Koristi Swagger za izradu dokumentacije koju možete koristiti za testiranje krajnjih točaka pokretanjem zahtjeva i pregledavanjem odgovora.

Postavite MongoDB bazu podataka

Da biste započeli, morat ćete postaviti MongoDB bazu podataka lokalno. Alternativno, možete se odlučiti za lakšu opciju postavljanje MongoDB klastera u oblaku.

Zatim, pomoću instaliranog MongoDB alata za grafičko korisničko sučelje, Compass, stvorite vezu s bazom podataka. Kliknite na Nova veza gumb i navedite URI veze za uspostavljanje veze s MongoDB poslužiteljem koji radi lokalno.

Konačno, stvorite novu bazu podataka i zbirku za držanje vaših testnih API podataka.

Postavite FastAPI poslužitelj

Pomoću terminala stvorite mapu projekta i unesite taj novi direktorij.

Kôd ovog projekta možete pronaći u GitHub spremište.

Zatim provjerite koristite li Python verziju 3.6+. Ako ne, instalirajte najnoviju Piton verzija.

python --verzija

Nakon toga instalirajte Virtualenv da biste stvorili izolirano virtualno razvojno okruženje. To se toplo preporučuje jer vam omogućuje izbjegavanje sukoba, osobito ako koristite različite verzije paketa za različite projekte.

pip instaliraj virtualenv

Zatim stvorite virtualno okruženje pod nazivom "venv" unutar vašeg trenutnog direktorija:

virtualenv venv

Na kraju, aktivirajte virtualno okruženje.

# Na Unixu ili MacOS-u: 
izvor venv/bin/aktivirati

# U sustavu Windows:
 .\venv\Skripte\aktivirati

Nakon što ste konfigurirali virtualno okruženje, instalirajte pakete FastAPI, PyMongo i Uvicorn.

pip instaliraj fastapi pymongo uvicorn

PyMongo je biblioteka temeljena na Pythonu za rad s MongoDB bazom podataka. Pruža API koji podržava sve značajke MongoDB-a i omogućuje vam interakciju s MongoDB-om bez potrebe za pisanjem sirovih MongoDB upita.

Uvicorn je, s druge strane, asinkroni web poslužitelj temeljen na Python asyncio modulu. Njegova glavna značajka je vruće ponovno učitavanje vaših FastAPI poslužitelja u pokretu. Korištenje Uvicorna slično je rad s Nodemonom.

Stvorite FastAPI poslužitelj

Konačno, stvorite jednostavan FastAPI poslužitelj koji osluškuje zahtjeve koji dolaze s početne rute. U korijenskom direktoriju mape vašeg projekta stvorite datoteku server.py i dodajte kod u nastavku.

iz brzi uvoz FastAPI
aplikacija = FastAPI()

@app.get("/")
asinkronidefDom():
povratak {"poruka": "Pozdrav svijete"}

Na kraju, pokrenite donju naredbu da pokrenete razvojni poslužitelj. Uvicorn će poslužiti vašu aplikaciju na portu 8000.

uvicon poslužitelj: aplikacija --reload

Samo naprijed i pogledajte odgovor poslužitelja u svom pregledniku na http://localhost: 8000.

Stvorite REST API s CRUD operacijama

Sada izgradite REST API koji implementira CRUD metode (stvaranje, čitanje, ažuriranje i brisanje). U korijenskom direktoriju mape vašeg projekta stvorite četiri mape: config, modeli, routes i schemas.

├── konfiguracija
├── modeli
├── rute
├── sheme
└── server.py

1. Konfigurirajte vezu s bazom podataka

U konfiguracijskom direktoriju stvorite novu datoteku, db.py, i dodajte kod ispod.

iz pimongo uvoz MongoClient
db_connection = MongoClient("mongodb://localhost: 27017")
db = db_connection.database_name
zbirka = db["naziv_zbirke"]
  • Koristite metodu MongoClient() za stvaranje veze s MongoDB bazom podataka. Uzima niz URI veze kao argument koji specificira host i port MongoDB poslužitelja.
  • Dvije varijable određuju kojoj bazi podataka i kolekciji na vašem MongoDB poslužitelju poslužitelj treba pristupiti.

2. Definirajte podatkovni model

Ovaj model će definirati strukturu vaših podataka u bazi podataka uključujući polja i vrste podataka.

U direktoriju modela stvorite novu datoteku, user_model.py, i dodajte kod u nastavku.

iz pidantičan uvoz Osnovni model 

razredaKorisnik(Osnovni model):
naziv: str
uloga: str

  • Gornji kod stvara klasu pod nazivom Korisnik, koja je podklasa klase BaseModel iz biblioteke Pydantic. Klasa korisnika ima dva polja, ime i ulogu sa svojim tipovima podataka postavljenim na nizove.
  • Možete koristiti biblioteku Pydantic s FastAPI-jem za izradu modela podataka. Možete ga koristiti i za provjeru valjanosti podataka, njihovu serijalizaciju (JSON u Python) i deserijalizaciju (Python u JSON).

3. Definirajte podatkovnu shemu

Iz stvorenog podatkovnog modela možete definirati shemu za svoje podatke. U direktoriju shema stvorite novu datoteku: user_schema.py i dodajte kod u nastavku.

defkorisnički_serializator(korisnik) -> dict:
povratak {
'iskaznica':str (korisnik["_iskaznica"]),
'Ime':korisnik["Ime"],
'uloga':korisnik["uloga"]
}

defkorisnici_serializator(korisnici) -> popis:
povratak [user_serializator (korisnik) za korisnik u korisnici]

4. Definirajte API rute

Konačno, definirajte rute za različite CRUD operacije.

U direktoriju ruta stvorite novu datoteku: user_routes.py i dodajte kod u nastavku.

Dodavanje podataka metodom objave

Stvorite rutu objave za dodavanje podataka.

iz brzi uvoz APIRouter
iz modeli.korisnički_model uvoz Korisnik
iz sheme.korisnička_shema uvoz korisnici_serializator
iz bson uvoz ObjectId
iz config.db uvoz kolekcija

korisnik = APIRouter()

@user.post("/")
asinkronidefstvoriti_korisnika(korisnik: Korisnik):
_id = collection.insert_one (dict (korisnik))
korisnik = korisnici_serializator (zbirka.find({"_iskaznica": _id.inserted_id}))
povratak {"status": "U redu","podaci": korisnik}

  • FastAPI pruža metodu APIRouter() koja definira objekt usmjerivača koji pruža sučelje za upućivanje API zahtjeva poslužitelju.
  • Odredite post rutu koja stvara novi korisnički objekt u bazi podataka umetanjem podataka u zbirku nakon njihove serijalizacije. Zatim pohranite i proslijedite inserted_id da biste pronašli pridružene podatke u zbirci i na kraju vratite status "U redu" s podacima u odgovoru, ako je zahtjev za objavu uspješan.
  • Metode insert_one i find definirane su od strane PyMongo klijenta.

Sada dodajte kod u nastavku u server.py da inicijalizirate rute.

iz rute.korisničke_rute uvoz korisnik
app.include_router (korisnik)

Samo naprijed i testirajte rutu objavljivanja u svom pregledniku pomoću Swagger UI API alata koji pruža FastAPI.

Čitajte podatke metodom Get

Nakon definiranja post rute i pokretanja ruta, definirajte ostale rute.

@user.get("/")
asinkronidefpronaći_sve_korisnike():
korisnici = korisnici_serializator (zbirka.find())
povratak {"status": "U redu","podaci": korisnici}

@user.get("/{id}")
asinkronidefdobiti_jednog_korisnika(id: str):
korisnik = korisnici_serializator (zbirka.find({"_iskaznica": ID objekta (id)}))
povratak {"status": "U redu","podaci": korisnik}

Definirajte dvije rute dobivanja koje dohvaćaju sve podatke u zbirci i dohvaćaju određene podatke iz zbirke na temelju ID-a.

Ažurirajte podatke metodom Put

Stvorite putanju za ažuriranje pohranjenih podataka u bazi podataka.

@user.put("/{id}")
asinkronidefupdate_user(id: str, korisnik: korisnik):
collection.find_one_and_update(
{
"_iskaznica": ID objekta (ID)
},
{
"$set": dict (korisnik)
})
korisnik = korisnici_serializator (zbirka.find({"_iskaznica": ID objekta (id)}))
povratak {"status": "U redu","podaci": korisnik}

Metoda put koristi ID za pronalaženje određenih podataka u zbirci i ažurira vrijednost polja u dokumentu novim podacima proslijeđenim iz API-ja. Zatim možete tražiti ažurirane podatke prema ID-u i vratiti ih u API odgovoru.

Izbrišite podatke pomoću metode brisanja

Stvorite rutu brisanja za brisanje pohranjenih podataka u bazi podataka.

@user.delete("/{id}")
asinkronidefizbrisati_korisnika(id: str):
collection.find_one_and_delete({"_iskaznica": ID objekta (id)})
korisnici = korisnici_serializator (zbirka.find())
povratak {"status": "U redu","podaci": []}

Ruta brisanja uzima ID određenog dokumenta koji želite izbrisati iz zbirke.

Stvorite REST API-je s FastAPI-jem

FastAPI pruža izvrstan način prikladne izgradnje pozadinskih Python web API-ja. Njegovi ugrađeni alati za integraciju baze podataka i automatsku proizvodnju API-ja čine proces jednostavnim.

Možete čak i napraviti korak dalje i izraditi potpuno razvijene aplikacije. Pokušajte integrirati front-end klijent koristeći popularne tehnologije kao što su React, Angular ili Vue.