FastAPI’ye Giriş
FastAPI, tüm endpointler noktaları için otomatik OpenAPI (Swagger) ve ReDoc belge oluşturma özelliklerine sahip Python tabanlı bir Yüksek Performanslı Web API Çerçevesidir. REST API’lerinin veya Mikro Hizmetlerin hızlı bir şekilde geliştirilmesi için son derece uygundur.
FastAPI, Starlette (Starlette, yüksek performanslı asenkron hizmetler oluşturmak için ideal olan hafif bir ASGI çerçevesi/araç setidir) ve Pydantic (Python türü açıklamaları kullanan bir çalışma zamanı veri doğrulama ve ayar yönetimi) ile tam uyumludur. Starlette’in gücünden yararlanan FastAPI, WebSockets ve GraphQL için tam destek alır.
Ön Gereksinimler
Devam etmeden önce, bu yazıyla ilgileniyorsanız, aşağıdaki listedekilere sahip olmanız/karşılamanız önerilir.
- Ücretsiz bir GitHub hesabı
- Ücretsiz bir Heroku hesabı
- Visual Studio Code IDE (Veya Python programlamayı destekleyen tercih ettiğiniz herhangi bir Programlama IDE’si)
- Python 3.6 veya en son sürümü yüklü bir bilgisayar
Bu öğreticide Visual Studio Code (VS Code) kullandığınız varsayılır ve bu nedenle adımlarda bu öğreticinin gözden geçirilmesi sırasında VS Code hakkında bilgi verilir.
Ek olarak, bu FastAPI yazısı, programlamaya yeni başlayanları da hedeflemektedir. Bu nedenle, programcı olmayanların da bu öğreticiyi uygulamalarına yardımcı olan adımları mümkün olduğunca ayrıntılı olarak açıklamaya çalışıyorum.
Basit Bir FastAPI Uygulaması Oluşturun
Tek bir endpoint ile çok basit bir FastAPI uygulaması oluşturacağız ve ardından FastAPI uygulamasını Heroku platformuna deploy edeceğiz.
Bu makalenin tam kaynak kodu GitHub’da barındırılmaktadır. Endpointimiz JSON (JavaScript Object Notation) biçiminde bir yanıt döndürecektir.Komut istemini açın ve yeni bir uygulama oluşturmak istediğiniz konuma gidin. fastapi-demo adında bir dizin oluşturun ve aşağıdaki komutları çalıştırarak geçerli dizini bu dizinin üzerine ayarlayın.
1 2 3 |
mkdir fastapi-demo cd fastapi-demo |
Şimdi komut isteminden VS Code’u yazarak başlatın kod . ve enter tuşuna basın. Ya da klasörü vs codeu açtıktan sonra vs code içerisine ekleyebilirsiniz.
code .
PC’de yüklü olan Python Sürümünü kontrol edin
Terminalde aşağıdaki komutu çalıştırarak PC’nizde yüklü olan Python sürümünü kontrol edin.
1 |
python -V |
Python sürüm 3.6 veya sonraki bir sürümünün yüklü olduğundan emin olun. Bilgisayarımda Python 3.8.0 yüklü.
Sanal Ortam Oluşturma
Uygulamaya geçmeden önce, projemiz üzerinde çalışmak için bir Python Sanal Ortamı oluşturacağız.
Python Sanal Ortamı Windows İşletim Sistemi oluşturma komutu
Windows işletim sisteminden, aşağıdaki komutu yazarak env veya istediğiniz herhangi bir ad adlı bir Sanal Ortam oluşturun
1 |
python -m venv env |
Python Sanal Ortamı Unix tabanlı işletim sistemi oluşturma komutu
Unix tabanlı işletim sisteminden, aşağıdaki komutu yazarak komut terminalinden env adında bir Sanal Ortam oluşturunuz
1 |
python3 -m venv env |
Sanal Ortamı Etkinleştirin
Sanal ortamı etkinleştirmek için işletim sisteminize bağlı olarak aşağıdaki komutu yazın.
Windows işletim sistemi için Python Sanal Ortamını etkinleştirme komutu
1 |
env\Scripts\activate |
Unix tabanlı işletim sistemi için Python Sanal Ortamını etkinleştirme komutu
1 |
source ./env/bin/activate |
Sanal ortamın başarılı bir şekilde etkinleştirilmesinden sonra, oluşturulan ortamın adının komut satırı terminaline önek olarak ekleneceğini göreceksiniz.
Pip’i Güncelle
pip, Python’da bir modül yükleyicisidir. Basitçe söylemek gerekirse, bizim durumumuzda pip, uygulamamızda kullanabilmemiz için FastAPI modülünü kurmamıza yardımcı olacaktır. pip kendi içinde Python kurulumu ile varsayılan olarak gelen bir modüldür. Pip için sık sık yükseltmeler vardır. Bu nedenle, projemiz için her zaman en son bağımlılıkları alması için pip’i yükseltmek en iyi uygulamadır. pip’i yükseltmek için aşağıdaki komutu çalıştırın.
1 |
python -m pip install --upgrade pip |
FastAPI modülünü kurun
FastAPI kullanarak bir Restful API oluşturmak için yalnızca FastAPI ve uygulamaya özel bağımlılıkları yüklemek için aşağıdaki komutu çalıştırın.
Yaklaşım 1: FastAPI İsteğe Bağlı Kurulum
Bu yaklaşımda FastAPI’yi ve ardından Uvicorn’u ayrı ayrı kuruyoruz.
1 |
pip install fastapi |
Bu durumda, aşağıdaki komutla uvicorn’u ayrı olarak kurmanız gerekir. Uvicorn, FastAPI uygulamanızı çalıştırmak için altyapı sağlayan bir ASGI (Asenkron Sunucu Ağ Geçidi Arayüzü) sunucusudur.
1 |
pip install uvicorn |
Bu, FastAPI’nin uygulama geliştirme çerçevesinin çalıştırdığı sunucudan tamamen ayrıldığı anlamına gelir. Bu, FastAPI’nin WSGI (Web Sunucusu Ağ Geçidi Arayüzü) sunucusunda da çalışmasını kolaylaştırır. FastAPI’nin güzelliği budur.
Yaklaşım 2: FastAPI Tam Kurulum
FastAPI’yi Uvicorn ile birlikte kurmak istiyorsanız aşağıdaki komutu çalıştırınız.
1 |
pip install fastapi[all] |
Tam kurulumla ilgili zorluklar, bir Windows 10 PC’deyseniz ve Microsoft Visual C++ 14.0’ı yüklemediyseniz, pip’in FastAPI’yi yükleyememesidir. Bu nedenle, başarılı bir kuruluma sahip olmanız için çok büyük bir yazılım olan Microsoft Visual C++ 14.0’ı indirmeniz gerekir. Bu yazılımın yüklü olması gerekli değildir. Bu nedenle, FastAPI’nin İsteğe bağlı kurulumunun Yaklaşım 1’i ile gitmeniz önerilir.
Gunicorn Kurulumu
Heroku’daki uygulamamızı sunmak için Gunicorn kullanıyoruz. Gunicorn’u yüklemek için aşağıdaki komutu çalıştırın.
1 |
pip install gunicorn |
Tüm proje bağımlılıklarını bir dosyaya kaydetme
Şimdiye kadar, tüm bağımlılıkları kurabiliyoruz. Ancak, gerekli bağımlılıkların yüklenmesini otomatikleştirmek de önemlidir. Bunun nedeni, bu depo diğer geliştiriciler tarafından farklı bir bilgisayarda kullanılıyorsa veya çeşitli başka ortamlara dağıtırsak, kendi başlarına yüklediklerinde modüllerin uygun olmayan sürümleriyle ilgili sorunlarla karşılaşmamaları gerektiğidir. Bu yüzden proje ile ilgili bağımlılıkları donduracağız ve projenin kök dizininden cmd terminalinde aşağıdaki komutu çalıştırarak bir dosyada saklayacağız.
1 |
pip freeze > requirements.txt |
Yukarıdaki komut tüm modüllerin sürümlerini yakalayacak ve bunları projenin kök dizinindeki requirements adlı bir metin dosyasına yazacaktır. Dosyanın adı sizin seçiminizdir, ancak requirements.txt en yaygın olarak Python topluluğu tarafından kullanılır.requirements.txt dosyasında belirtilen bağımlılıkları kurmak için tek yapmanız gereken aşağıdaki komutu çalıştırmaktır.
1 |
pip install -r requirements.txt |
Yukarıdaki komut, requirements.txt dosyasını satır satır okuyacak ve dosyada belirtilen belirli sürümlere sahip tüm paketleri yükleyecektir.
FastAPI’de Basit Bir Uç Nokta Oluşturun
Basit bir JSON döndüren bir GET endpoint’i oluşturacağız. Bunun için fastapi-demo projemizin kök dizininde main.py isminde bir dosya oluşturun.
FastAPI modülünü içe aktarın ve başlatın
main.py aşağıdaki satırı ekleyin, böylece fastapi modülü tarafından sunulan FastAPI adlı sınıf yardımıyla endpoint’imizi oluşturmaya başlayabiliriz.
1 2 3 4 5 6 7 |
from fastapi import FastAPI Bir sonraki yeni satırda, modül tarafından kullanıma sunulan get HTTP Verb'den yararlanabilmemiz için FastAPI örneğini app adlı bir değişkene atayın. from fastapi import FastAPI app = FastAPI() |
Şimdi aşağıdaki gibi basit bir JSON nesnesi döndürmek için bir endpoint oluşturacağız.
1 2 3 4 5 |
{ "message": "Hello TutLinks.com" } |
GET Uç Noktasını Uygulama
Main.py dosyası aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# main.py from fastapi import FastAPI app = FastAPI() @app.get("/") def hello(): return {"message":"Hello TutLinks.com"} |
Yukarıdaki kodda def anahtar kelimesi ile hello isminde bir metot tanımladık. Bu yöntemin yaptığı tek şey, Python’da sözlük türünde bir nesne döndürmektir.
#1 çizgisi, tüm sihrin gerçekleştiği yerdir. @app.get(“/”) hello yöntemimizin dekoratörüdür ve bu yöntemi GET HTTP yöntemi isteklerini kabul eden bir uç noktaya dönüştürür. Bizim durumumuzda uygulamaya atanan FastAPI örneği , sözlük türünün dönüş değerini otomatik olarak JSON biçimi.
FastAPI uygulamasını yerel PC’de çalıştırın
Oluşturduğumuz Python ortamının aktif olduğu komut istemine aşağıdaki komutu yazıp enter tuşuna basın.
1 |
uvicorn --port 5000 --host 127.0.0.1 main:app --reload |
- Yukarıdaki komut ile aşağıdaki altyapı ayarları ile Uvicorn ASGI sunucusuna çağrı çağırıyoruz.
- host 127.0.0.1, uvicorn’u uygulamamızı PC’nin localhost’unda çalıştıracak şekilde yapılandırdığımız anlamına gelir. host parametresi için diğer olası değerler 0.0.0 veya localhost’tur. FastAPI’yi üretim ortamlarına dağıtırken 0.0.0.0 önerilir.
- 5000 numaralı port, uygulamamızın çalışmasını istediğimiz porttur. Bu bağlantı noktasında zaten çalışan başka bir uygulamanız veya hizmetiniz varsa, yukarıdaki komut yürütülemez. Böyle bir durumda, uygulamanın kullanması için ücretsiz olarak kullanılabilir olduğu tespit edilen seçtiğiniz başka bir dört basamaklı sayıyla değiştirmeyi deneyin.
- yeniden yükle Bu bayrağın yalnızca geliştirme amacıyla ayarlanması önerilir. Bu bayrağın etkinleştirilmesi, geliştirme sırasında kodunuzda yaptığınız değişikliklerle uvicorn sunucusunu otomatik olarak yeniden başlatır. Herhangi bir çalışma zamanı hatası olması durumunda, uvicorn sunucusunun yeniden başlatılamamasına neden olan hata izinden bu değişiklikleri hızlı bir şekilde tanımlayacağınız açıktır.
- reload bayrağı, modern JavaScript kitaplıklarıyla birlikte gelen sıcak kod yeniden yükleme özelliği ile karıştırılmamalıdır. React ve Vue tarafından sağlanan uvicorn’un yeniden yüklemesi ile sıcak kod yeniden yüklemesi arasındaki temel fark, uvicorn’un yeniden yüklemesinin sunucuyu yeniden başlatması ve sıcak kod yeniden yüklemesinin hem sunucuyu yeniden başlatması hem de kullanıcı arayüzünü yeniden yüklemesidir.
- main:app Bu, aşağıda ayrıntılı olarak açıklandığı gibi bir model izler.
-
- main, FastAPI’nin başlatıldığı modüldür. Bizim durumumuzda, sahip olduğumuz tek şey kök düzeyinde main.py. FastAPI değişkenini diğer dizinlerin altında bir yerde başlatıyorsanız, uvicorn’un yapılandırmayı doğru bir şekilde tanımlayabilmesi için bir __init__.py dosyası eklemeniz ve bu modülü kullanıma sunmanız gerekir. Bizim durumumuzda ana modül olur.
- app, FastAPI örneğiyle atanan değişkenin adıdır. Bu adları değiştirmekte özgürsünüz, ancak module-name:fastapi-initialization-variable desenini izleyen aynı sözdizimini yansıtıyorsunuz.
Seçtiğiniz bir tarayıcıda aşağıdaki uç noktaya giderek uygulamaya erişin ve uygulamayı görün.
1 |
http://127.0.0.1:5000/ |
FastAPI kullanarak bir Web API’si uygularken, isteği Postman veya Postwoman gibi herhangi bir API geliştirme aracı aracılığıyla bu uç noktaya göndermeniz önerilir. Postman, API geliştirme ve test etme için bir yazılımdır. Bir API’ye gönderilen istekleri özelleştirmenize olanak tanır. İstekte GET, PUT, POST, DELETE gibi özel HTTP Fiilleri gönderme ve yetkilendirme veya içerik anlaşması gibi özel başlıklar ekleme gibi özellikler. Ancak basit uç noktamız için tarayıcı aracılığıyla bir GET isteği göndermekte sorun yok.
Tarayıcıda, Merhaba Tutlinks.com mesajını içeren JSON yanıtını göreceksiniz. Başarılı, örnek yanıtla basit bir Web API’si oluşturma konusunda uzmanlaştınız. Bunu, ücretsiz hesaplarla sınırlı dinozorlar sunan Heroku gibi üretim ortamlarına nasıl dağıtacağınızı anlamanız her zaman önerilir. Bu yetenek, çalışmalarınızı arkadaşlarınıza, iş arkadaşlarınıza göstermenize veya teknik becerilerinizle övünmek için çalışmalarınızı LinkedIn gibi profesyonel ağ sitelerinde paylaşmanıza yardımcı olacaktır.
Heroku için Dağıtım Yapılandırması Procfile Oluşturma
Procfile, Heroku’ya özgü bir dosyadır ve Heroku’da gerçekleşen etkin bir dağıtım sırasında dağıtım yapılandırmaları tarafından okunur. Heroku otomatik olarak Procfile’ın varlığını arar ve içinde bulunan komutları yürütür.
FastAPI uygulamasını Heroku’ya Dağıtma Komutu
Herhangi bir uzantı olmadan Procfile adlı bir dosya oluşturun . FastAPI uygulamanızı Procfile’daki Heroku’da çalıştırmak için aşağıdaki komutu yerleştirin.
1 |
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app |
- web: yanındaki komutla bir web uygulamasını başlatmak için Heroku dağıtım işlemini tanımlamaya yardımcı olacak Procfile komut kuralına özgüdür.
- gunicorn, uygulamamızı aşağıdaki yapılandırmayla çalışacak şekilde yapılandırdığımız WSGI sunucusudur.
- -w 4 uygulamamızın gunicorn üzerinde 4 worker process ile çalışmasına ihtiyacımız olduğunu belirtir.
- -k uvicorn.workers.UvicornWorker, gunicorn’a uygulamayı workers.UvicornWorker worker worker sınıfını kullanarak çalıştırmasını söyler.
- main:app, FastAPI() uygulamamızın başlatıldığı ana modülümüzdür.
Ana bilgisayarı ve bağlantı noktasını da belirtebilirsiniz. Ancak Heroku bunları otomatik olarak çözecek ve bu demo için ekstra bir yapılandırmaya gerek yok.
Deponuzu GitHub’a gönderme
GitHub, yazılımla ilgili kod dosyalarınızı barındırmak için açık bir platformdur. Kodunuzu herkese açık olacak şekilde yapılandırabilir veya ihtiyacınıza göre özel hale getirebilirsiniz. GitHub’da yeniyseniz, bunun için gidin ve ücretsiz kaydolun. Mevcut projenizi GitHub’a eklemek için bu ayrıntılı öğreticiyi izleyin.
Heroku’da FastAPI Dağıtımını Yapılandırma
Henüz sahip değilseniz ücretsiz bir Heroku hesabı için kaydolun. Heroku, geliştiricilerin uygulamaları tamamen bulutta oluşturmasına, çalıştırmasına ve çalıştırmasına olanak tanıyan bir hizmet olarak platformdur (PaaS). Doğrulanmış bir e-posta hesabıyla kaydolduktan sonra, bir uygulama oluşturmaya devam edin.
Heroku’da uygulama oluşturma ve yapılandırma
Heroku’da Uygulama Oluştur
- Kayıtlı e-posta ile doğrulanmış Heroku hesabınıza giriş yapın.
- Kontrol panelinde Yeni uygulama oluştur düğmesine tıklayın. Zaten uygulamalarınız varsa, Yeni’ye tıklayın ve Yeni uygulama oluştur’u seçin.
- Kullanılabilir bir Uygulama adı verin . Uygulama adının, kendisine kayıtlı tüm kullanıcılardaki diğer tüm Heroku uygulamalarında benzersiz olması gerektiğinden emin olmalısınız. Aksi takdirde Heroku, uygulamayı oluşturmanıza izin vermez.
- Bir bölge seçin veya Amerika Birleşik Devletleri olarak seçilen varsayılan bölgeye bırakın
- Dağıtım işlem hattı yapılandırmak istemiyorsanız İşlem hattına ekle seçeneğini yoksayın.
- Uygulama oluştur düğmesine tıklayın.
- Ardından Vscode üzerinden aşağıdaki adımları takip ediniz.
Install the Heroku CLI
Download and install the Heroku CLI.
If you haven’t already, log in to your Heroku account and follow the prompts to create a new SSH public key.
1 |
$ heroku login |
Clone the repository
Use Git to clone fastapi-demo1’s source code to your local machine.
1 2 |
$ heroku git:clone -a fastapi-demo1 $ cd fastapi-demo1 |
Deploy your changes
Make some changes to the code you just cloned and deploy them to Heroku using Git.
1 2 3 |
$ git add . $ git commit -am "make it better" $ git push heroku master |
GitHub’a bağlanma
- Dağıtım yöntemi altında GitHub seçeneğini belirleyin ve GitHub’a bağlanın.
- İlk kez kullanıcıların, deponun gönderildiği hesapta oturum açarak GitHub hesabını bağlaması gerekir. Mevcut kullanıcılar, bir depoda arama yapma seçeneğini otomatik olarak görecektir.
- Bağlandıktan sonra, bağlanmak için bir depo arayın. GitHub’da yeni bir depo oluştururken verdiğiniz ada göre depoyu arayın.
- Arama sonuçlarında FastAPI uygulamamızın bulunduğu depoyu bulun ve bağlanın.
GitHub’dan Heroku’da Otomatik Dağıtımı Yapılandırma
Depoya başarıyla bağlandıktan sonra Otomatik Dağıtımları Yapılandır seçeneğini görürsünüz. Ana dağıtıma dağıtılacak bir dal seçin seçeneğini bırakın ve Otomatik Dağıtımları Etkinleştir’e tıklayın. Bu ayar, yeni kod değişikliklerini ana dala her gönderdiğinizde en son değişiklikleri derleyen ve yayımlayan dağıtımı otomatik olarak tetikler. El ile dağıtma bölümünden, ana olarak dağıtılacak dalın adını girin ve Dalı Dağıt’a tıklayın.
Dağıtım işleminin tamamlanmasını bekleyin. İşiniz bittiğinde, Uygulamanız başarıyla dağıtıldı ifadesini görmeniz gerekir.Heroku’ya dağıtılan ilk Python tabanlı FastAPI uygulamanızı görmek için Görüntüle düğmesine
tıklayın.????
Video öğretici
FastAPI’nin temellerine aşina olmanız durumunda, FastAPI uygulamasını Heroku’ya nasıl dağıtacağınızı anlamak isteyebilirsiniz. Aşağıdaki eğitim videosu, bunu sadece 6 dakika içinde yapmanız için size rehberlik edecektir.
Source : https://tutlinks.com/create-and-deploy-fastapi-app-to-heroku/#introduction-to-fastapi
İlk Yorumu Siz Yapın