Python ve Flask ile RESTful API’ler Nasıl Oluşturulur?

Yazın gerçekleştirmiş olduğum staj bilgilerimi okulda pratiğe dökmek amacıyla design project olarak mobil uygulama geliştirmeyi tercih ettim. Bu süreçte projenin backend kısmı için python kullansam nasıl olurdu diyerek yeni bir şeylere giriş yapmaya karar verdim. Ama sorun bakalım deneyimim var mıydı? Hayır yoktu. O yüzden ileride benim gibi olan birine de lazım olabilir düşüncesiyle Flask ve onu RESTfull API’leri oluşturmak için nasıl kullanabileceğiniz hakkında kendi tecrübemi paylaşacağım.

REST nedir?

REST, REpresentational State Transfer’in kısaltmasıdır. Mimari bir tarz ve Web servislerinin geliştirilmesinde sıklıkla kullanılan iletişim yaklaşımıdır.

REST web hizmetleri, İnternet’teki bilgisayar sistemleri arasında birlikte çalışabilirlik sağlamanın bir yoludur.

REST uyumlu Web hizmetleri, talep eden sistemlerin, tek tip ve önceden tanımlanmış durum bilgisi olmayan işlemler kullanarak Web kaynaklarının metinsel temsillerine erişmesine ve bunları değiştirmesine olanak tanır.

Bu şekilde bir tanımlamadan sonra artık nasıl kısmına geçebiliriz.

Başlamadan Önce İndirmeniz Gerekenler

  • Sisteminizde Python3.x’in kurulu olduğundan emin olun.

Sisteminiz hazırsa başlayabiliriz. İlk defa yaptığımız için yabancı gelecektir ama adım adım ilerlediğimiz için daha rahat çözebileceğiz.

1. Adım: Uygulamayı Kurma

İlk olarak sisteminizde uygulamanın genel yapısını oluşturun:

aşağıdaki görsellerde Hello.py, user.py olarak karşınıza çıkacak.

Ardından terminali açın ve cd(change directory) ile proje dosyanıza girin.

Sırada virtual environment’ı oluşturma ve aktif hale getirme işlemi var.

virtualenv, yalıtılmış Python ortamları oluşturmak için bir araçtır. virtualenv, bir Python projesinin ihtiyaç duyacağı paketleri kullanmak için gerekli tüm yürütülebilir dosyaları içeren bir klasör oluşturur.

Şimdi de virtual environment’ımızı oluşturalım;

Kullanılacak komut, python kurulumunuzla hangi ilişkilerin ilişkilendirildiğine bağlı olarak değişebilmektedir.

Sonrasında sanal ortamı etkinleştiriyoruz;

Aşağıda yer verdiğimiz uzantıları requirements.txt içerisine ekliyoruz:

Bu dosya API’ımızın kullanacağı tüm Python uzantılarını içerir.

Peki bu kavramların anlamı nedir?

flask: Python ile yazılmış bir mikro web çerçevesidir. Belirli araçlar veya kitaplıklar gerektirmediği için mikro çerçeve olarak sınıflandırılır. Veritabanı soyutlama katmanı, form doğrulama veya önceden var olan üçüncü taraf kitaplıkların ortak işlevler sağladığı diğer bileşenleri yoktur.

flask_restful: REST API’larının hızlı bir şekilde oluşturulması için destek ekleyen bir Flask uzantısıdır.

flask_script: Flask’ta harici komut dosyaları yazmak için destek sağlayan bir uzantıdır.

flask_migrate: Alembic kullanan Flask uygulamaları için SQLAlchemy veritabanı geçişlerini işleyen bir uzantıdır.

marshmallow: Nesneler gibi karmaşık veri türlerini yerel Python veri türlerine dönüştürmek için bir ORM /ODM agnostik kitaplıktır. Bunu doğrulama için kullanacağız. Nesneleri serileştirmek ve seriyi kaldırmak için kullanılır.

flask_sqlalchemy: SQLAlchemy için destek ekleyen Flask için bir uzantıdır.

flask_marshmallow: Ek özellikler ekleyen Flask ve nesne serileştirme / seriyi kaldırma kitaplığı için bir entegrasyon katmanıdır.

marshmallow-sqlalchemy: Ek özellikler ekler.

