Flask ile REST API Geliştirelim

İsa Toltar
Nov 3 · 4 min read

Herkese yeni bir yazıdan merhaba bugün Python’ın flask adlı web kütüphanesi ile nasıl basit bir web servisi ayağa kaldırırız onu öğreneceğiz.

İlk olarak neden böyle bir tutorial yapma gereği duyduğumdan bahsedeyim.Bu yazıyı yazmamdaki ana sebep Makine öğrenmesi dersinde öğrendiğimiz algoritmaları ,modelleri nasıl bir servis aracılığıyla başkalarıyla paylaşabiliriz bunu öğrenmek için oluşturdum.Bu yüzden flask ile basit bir servis geliştirerek dönem projesi öncesi flask ile ellerimi kirletmek istedim.

Şimdi tutorial’a geçmeden önce bilgisayarınızda python’un kurulu oldugundan emin olmamız gerekiyor.Bunu test etmek için Komut satırından python — version ile makinenizdeki python versiyonunu görebilmeniz gerekiyor.Aksi halde Buradan python’u bilgisayarınıza indirebilir ve kurulumu yapabilirsiniz.

Şimdi ise projemizde kullanacağımız bağımlılıkları kurmamız gerekiyor.Bunun için javascript’deki package.json benzeri bir dosyayı python için generate etmemiz gerekli.Bunun için pipenv’i(npm ‘in dengi) makinemize kurmamız gerekli.

Bu komutu çalıştırarak pipenvi kurabiliriz.

NOT: Arkadaşlar bazı bilgisayarlarda SSL ile ilgili bir problemden dolayı aşağıdaki resimdeki hatayı alabilirsiniz.Bunu çözmek için Windows için vereceğim linkten OpenSSL’i kurmamız gerekiyor.Linux ve Mac için ise vereceğim terminal komutlarını kullanıp pipenv’i kurmaya çalışın.Herhangi bir problem olmadan pipenv’i kurabiliyorsanız bu adımı geçebilirsiniz.

Windows için OpenSSL’i kurmak için buraya gidip sisteminize göre 64 veya 32 bit OpenSSL kurmalısınız.Büyük boyuttaki (~43mb) EXE dosyasını indirip kurulumu tamamlayın.
Linux için terminali açıp 1.sudo apt update 2. sudo apt-get install openssl komutlarını çalıştırarak OpenSSL’i makinanıza kurabilirsiniz.

pipenv kurulduktan sonra birtane Pipfile generate etmemiz gerekli bunun için ise terminalden pipenv shell komutunu çalıştırıp Pipfile dosyasını oluşturmasını bekliyoruz.Evet bu işlem de bittiyse uygulamamız için gereken paketleri kurabiliriz.

Resimdeki gibi gereken bağımlılıkları kuralım

Ardından ana dizinde app.py adlı bir python dosyası oluşturarak kodlarımızı yazmaya başlayabiliriz.app.py adlı dosya içerisine aşağıdaki resimdeki kodları yazalım ve ardından conslole ekranında python app.py komutunu çalıştıralım

Ardından console’daki url’i açarak test edelim.Not Found hatası alabilirsiniz çünkü henuz route’ları oluşturmadık.Ama serverımız consoleda görüldüğü gibi ayakta.

Yukarıdaki resimde neler yaptığımızdan bahsedeyim.İlk 4 satırda kurduğumuz paketleri import ettik. Ardından temel veritabani ve initialize işlemlerini yaptık.Ve en son serverımızı ayağa kaldırdık.

Şimdi geldik ToDo modelimizi oluşturmaya.Modelimiz içerisinde bir ToDo’nun özelliklerini tanımlayıp tiplerini belirleyeceğiz ardından ise constructor içerisinde bu özellikleri set edeceğiz.

NOT: Arkadaşlar VSCode ile bu tutoriali gerçekleştircekseniz default linter db adlı değişken için bazı hatalar gösterecektir.Bunları çözmek için CTRL + SHIFT + P ile Komut paletini açıp Select Linter dedikten sonra flake8 adlı linter’ı seçmemiz gerekli ardından bu hatalar gidecektir.

Şimdi ise veritabanımız için Schema oluşturup bunları initialize edelim.Aşağıdaki resimdeki gibi kodlarımızı yazalım.

Resimdeki gibi ToDo modelinin altına ToDoSchema ve hemen altındaki iki değişkeni tanımlayalım.Veritabanı query’leri yazarken bu iki değişkeni kullanacağız

Şimdi Temel olarak iskeletimizi oluşturduk.Sıra geldi route’larımızı oluşturmaya. İlk olarak Todo eklemek için bir route oluşturacağız.Resimdeki gibi create_todo adlı bir route oluşturacağız.Ama öncesinde veritabanını generate etmemiz gerekiyor.Projemiz üzerinde yeni bir console ekranı açıp python komutunu çalıştıralım.Shell ekranına girdikten sonra from app import db komutunu çalıştıralım hemen ardından db.create_all() komutunu çalıştırdıktan sonra exit yapabiliriz.Fark edeceğiniz üzere db.sqlite adlı dosya kök dizinimizde belirdi.

Resimdeki gibi routemuzu yazdıktan sonra postman üzerinden test edelim.http://localhost:5000/todo adresine POST isteği atacağız

Postman içerisinde aşağıdaki resimdeki gibi bir yapı oluşturalım

Gördüğümüz gibi ilk todo’muzu oluşturduk.

Şimdi ise tüm todoları listeleyen fonksiyonumuzu yazalım.Ekleme işlemindeki route yapısına benzer olucak fakat method olarak GET methodunu belirteceğiz.

Sırada id’ye göre todo getirme işlemini yapacağız.Bu route sayesinde url’den gelen id parametresi ile istediğimiz todo’ya ulaşabileceğiz.

Bu işlemi de tamamladıktan sonra sadece güncelleme ve silme işlemleri kalıyor.İlk olarak güncelleme işlemini yapalım çünkü yapı olarak neredeyse todo oluşturma işlemine çok benziyor.

Ve geldik son işlemimize.Son olarak Delete yani silme işlemini yapacağız.Aşağıdaki resimde olduğu gibi kodlarınızı yazın ve ilgili id’nin olduğu adrese DELETE metoduyla istek atın silme işlemi başarılı olarak gerçekleşecektir.

Evet gördüğünüz gibi isteği attık ilgili id’ye sahip olan todo silindi.Tekrar tüm todoların listelendiği endpoint’e istek atarsak sadece bir tane todo listelenecektir.

Evet arkadaşlar bu yazımın da sonuna geldim umarım sizler için faydalı olur çünkü benim için çok faydalı oldu.Yazım hataları,mantık hataları olabilir geri dönüşleriniz benim için önemli.Bir faydası olduysa ne mutlu.Sonraki yazılarımda görüşmek üzere esen kalın.

Kaynak Kodlar: https://github.com/toltarisa/FlaskRestAPI

İsa Toltar

Written by

Cbü Yazılım Mühendisliği oğrencisi.Bilgiye aç bir insan.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade