Gradnja API-ja REST je pogosto mehanska naloga, ki vključuje veliko načrtovanja in programiranja na pamet. Na srečo lahko orodja, kot je FastAPI, razbremenijo veliko dolgočasnih podrobnosti.
Z uporabo FastAPI lahko hitro zgradite učinkovit, popoln REST API za svojo aplikacijo CRUD. Z MongoDB kot virom podatkov vas bo ta vadnica vodila do nastavitve lastnega API-ja v hipu.
Kaj je FastAPI?
FastAPI je hitro in odprtokodno spletno ogrodje Python za gradnjo API-jev. Zagotavlja vgrajeno podporo za asinhrone zahteve, samodejno preverjanje veljavnosti podatkov in samodejno dokumentiranje končnih točk API-ja.
Prednosti FastAPI pred drugimi ogrodji Python
- FastAPI je razmeroma hitrejši od drugih ogrodij, kot sta Django in Flask. To je zato, ker FastAPI gradi na vrhu asyncio, asinhrone V/I knjižnice za Python, ki lahko hitreje obdela sočasne zahteve.
- FastAPI zagotavlja čist in preprost način za izdelavo API-jev z minimalnim naporom, saj zahteva manj kode kot Flask ali Django.
- Končno FastAPI olajša ustvarjanje dokumentacije za končne točke. Uporablja Swagger za izdelavo dokumentacije, ki jo lahko uporabite za testiranje končnih točk z izvajanjem zahtev in ogledom odgovorov.
Nastavite bazo podatkov MongoDB
Za začetek boste morali lokalno nastavite bazo podatkov MongoDB. Lahko pa se odločite za lažjo možnost nastavitev gruče MongoDB v oblaku.
Nato z nameščenim orodjem za grafični uporabniški vmesnik MongoDB Compass ustvarite povezavo z bazo podatkov. Kliknite na Nova povezava in navedite URI povezave za vzpostavitev povezave s strežnikom MongoDB, ki deluje lokalno.
Nazadnje ustvarite novo bazo podatkov in zbirko za shranjevanje vaših testnih podatkov API-ja.
Nastavite strežnik FastAPI
S terminalom ustvarite mapo projekta in vnesite ta novi imenik.
Kodo tega projekta najdete v Repozitorij GitHub.
Nato preverite, ali uporabljate Python različice 3.6+. Če ne, namestite najnovejšo Python različica.
python --različica
Nato namestite Virtualenv, da ustvarite izolirano virtualno razvojno okolje. To je zelo priporočljivo, ker vam omogoča, da se izognete konfliktom, zlasti če uporabljate različne različice paketov za različne projekte.
pip namestite virtualenv
Nato ustvarite navidezno okolje z imenom "venv" v vašem trenutnem imeniku:
virtualenv venv
Nazadnje aktivirajte virtualno okolje.
# V sistemu Unix ali MacOS:
vir venv/bin/activate
# V sistemu Windows:
.\venv\Skripti\aktivirati
Ko konfigurirate virtualno okolje, namestite pakete FastAPI, PyMongo in Uvicorn.
pip namestite fastapi pymongo uvicorn
PyMongo je knjižnica, ki temelji na Pythonu za delo z bazo podatkov MongoDB. Ponuja API, ki podpira vse funkcije MongoDB in vam omogoča interakcijo z MongoDB, ne da bi morali pisati neobdelane poizvedbe MongoDB.
Uvicorn pa je asinhroni spletni strežnik, ki temelji na Python asyncio modulu. Njegova glavna značilnost je vroče ponovno nalaganje vaših strežnikov FastAPI na poti. Uporaba Uvicorn je podobna delo z Nodemonom.
Ustvarite strežnik FastAPI
Končno ustvarite preprost strežnik FastAPI, ki posluša zahteve, ki prihajajo z domače poti. V korenskem imeniku mape vašega projekta ustvarite datoteko server.py in dodajte spodnjo kodo.
od fastapi uvoz FastAPI
app = FastAPI()
@app.get("/")
asinhdefdomov():
vrnitev {"sporočilo": "Pozdravljen, svet"}
Na koncu zaženite spodnji ukaz, da zavrtite razvojni strežnik. Uvicorn bo vašo aplikacijo stregel na vratih 8000.
strežnik uvicon: app --reload
Oglejte si odziv strežnika v brskalniku na http://localhost: 8000.
Ustvarite REST API z operacijami CRUD
Sedaj zgradite REST API, ki izvaja metode CRUD (ustvarjanje, branje, posodabljanje in brisanje). V korenskem imeniku mape vašega projekta ustvarite štiri mape: config, modeli, routes in schemas.
├── konf
├── modeli
├── poti
├── sheme
└── server.py
1. Konfigurirajte povezavo z bazo podatkov
V konfiguracijskem imeniku ustvarite novo datoteko db.py in dodajte spodnjo kodo.
od pymongo uvoz MongoClient
db_connection = MongoClient("mongodb://localhost: 27017")
db = db_connection.database_name
zbirka = db["ime_zbirke"]
- Uporabite metodo MongoClient(), da ustvarite povezavo z bazo podatkov MongoDB. Kot argument vzame niz URI povezave, ki določa gostitelja in vrata strežnika MongoDB.
- Dve spremenljivki določata, do katere baze podatkov in zbirke v vašem strežniku MongoDB naj strežnik dostopa.
2. Definirajte podatkovni model
Ta model bo definiral strukturo vaših podatkov v bazi podatkov, vključno s polji in vrstami podatkov.
V imeniku modela ustvarite novo datoteko user_model.py in dodajte spodnjo kodo.
od pidantičen uvoz BaseModel
razredUporabnik(Osnovni model):
ime: str
vloga: str
- Zgornja koda ustvari razred z imenom Uporabnik, ki je podrazred razreda BaseModel iz knjižnice Pydantic. Uporabniški razred ima dve polji, ime in vlogo, katerih tipi podatkov so nastavljeni na nize.
- Za ustvarjanje podatkovnih modelov lahko uporabite knjižnico Pydantic s FastAPI. Uporabite ga lahko tudi za preverjanje podatkov, njihovo serializacijo (JSON v Python) in de-serializacijo (Python v JSON).
3. Definirajte podatkovno shemo
Iz ustvarjenega podatkovnega modela lahko definirate shemo za svoje podatke. V imeniku shem ustvarite novo datoteko: user_schema.py in dodajte spodnjo kodo.
defuser_serializator(uporabnik) -> dikt:
vrnitev {
'id':str (uporabnik["_id"]),
'ime':uporabnik["ime"],
'vloga':uporabnik["vloga"]
}
defuporabniki_serializator(uporabniki) -> seznam:
vrnitev [user_serializer (uporabnik) za uporabnik v uporabniki]
4. Določite poti API-ja
Na koncu definirajte poti za različne operacije CRUD.
V imeniku poti ustvarite novo datoteko: user_routes.py in dodajte spodnjo kodo.
Dodajte podatke z metodo objave
Ustvarite pot objave, da dodate podatke.
od fastapi uvoz APIRouter
od modeli.uporabniški_model uvoz Uporabnik
od schemas.user_schema uvoz uporabniki_serializator
od bson uvoz ObjectId
od config.db uvoz zbirkauporabnik = APIRouter()
@user.post("/")
asinhdefcreate_user(uporabnik: uporabnik):
_id = collection.insert_one (dict (uporabnik))
uporabnik = uporabnik_serializator (zbirka.find({"_id": _id.inserted_id}))
vrnitev {"stanje": "V redu","podatki": uporabnik}
- FastAPI ponuja metodo APIRouter(), ki definira objekt usmerjevalnika, ki nudi vmesnik za pošiljanje zahtev API strežniku.
- Podajte objavno pot, ki ustvari nov uporabniški objekt v zbirki podatkov tako, da vstavi podatke v zbirko po serializaciji. Nato shranite in posredujte inserted_id, da poiščete pridružene podatke v zbirki, in končno vrnite status »V redu« s podatki v odgovoru, če je zahteva za objavo uspešna.
- Metodi insert_one in find definira odjemalec PyMongo.
Zdaj dodajte spodnjo kodo v server.py, da inicializirate poti.
od routes.user_routes uvoz uporabnik
app.include_router (uporabnik)
Preizkusite pot objave v brskalniku z orodjem Swagger UI API, ki ga ponuja FastAPI.
Preberite podatke z metodo Get
Po definiranju post poti in inicializaciji poti definirajte preostale druge poti.
@user.get("/")
asinhdefnajdi_vse_uporabnike():
uporabniki = uporabniki_serializator (zbirka.find())
vrnitev {"stanje": "V redu","podatki": uporabniki}
@user.get("/{id}")
asinhdefget_one_user(id: str):
uporabnik = uporabnik_serializator (zbirka.find({"_id": ObjectId (id)}))
vrnitev {"stanje": "V redu","podatki": uporabnik}
Definirajte dve poti pridobivanja, ki pridobita vse podatke v zbirki in pridobita specifične podatke iz zbirke na podlagi ID-ja.
Posodobite podatke z metodo Put
Ustvarite put pot za posodobitev shranjenih podatkov v bazi podatkov.
@user.put("/{id}")
asinhdefupdate_user(id: str, uporabnik: uporabnik):
zbirka.find_one_and_update(
{
"_id": ObjectId (id)
},
{
"$set": dict (uporabnik)
})
uporabnik = uporabnik_serializator (zbirka.find({"_id": ObjectId (id)}))
vrnitev {"stanje": "V redu","podatki": uporabnik}
Metoda put uporablja ID za iskanje določenih podatkov v zbirki in posodobi vrednost polj v dokumentu z novimi podatki, posredovanimi iz API-ja. Posodobljene podatke lahko nato poiščete po ID-ju in jih vrnete v odgovoru API-ja.
Brisanje podatkov z metodo brisanja
Ustvarite brisanje poti za brisanje shranjenih podatkov v bazi podatkov.
@user.delete("/{id}")
asinhdefdelete_user(id: str):
collection.find_one_and_delete({"_id": ObjectId (id)})
uporabniki = uporabniki_serializator (zbirka.find())
vrnitev {"stanje": "V redu","podatki": []}
Pot brisanja vključuje ID določenega dokumenta, ki ga želite izbrisati iz zbirke.
Ustvarite API-je REST s FastAPI
FastAPI ponuja odličen način za priročno gradnjo zalednih spletnih API-jev Python. Njegova vgrajena orodja za integracijo baze podatkov in samodejno izdelavo API-ja naredijo postopek preprost.
To lahko storite še korak dlje in ustvarite polnopravne aplikacije. Poskusite integrirati sprednjega odjemalca z uporabo priljubljenih tehnologij, kot so React, Angular ali Vue.