REST API: n rakentaminen on usein mekaaninen tehtävä, joka sisältää paljon kattilasuunnittelua ja ohjelmointia. Onneksi FastAPI: n kaltaiset työkalut voivat vapauttaa paljon tylsiä yksityiskohtia.
FastAPI: n avulla voit nopeasti rakentaa tehokkaan, täydellisen REST API: n CRUD-sovelluksellesi. Kun MongoDB on tietolähde, tämä opetusohjelma opastaa sinua määrittämään oma API nopeasti.
Mikä on FastAPI?
FastAPI on nopea ja avoimen lähdekoodin Python-verkkokehys API: iden rakentamiseen. Se tarjoaa sisäänrakennetun tuen asynkronisille pyynnöille, tietojen automaattiselle validoinnille ja API-päätepisteiden automaattiselle dokumentoinnille.
FastAPI: n edut muihin Python-kehyksiin verrattuna
- FastAPI on suhteellisen nopeampi kuin muut puitteet, kuten Django ja Flask. Tämä johtuu siitä, että FastAPI rakentuu asyncion päälle, Pythonin asynkroniselle I/O-kirjastolle, joka pystyy käsittelemään samanaikaisia pyyntöjä nopeammin.
- FastAPI tarjoaa puhtaan ja yksinkertaisen tavan rakentaa API: t vähällä vaivalla, koska se vaatii vähemmän koodia kuin Flask tai Django.
- Lopuksi FastAPI tekee dokumentaation luomisesta helppoa päätepisteille. Se käyttää Swaggeria dokumentaation tuottamiseen, jonka avulla voit testata päätepisteitä suorittamalla pyyntöjä ja tarkastelemalla vastauksia.
Luo MongoDB-tietokanta
Päästäksesi alkuun, sinun on tehtävä määritä MongoDB-tietokanta paikallisesti. Vaihtoehtoisesti voit valita helpomman vaihtoehdon MongoDB-klusterin perustaminen pilveen.
Luo seuraavaksi tietokantayhteys asennetun MongoDB: n graafisen käyttöliittymätyökalun Compassin avulla. Klikkaa Uusi yhteys -painiketta ja anna yhteyden URI muodostaaksesi yhteyden paikallisesti toimivaan MongoDB-palvelimeen.
Luo lopuksi uusi tietokanta ja kokoelma testi-API-tietojen säilyttämistä varten.
Määritä FastAPI-palvelin
Luo projektikansio päätelaitteen avulla ja kirjoita uusi hakemisto.
Löydät tämän projektin koodin siitä GitHub-arkisto.
Tarkista seuraavaksi, että käytössäsi on Python-versio 3.6+. Jos ei, asenna uusin Python versio.
python -- versio
Asenna sitten Virtualenv luodaksesi eristetty virtuaalinen kehitysympäristö. Tämä on erittäin suositeltavaa, koska sen avulla voit välttää ristiriidat, varsinkin jos käytät eri versioita paketeista eri projekteihin.
pip install virtualenv
Luo seuraavaksi virtuaalinen ympäristö nimeltä "venv" nykyiseen hakemistoosi:
virtualenv venv
Aktivoi lopuksi virtuaaliympäristö.
# Unix tai MacOS:
lähde venv/bin/activate
# Windowsissa:
.\venv\Scripts\activate
Kun olet määrittänyt virtuaaliympäristön, asenna FastAPI-, PyMongo- ja Uvicorn-paketit.
pip asennus fastapi pymongo uvicorn
PyMongo on Python-pohjainen kirjasto MongoDB-tietokannan kanssa työskentelemiseen. Se tarjoaa sovellusliittymän, joka tukee kaikkia MongoDB: n ominaisuuksia ja antaa sinun olla vuorovaikutuksessa MongoDB: n kanssa ilman, että sinun tarvitsee kirjoittaa raakaa MongoDB-kyselyä.
Uvicorn puolestaan on asynkroninen verkkopalvelin, joka perustuu Python-asyncio-moduuliin. Sen pääominaisuus on FastAPI-palvelimiesi nopea lataaminen liikkeellä ollessasi. Uvicornin käyttö on samanlaista kuin työskennellä Nodemonin kanssa.
Luo FastAPI-palvelin
Luo lopuksi yksinkertainen FastAPI-palvelin, joka kuuntelee kotireitiltä tulevia pyyntöjä. Luo projektikansiosi juurihakemistoon server.py-tiedosto ja lisää alla oleva koodi.
alkaen fastapi tuonti FastAPI
sovellus = FastAPI()
@app.get("/")
asynkdefKoti():
palata {"viesti": "Hei maailma"}
Suorita lopuksi alla oleva komento käynnistääksesi kehityspalvelimen. Uvicorn palvelee hakemustasi portissa 8000.
uvicon-palvelin: app --reload
Siirry eteenpäin ja katso palvelimen vastaus selaimessasi osoitteessa http://localhost: 8000.
Luo REST-sovellusliittymä CRUD-toimintojen avulla
Rakenna nyt REST API, joka toteuttaa CRUD-menetelmät (luo, lue, päivitä ja poista). Luo projektikansiosi juurihakemistoon neljä kansiota: config, mallit, reitit ja skeemat.
├── konfigurointi
├── mallit
├── reittejä
├── skeemoja
└── server.py
1. Määritä tietokantayhteys
Luo config-hakemistoon uusi tiedosto db.py ja lisää alla oleva koodi.
alkaen pymongo tuonti MongoClient
db_connection = MongoClient("mongodb://localhost: 27017")
db = db_yhteys.tietokannan_nimi
kokoelma = db["kokoelman_nimi"]
- Käytä MongoClient()-menetelmää yhteyden luomiseen MongoDB-tietokantaan. Se ottaa yhteyden URI-merkkijonon argumenttina, joka määrittää MongoDB-palvelimen isännän ja portin.
- Nämä kaksi muuttujaa määrittävät, mitä MongoDB-palvelimesi tietokantaa ja kokoelmaa palvelimen tulee käyttää.
2. Määritä tietomalli
Tämä malli määrittää tietokannassa olevien tietojesi rakenteen, mukaan lukien kentät ja tietotyypit.
Luo mallihakemistoon uusi tiedosto user_model.py ja lisää alla oleva koodi.
alkaen pydantinen tuonti Perusmalli
luokkaaKäyttäjä(Perusmalli):
nimi: str
rooli: str
- Yllä oleva koodi luo luokan nimeltä User, joka on Pydantic-kirjaston BaseModel-luokan alaluokka. User-luokassa on kaksi kenttää, nimi ja rooli, joiden tietotyypit on asetettu merkkijonoihin.
- Voit käyttää Pydantic-kirjastoa FastAPI: n kanssa tietomallien luomiseen. Voit käyttää sitä myös tietojen vahvistamiseen, sarjoittamiseen (JSON–Python) ja sarjan poistamiseen (Python–JSON).
3. Määritä tietokaavio
Luodusta tietomallista voit määrittää skeeman tiedoillesi. Luo skeemahakemistoon uusi tiedosto: user_schema.py ja lisää alla oleva koodi.
defuser_serializer(käyttäjä) -> sanella:
palata {
'id':str (käyttäjä["_id"]),
'nimi':käyttäjä["nimi"],
'rooli':käyttäjä["rooli"]
}
defuser_serializer(käyttäjät) -> lista:
palata [user_serializer (käyttäjä) varten käyttäjä sisään käyttäjät]
4. Määritä API-reitit
Lopuksi määritä reitit eri CRUD-operaatioille.
Luo reittihakemistoon uusi tiedosto: user_routes.py ja lisää alla oleva koodi.
Lisää tietoja postimenetelmällä
Luo viestireitti tietojen lisäämistä varten.
alkaen fastapi tuonti APIRouter
alkaen mallit.käyttäjämalli tuonti Käyttäjä
alkaen schemas.user_schema tuonti user_serializer
alkaen bson tuonti ObjectId
alkaen config.db tuonti kokoelmakäyttäjä = APIRouter()
@user.post("/")
asynkdefluo käyttäjä(käyttäjä: käyttäjä):
_id = collection.insert_one (dict (käyttäjä))
user = users_serializer (collection.find({"_id": _id.inserted_id}))
palata {"Tila": "okei","data": käyttäjä}
- FastAPI tarjoaa APIRouter()-menetelmän, joka määrittää reititinobjektin, joka tarjoaa rajapinnan API-pyyntöjen tekemiseen palvelimelle.
- Määritä julkaisureitti, joka luo uuden käyttäjäobjektin tietokantaan lisäämällä tiedot kokoelmaan sen sarjoinnin jälkeen. Tallenna ja välitä seuraavaksi inserted_id löytääksesi liitännäistiedot kokoelmasta, ja lopuksi palauta tila "Ok" vastauksen tiedoilla, jos lähetyspyyntö onnistuu.
- PyMongo-asiakas määrittää insert_one- ja find-menetelmät.
Lisää nyt alla oleva koodi server.py-tiedostoon alustaaksesi reitit.
alkaen routes.user_routes tuonti käyttäjä
app.include_router (käyttäjä)
Mene eteenpäin ja testaa julkaisureittiä selaimessasi FastAPI: n tarjoaman Swagger UI API -työkalun avulla.
Lue tiedot Get-menetelmällä
Kun olet määrittänyt postireitin ja alustanut reitit, määritä loput muut reitit.
@user.get("/")
asynkdeffind_all_users():
käyttäjät = user_serializer (collection.find())
palata {"Tila": "okei","data": käyttäjät}
@user.get("/{id}")
asynkdefget_one_user(tunnus: str):
user = users_serializer (collection.find({"_id": ObjectId (id)}))
palata {"Tila": "okei","data": käyttäjä}
Määritä kaksi hakureittiä, jotka hakevat kaikki kokoelman tiedot ja hakevat tietyt tiedot kokoelmasta tunnuksen perusteella.
Päivitä tiedot Put Methodilla
Luo put-reitti päivittääksesi tietokantaan tallennetut tiedot.
@user.put("/{id}")
asynkdefupdate_user(tunnus: str, käyttäjä: käyttäjä):
collection.find_one_and_update(
{
"_id": ObjectId (id)
},
{
"$set": sanele (käyttäjä)
})
user = users_serializer (collection.find({"_id": ObjectId (id)}))
palata {"Tila": "okei","data": käyttäjä}
Put-metodi käyttää tunnusta löytääkseen tietyt tiedot kokoelmasta ja päivittää asiakirjan kenttien arvon API: lta välitetyillä uusilla tiedoilla. Voit sitten etsiä päivitettyjä tietoja tunnuksella ja palauttaa ne API-vastauksessa.
Poista tiedot Poista-menetelmällä
Luo poistoreitti poistaaksesi tietokantaan tallennetut tiedot.
@user.delete("/{id}")
asynkdefdelete_user(tunnus: str):
collection.find_one_and_delete({"_id": ObjectId (id)})
käyttäjät = user_serializer (collection.find())
palata {"Tila": "okei","data": []}
Poistoreitti ottaa sen tietyn asiakirjan tunnuksen, jonka haluat poistaa kokoelmasta.
Luo REST-sovellusliittymiä FastAPI: lla
FastAPI tarjoaa loistavan tavan rakentaa kätevästi taustapohjaisia Python-verkkosovellusliittymiä. Sen sisäänrakennetut työkalut tietokantojen integrointiin ja automaattiseen API-tuotantoon tekevät prosessista yksinkertaisen.
Voit jopa ottaa tämän askeleen pidemmälle ja rakentaa täysimittaisia sovelluksia. Yritä integroida etupään asiakas käyttämällä suosittuja teknologioita, kuten React, Angular tai Vue.