psycopg: Python programlama dili için bir PostgreSQL bağdaştırıcısıdır.

2. Adım: Tüm Bağımlılıkları(dependencies) Yükleme

Terminalinizden, projenin kök(root) klasöründe olduğunuzdan emin olun ve ardından aşağıdaki komutu çalıştırın:

requirements.txt dosyasının içerisindeki tüm uzantıları indirip kuracaktır.

3. Adım: Yapılandırmayı Kurma

congif.py dosyasına aşağıdaki kodu ekleyiniz:

burada database_name yerine siz ne isim vermek istiyorsanız onu yazmalısınız.

Burada, API’nin kullanacağı bazı konfigürasyonları tanımladık. Ayrıca PostgreSQL veritabanını kullanıyoruz. Diğer veritabanlarını tercih ediyorsanız, değerleri buna uygun olarak değiştirmeniz gerekmektedir.

4. Adım: API giriş noktalarını oluşturun

API(Application Programming Interface) kısaca nedir?

Uygulama programlama arayüzü, bir yazılımın başka bir yazılımda tanımlanmış işlevlerini kullanabilmesi için oluşturulmuş bir tanım bütünüdür. API, Web uygulaması, İşletim sistemi, veritabanı, donanımlar yahut yazılım kütüphanesi için kullanılabilir

Peki API giriş noktası(API Entry Point) nedir?

API giriş noktaları, API’nin iyi bilinen URL’lere sahip tek parçasıdır. API, mevcut işlevsellik ve ona erişmek için URL’ler hakkında bilgi içeren API tanımlayıcıları sağlarlar.

Şimdi kendi projemiz için giriş noktalarımızı oluşturalım:

5. Adım: Sunucuyu Başlatma

Terminalinizden, uygulamanın kök klasöründe olduğunuzdan emin olun ve ardından şu komutu çalıştırın:

Bu aşamaya kadar yaptığınız her şey yolunda giderse, aşağıdaki gibi bir çıktıya sahip olmalısınız:

Şimdi, URL’yi ziyaret edin (http://127.0.0.1:5000/api/user), aşağıdaki gibi bir çıktı görmelisiniz:

6. Adım: Model Oluşturma

Şimdi sıradaki işlemimiz olan modellerimizi yazmaya geçiyoruz. Flask, geliştiricilere uygulama verilerini yönetmek ve sorgulamak için SQL Alchemy ORM’nin(Object Relational Mapper) gücünü ve esnekliğini sağlar.

Aşağıda yer alan kodu eklediğiniz zaman Comment ve Category olmak üzere 2 tane modele sahip olacaksınız. Class table yapısını tanımlar. tablename = ‘categories’, model ile ilişkili tablo adını bildirmek için kullanılır.

7. Adım: Taşıma işlemlerini çalıştırma( Running migrations)

Migrations nedir?

Taşıma işlemleri, veritabanınız için sürüm kontrolü gibidir ve ekibinizin uygulamanın veritabanı şemasını kolayca değiştirmesine ve paylaşmasına olanak tanır.

Komut istemimizden geçişi çalıştırmak için bir komut oluşturduk.

Ardından db init komutunu aşağıdaki gibi kullanarak geçişleri başlatmayı çalıştırın:

Komut dosyası ayrıca, bir sürümler alt klasörü ve diğer birçok dosya ile klasör içinde yeni bir taşıma alt klasörü oluşturuyor.

Modellerde tespit edilen değişikliklerle taşıma komut dosyasını dolduran ikinci komut dosyasını çalıştırın. Bu durumda, geçiş betiğini ilk kez dolduruyoruz ve bu nedenle, geçiş betiği iki modelimizi sürdürecek tabloları oluşturacaktır: Category ve Comment:

Taşıma işlemini çalıştırın:

Daha sonra geçişi veritabanına uygulayın. Yükseltme komutunu çalıştırın:

Veritabanı modelleri her değiştiğinde, geçiş ve yükseltme komutlarını tekrarlayınız.

Okuduğunuz için teşekkür ederim.Eksiğim veya hatam olduysa düzeltmekten çekinmeyiniz :)

Software Developer | my universe: https://twitter.com/NightmaresTown

Love podcasts or audiobooks? Learn on the go with our new app.