Bir REST API'si oluşturmak, genellikle çok sayıda ortak tasarım ve ezberci programlamayı içeren mekanik bir görevdir. Neyse ki, FastAPI gibi araçlar sıkıcı ayrıntıların çoğunu ortadan kaldırabilir.
FastAPI kullanarak, CRUD uygulamanız için hızlı bir şekilde verimli, eksiksiz bir REST API oluşturabilirsiniz. Veri kaynağı olarak MongoDB ile bu eğitim, kısa sürede kendi API'nizi kurmanız için size rehberlik edecektir.
FastAPI Nedir?
HızlıAPI API'ler oluşturmak için hızlı ve açık kaynaklı bir Python web çerçevesidir. Eşzamansız istekler, verilerin otomatik doğrulanması ve API uç noktalarının otomatik belgelenmesi için yerleşik destek sağlar.
FastAPI'nin Diğer Python Çerçevelerine Göre Avantajları
- FastAPI, Django ve Flask gibi diğer çerçevelerden nispeten daha hızlıdır. Bunun nedeni, FastAPI'nin Python için eşzamanlı istekleri daha hızlı işleyebilen eşzamansız bir G/Ç kitaplığı olan asyncio üzerine inşa edilmesidir.
- FastAPI, Flask veya Django'dan daha az kod gerektirdiğinden API'leri minimum çabayla oluşturmak için temiz ve basit bir yol sağlar.
- Son olarak FastAPI, uç noktalar için dokümantasyon oluşturmayı kolaylaştırır. İstekleri çalıştırarak ve yanıtları görüntüleyerek uç noktaları test etmek için kullanabileceğiniz belgeler oluşturmak için Swagger'ı kullanır.
Bir MongoDB Veritabanı Kurun
Başlamak için yapmanız gerekenler MongoDB Veritabanını yerel olarak kurun. Alternatif olarak, daha kolay olan seçeneği tercih edebilirsiniz. Bulutta bir MongoDB kümesi kurma.
Ardından, yüklü MongoDB grafik kullanıcı arayüzü aracı Compass'ı kullanarak bir veritabanı bağlantısı oluşturun. Tıkla Yeni bağlantı düğmesini tıklayın ve yerel olarak çalışan MongoDB sunucusuyla bağlantı kurmak için bağlantı URI'sini sağlayın.
Son olarak, test API verilerinizi tutmak için yeni bir veritabanı ve koleksiyon oluşturun.
Bir FastAPI Sunucusu Kurun
Bir terminal kullanarak bir proje klasörü oluşturun ve bu yeni dizini girin.
Bu projenin kodunu kendi içinde bulabilirsiniz. GitHub deposu.
Ardından, Python 3.6+ sürümünü çalıştırıp çalıştırmadığınızı kontrol edin. Değilse, en son sürümü yükleyin Piton sürüm.
piton --versiyon
Ardından, yalıtılmış bir sanal geliştirme ortamı oluşturmak için Virtualenv'i kurun. Özellikle farklı projeler için farklı paket sürümleri kullanıyorsanız, çakışmaları önlemenizi sağladığı için bu önemle tavsiye edilir.
pip kurulum virtualenv
Ardından, mevcut dizininizde "venv" adlı bir sanal ortam oluşturun:
sanalenv venv
Son olarak sanal ortamı etkinleştirin.
# Unix veya MacOS'ta:
kaynak venv/bin/etkinleştir
# Windows'ta:
.\venv\Komut Dosyaları\etkinleştir
Sanal ortamı yapılandırdıktan sonra FastAPI, PyMongo ve Uvicorn paketlerini yükleyin.
pip kurulumu fastapi pymongo uvicorn
PyMongo, MongoDB veritabanıyla çalışmak için Python tabanlı bir kitaplıktır. MongoDB'nin tüm özelliklerini destekleyen ve ham MongoDB sorguları yazmak zorunda kalmadan MongoDB ile etkileşime geçmenizi sağlayan bir API sağlar.
Uvicorn ise Python asyncio modülünü temel alan asenkron bir web sunucusudur. Ana özelliği, hareket halindeyken FastAPI sunucularınızı yeniden yüklemektir. Uvicorn kullanmak şuna benzer: Nodemon'la çalışmak.
FastAPI Sunucusunu Oluşturun
Son olarak, ana yoldan gelen istekleri dinleyen basit bir FastAPI sunucusu oluşturun. Proje klasörünüzün kök dizininde bir server.py dosyası oluşturun ve aşağıdaki kodu ekleyin.
itibaren fastapi içe aktarmak HızlıAPI
uygulama = FastAPI()
@app.get("/")
zaman uyumsuzkesinlikleEv():
geri dönmek {"İleti": "Selam Dünya"}
Son olarak, geliştirme sunucusunu döndürmek için aşağıdaki komutu çalıştırın. Uvicorn, uygulamanızı 8000 numaralı bağlantı noktasında sunacaktır.
uvicon sunucusu: uygulama -- yeniden yükle
Devam edin ve sunucu yanıtını şu adreste tarayıcınızda görüntüleyin: http://localhost: 8000.
CRUD İşlemleri ile REST API'sini oluşturun
Şimdi CRUD yöntemlerini (oluşturma, okuma, güncelleme ve silme) uygulayan REST API'sini oluşturun. Proje klasörünüzün kök dizininde dört klasör oluşturun: yapılandırma, modeller, yollar ve şemalar.
├── yapılandırma
├── modeller
├── rotalar
├── şemalar
└── server.py
1. Veritabanı Bağlantısını Yapılandırma
Yapılandırma dizininde db.py adlı yeni bir dosya oluşturun ve aşağıdaki kodu ekleyin.
itibaren pirmongo içe aktarmak MongoClient
db_connection = MongoClient("mongodb: // localhost: 27017")
db = db_connection.database_name
koleksiyon = db["koleksiyon_adı"]
- Bir MongoDB veritabanına bağlantı oluşturmak için MongoClient() yöntemini kullanın. MongoDB sunucusunun ana bilgisayarını ve bağlantı noktasını belirten bir argüman olarak bir bağlantı URI dizesi alır.
- İki değişken, sunucunun MongoDB sunucunuzdaki hangi veritabanına ve koleksiyona erişmesi gerektiğini belirtir.
2. Bir Veri Modeli Tanımlayın
Bu model, alanlar ve veri türleri dahil olmak üzere veritabanındaki verilerinizin yapısını tanımlayacaktır.
Model dizininde yeni bir user_model.py dosyası oluşturun ve aşağıdaki kodu ekleyin.
itibaren cüce içe aktarmak temel model
sınıfkullanıcı(TemelModel):
isim: str
rol: str
- Yukarıdaki kod, Pydantic kitaplığından BaseModel sınıfının bir alt sınıfı olan User adlı bir sınıf oluşturur. User sınıfının, veri türleri dizelere ayarlanmış ad ve rol olmak üzere iki alanı vardır.
- Veri modelleri oluşturmak için Pydantic kitaplığını FastAPI ile birlikte kullanabilirsiniz. Verileri doğrulamak, seri hale getirmek (JSON'dan Python'a) ve seri durumunu kaldırmak (Python'dan JSON'a) için de kullanabilirsiniz.
3. Bir Veri Şeması Tanımlayın
Oluşturulan veri modelinden verileriniz için şema tanımlayabilirsiniz. Şemalar dizininde yeni bir dosya oluşturun: user_schema.py ve aşağıdaki kodu ekleyin.
kesinlikleuser_serializer(kullanıcı) -> dikte:
geri dönmek {
'İD':str (kullanıcı["_İD"]),
'isim':kullanıcı["isim"],
'rol':kullanıcı["rol"]
}
kesinlikleusers_serializer(kullanıcılar) -> liste:
geri dönmek [user_serializer (kullanıcı) için kullanıcı içinde kullanıcılar]
4. API Yollarını Tanımlayın
Son olarak, farklı CRUD işlemleri için yolları tanımlayın.
Routes dizininde yeni bir dosya oluşturun: user_routes.py ve aşağıdaki kodu ekleyin.
Post Yöntemiyle Veri Ekleme
Veri eklemek için gönderi rotasını oluşturun.
itibaren fastapi içe aktarmak APIYönlendirici
itibaren modeller.user_model içe aktarmak kullanıcı
itibaren schemas.user_schema içe aktarmak users_serializer
itibaren bson içe aktarmak Nesne Kimliği
itibaren yapılandırma.db içe aktarmak Toplamakkullanıcı = APIRouter()
@user.post("/")
zaman uyumsuzkesinlikleKullanıcı oluştur(kullanıcı: Kullanıcı):
_id = collection.insert_one (dict (kullanıcı))
kullanıcı = users_serializer (collection.find({"_İD": _id.inserted_id}))
geri dönmek {"durum": "Tamam","veri": kullanıcı}
- FastAPI, bir sunucuya API istekleri yapmak için bir arabirim sağlayan bir yönlendirici nesnesini tanımlayan APIRouter() yöntemini sağlar.
- Verileri seri hale getirdikten sonra koleksiyona ekleyerek veritabanında yeni bir kullanıcı nesnesi oluşturan bir gönderi yolu belirtin. Ardından, koleksiyondaki ilişkili verileri bulmak için insert_id'yi depolayın ve iletin ve son olarak, gönderi isteği başarılı olursa, yanıttaki verilerle birlikte "Tamam" durumunu döndürün.
- insert_one ve find yöntemleri PyMongo istemcisi tarafından tanımlanır.
Şimdi, rotaları başlatmak için aşağıdaki kodu server.py'ye ekleyin.
itibaren route.user_routes içe aktarmak kullanıcı
app.include_router (kullanıcı)
Devam edin ve FastAPI tarafından sağlanan Swagger UI API aracını kullanarak tarayıcınızda gönderi rotasını test edin.
Get Metodu ile Verileri Oku
Posta rotasını tanımladıktan ve rotaları başlattıktan sonra, diğer rotaların geri kalanını tanımlayın.
@user.get("/")
zaman uyumsuzkesinlikletüm_kullanıcıları bul():
kullanıcılar = users_serializer (collection.find())
geri dönmek {"durum": "Tamam","veri": kullanıcılar}
@user.get("/{id}")
zaman uyumsuzkesinlikleget_one_user(kimlik: str):
kullanıcı = users_serializer (collection.find({"_İD": Nesne Kimliği (id)}))
geri dönmek {"durum": "Tamam","veri": kullanıcı}
Koleksiyondaki tüm verileri alan ve kimliğe dayalı olarak koleksiyondan belirli verileri alan iki alma yolu tanımlayın.
Verileri Put Yöntemiyle Güncelleyin
Veritabanında depolanan verileri güncellemek için koyma yolunu oluşturun.
@user.put("/{id}")
zaman uyumsuzkesinlikleupdate_user(kimlik: str, kullanıcı: Kullanıcı):
koleksiyon.find_one_and_update(
{
"_İD": Nesne Kimliği (id)
},
{
"$ayarlandı": dikte (kullanıcı)
})
kullanıcı = users_serializer (collection.find({"_İD": Nesne Kimliği (id)}))
geri dönmek {"durum": "Tamam","veri": kullanıcı}
Koyma yöntemi, koleksiyondaki belirli verileri bulmak için kimliği kullanır ve belgedeki alanların değerini API'den geçirilen yeni verilerle günceller. Ardından, güncellenen verileri kimliğe göre arayabilir ve API yanıtında döndürebilirsiniz.
Sil Yöntemiyle Verileri Sil
Veritabanında depolanan verileri silmek için silme yolunu oluşturun.
@user.delete("/{id}")
zaman uyumsuzkesinliklekullanıcıyı sil(kimlik: str):
koleksiyon.find_one_and_delete({"_İD": Nesne Kimliği (id)})
kullanıcılar = users_serializer (collection.find())
geri dönmek {"durum": "Tamam","veri": []}
Silme yolu, koleksiyondan silmek istediğiniz belirli belgenin kimliğini alır.
FastAPI ile REST API'leri oluşturun
FastAPI, arka uç Python web API'lerini uygun bir şekilde oluşturmak için harika bir yol sağlar. Veritabanı entegrasyonu ve otomatik API üretimi için yerleşik araçları, süreci basitleştirir.
Hatta bunu bir adım öteye götürebilir ve tam teşekküllü uygulamalar oluşturabilirsiniz. React, Angular veya Vue gibi popüler teknolojileri kullanan bir ön uç istemciyi entegre etmeyi deneyin.