REST API kūrimas dažnai yra mechaninė užduotis, apimanti daug projektavimo ir pasukimo programavimo. Laimei, tokie įrankiai kaip FastAPI gali palengvinti daug varginančių detalių.
Naudodami FastAPI galite greitai sukurti veiksmingą, pilną REST API savo CRUD programai. Naudojant MongoDB kaip duomenų šaltinį, ši pamoka padės greitai nustatyti savo API.
Kas yra FastAPI?
FastAPI yra greita ir atviro kodo Python žiniatinklio sistema, skirta kurti API. Jis teikia integruotą asinchroninių užklausų palaikymą, automatinį duomenų patvirtinimą ir automatinį API galinių taškų dokumentavimą.
FastAPI pranašumai, palyginti su kitais Python karkasais
- „FastAPI“ yra palyginti greitesnis nei kitos sistemos, tokios kaip „Django“ ir „Flask“. Taip yra todėl, kad „FastAPI“ yra sukurtas ant asyncio – asinchroninės „Python“ įvesties / išvesties bibliotekos, kuri gali greičiau apdoroti vienalaikes užklausas.
- „FastAPI“ suteikia švarų ir paprastą būdą kurti API su minimaliomis pastangomis, nes tam reikia mažiau kodo nei „Flask“ ar „Django“.
- Galiausiai „FastAPI“ leidžia lengvai generuoti galutinių taškų dokumentus. Jis naudoja „Swagger“, kad sukurtų dokumentus, kuriuos galite naudoti galiniams taškams išbandyti vykdydami užklausas ir peržiūrėdami atsakymus.
Sukurkite MongoDB duomenų bazę
Norėdami pradėti, jums reikės nustatyti MongoDB duomenų bazę vietoje. Arba galite pasirinkti paprastesnį variantą MongoDB klasterio nustatymas debesyje.
Tada, naudodami įdiegtą MongoDB grafinės vartotojo sąsajos įrankį Compass, sukurkite duomenų bazės ryšį. Spustelėkite Naujas ryšys mygtuką ir pateikite ryšio URI, kad užmegztumėte ryšį su vietiniu „MongoDB“ serveriu.
Galiausiai sukurkite naują duomenų bazę ir kolekciją, kurioje bus saugomi bandomojo API duomenys.
Nustatykite FastAPI serverį
Naudodami terminalą sukurkite projekto aplanką ir įveskite tą naują katalogą.
Šio projekto kodą galite rasti jame GitHub saugykla.
Tada patikrinkite, ar naudojate „Python“ 3.6 ar naujesnę versiją. Jei ne, įdiekite naujausią Python versija.
python -- versija
Po to įdiekite „Virtualenv“, kad sukurtumėte izoliuotą virtualią kūrimo aplinką. Tai labai rekomenduojama, nes tai leidžia išvengti konfliktų, ypač jei skirtingiems projektams naudojate skirtingas paketų versijas.
pip įdiegti virtualenv
Tada dabartiniame kataloge sukurkite virtualią aplinką, vadinamą „venv“:
virtualenv venv
Galiausiai suaktyvinkite virtualią aplinką.
# „Unix“ arba „MacOS“:
šaltinis venv/bin/activate
# Sistemoje Windows:
.\venv\Scripts\activate
Sukonfigūravę virtualią aplinką, įdiekite FastAPI, PyMongo ir Uvicorn paketus.
pip įdiegti fastapi pymongo uvicorn
PyMongo yra Python pagrindu sukurta biblioteka, skirta darbui su MongoDB duomenų baze. Tai suteikia API, palaikančią visas MongoDB funkcijas ir leidžiančią sąveikauti su MongoDB, nereikia rašyti neapdorotų MongoDB užklausų.
Kita vertus, Uvicorn yra asinchroninis žiniatinklio serveris, pagrįstas Python asyncio moduliu. Pagrindinė jo funkcija yra greitas „FastAPI“ serverių įkėlimas kelyje. Uvicorn naudojimas yra panašus į darbas su Nodemon.
Sukurkite FastAPI serverį
Galiausiai sukurkite paprastą „FastAPI“ serverį, kuris išklauso užklausas iš namų maršruto. Projekto aplanko šakniniame kataloge sukurkite server.py failą ir pridėkite toliau esantį kodą.
iš fastapi importuoti FastAPI
programa = FastAPI ()
@app.get("/")
asyncdefnamai():
grąžinti {"žinutė": "Labas pasauli"}
Galiausiai paleiskite toliau pateiktą komandą, kad suaktyvintumėte kūrimo serverį. Uvicorn pateiks jūsų programą per 8000 prievadą.
uvicon serveris: app --reload
Eikite į priekį ir peržiūrėkite serverio atsakymą savo naršyklėje adresu http://localhost: 8000.
Sukurkite REST API naudodami CRUD operacijas
Dabar sukurkite REST API, kuri įgyvendina CRUD metodus (kurti, skaityti, atnaujinti ir ištrinti). Projekto aplanko šakniniame kataloge sukurkite keturis aplankus: konfigūraciją, modelius, maršrutus ir schemas.
├── konfigūracija
├── modeliai
├── maršrutai
├── schemos
└── server.py
1. Sukonfigūruokite duomenų bazės ryšį
Konfigūracijos kataloge sukurkite naują failą db.py ir toliau pridėkite kodą.
iš pimongas importuoti MongoClient
db_connection = MongoClient("mongodb://localhost: 27017")
db = db_ryšis.duomenų bazės_pavadinimas
kolekcija = db["kolekcijos_pavadinimas"]
- Naudokite MongoClient() metodą, kad sukurtumėte ryšį su MongoDB duomenų baze. Jis naudoja ryšio URI eilutę kaip argumentą, nurodantį MongoDB serverio pagrindinį kompiuterį ir prievadą.
- Du kintamieji nurodo, kurią duomenų bazę ir rinkinį jūsų MongoDB serveryje serveris turi pasiekti.
2. Apibrėžkite duomenų modelį
Šis modelis nustatys duomenų bazėje esančių duomenų struktūrą, įskaitant laukus ir duomenų tipus.
Modelio kataloge sukurkite naują failą user_model.py ir toliau pridėkite kodą.
iš pydantiškas importuoti Bazinis modelis
klasėVartotojas(Pagrindinis modelis):
vardas: g
vaidmuo: str
- Aukščiau pateiktas kodas sukuria klasę pavadinimu „User“, kuri yra „Pydantic“ bibliotekos „BaseModel“ klasės poklasis. Vartotojo klasėje yra du laukai, pavadinimas ir vaidmuo, kurių duomenų tipai nustatyti į eilutes.
- Duomenų modeliams kurti galite naudoti Pydantic biblioteką su FastAPI. Taip pat galite jį naudoti duomenims patvirtinti, serijiniu būdu (JSON į Python) ir serializavimui (Python į JSON).
3. Apibrėžkite duomenų schemą
Iš sukurto duomenų modelio galite apibrėžti savo duomenų schemą. Schemų kataloge sukurkite naują failą: user_schema.py ir toliau pridėkite kodą.
defuser_serializer(Vartotojas) -> diktuoti:
grąžinti {
'id':str (vartotojas["_id"]),
'vardas':Vartotojas["vardas"],
"vaidmuo":Vartotojas["vaidmuo"]
}
defuser_serializer(naudotojai) -> sąrašas:
grąžinti [user_serializer (naudotojas) dėl Vartotojas in vartotojai]
4. Apibrėžkite API maršrutus
Galiausiai apibrėžkite skirtingų CRUD operacijų maršrutus.
Maršrutų kataloge sukurkite naują failą: user_routes.py ir toliau pridėkite kodą.
Pridėkite duomenis naudodami paskelbimo metodą
Norėdami pridėti duomenų, sukurkite pašto maršrutą.
iš fastapi importuoti APIRouter
iš modeliai.vartotojo_modelis importuoti Vartotojas
iš schemas.user_schema importuoti user_serializer
iš bson importuoti Objekto ID
iš config.db importuoti kolekcijavartotojas = APIRouter()
@user.post("/")
asyncdefsukurti_vartotojas(vartotojas: vartotojas):
_id = collection.insert_one (diktas (vartotojas))
user = users_serializer (collection.find({"_id": _id.inserted_id}))
grąžinti {"statusas": "Gerai","duomenys": Vartotojas}
- FastAPI suteikia APIRouter() metodą, kuris apibrėžia maršrutizatoriaus objektą, kuris suteikia sąsają API užklausoms teikti serveriui.
- Nurodykite paskelbimo maršrutą, kuris sukuria naują vartotojo objektą duomenų bazėje, įterpdamas duomenis į rinkinį po to, kai jį suskirstysite. Tada išsaugokite ir perduokite įterptąjį_id, kad rinkinyje rastumėte susietus duomenis, ir galiausiai grąžinkite būseną „Gerai“ su duomenimis atsakyme, jei paskelbimo užklausa bus sėkminga.
- Įterpimo_vienas ir paieškos metodus apibrėžia PyMongo klientas.
Dabar pridėkite toliau pateiktą kodą prie serverio.py, kad inicijuotumėte maršrutus.
iš routes.user_routes importuoti Vartotojas
app.include_router (vartotojas)
Eikite į priekį ir išbandykite paskelbimo maršrutą savo naršyklėje naudodami „FastAPI“ teikiamą „Swagger UI API“ įrankį.
Skaitykite duomenis naudodami gavimo metodą
Apibrėžę pašto maršrutą ir inicijuodami maršrutus, nustatykite likusius kitus maršrutus.
@user.get("/")
asyncdefrasti_visi_naudotojai():
vartotojai = vartotojai_serializer (collection.find())
grąžinti {"statusas": "Gerai","duomenys": vartotojai}
@user.get("/{id}")
asyncdefget_one_user(id: str):
user = users_serializer (collection.find({"_id": ObjectId (id)}))
grąžinti {"statusas": "Gerai","duomenys": Vartotojas}
Apibrėžkite du gavimo maršrutus, kurie nuskaito visus kolekcijos duomenis ir nuskaito konkrečius duomenis iš rinkinio pagal ID.
Atnaujinkite duomenis naudodami pirkimo metodą
Sukurkite pirkimo maršrutą, kad atnaujintumėte saugomus duomenis duomenų bazėje.
@user.put("/{id}")
asyncdefupdate_user(id: str, naudotojas: naudotojas):
collection.find_one_and_update(
{
"_id": ObjectId (id)
},
{
„$set“: diktuoti (vartotojas)
})
user = users_serializer (collection.find({"_id": ObjectId (id)}))
grąžinti {"statusas": "Gerai","duomenys": Vartotojas}
Įdėjimo metodas naudoja ID, kad surastų konkrečius duomenis rinkinyje, ir atnaujina dokumento laukų vertę naujais duomenimis, perduotais iš API. Tada galite ieškoti atnaujintų duomenų pagal ID ir grąžinti juos API atsakyme.
Ištrinkite duomenis naudodami ištrynimo metodą
Sukurkite ištrynimo maršrutą, kad ištrintumėte saugomus duomenis duomenų bazėje.
@user.delete("/{id}")
asyncdefdelete_user(id: str):
collection.find_one_and_delete({"_id": ObjectId (id)})
vartotojai = vartotojai_serializer (collection.find())
grąžinti {"statusas": "Gerai","duomenys": []}
Ištrynimo maršrutas paima konkretaus dokumento, kurį norite ištrinti iš kolekcijos, ID.
Sukurkite REST API naudodami FastAPI
„FastAPI“ yra puikus būdas patogiai kurti „Python“ žiniatinklio API. Dėl integruotų duomenų bazių integravimo ir automatinio API gamybos įrankių šis procesas yra paprastas.
Jūs netgi galite žengti žingsnį toliau ir kurti visavertes programas. Pabandykite integruoti priekinį klientą naudodami tokias populiarias technologijas kaip „React“, „Angular“ ar „Vue“.