Python ve Flask kullanarak Web API geliştirme
Koray Barkin
Posted on October 9, 2020
Başlıklar
API Nedir?
API yani Application Programming Interface’in Türkçe karşılığı Uygulama Geliştirme Ara yüzü anlamına gelmektedir. Kişinin elindeki verileri dış dünyaya açarak diğer uygulama ve platformların kullanımına belli kurallar ve tanımlamalar çerçevesinde sunduğu ara yüzdür.
Web API Nedir?
Birden fazla end user’ın bilgisayarlar, web tarayıcıları, akıllı telefonlar, tabletler vs. aracılığı HTTP protokolleri üzerinden haberleşelebilen bir servis oluşturmak için kullanılan bir framework olarak çalışmaktadır.
HTTP’nin tüm özelliklerini (URI, Request/Response headers, caching yani önbelleğe alma, versiyonlama, çeşitli içerik formatları gibi özellikler) kullanabilen, HTTP üzerinde kaynak odaklı servisler oluşturmak istediğinizde Web API kullanmanız daha sağlıklıdır.
Kurulum
Öncelikle Python’da oldukça popüler olan pip3 paket yöneticisini kuralım. Eğer pip3 yüklüyse bu adımı geçebilirsiniz.
sudo apt-get install python3-pip
Şimdi ise pip ile Flask kurmaya hazırız.
pip install flask
Kurulumumuzu tamamladık, şimdi bu dökümanda ne yapacağımızdan kısaca bir bahsedelim.
Web API Geliştirme
Her siteye girdiğinizde base URL dediğimiz ana sayfa bulunmaktadır. Sizin yaptığınız tercihler ile farklı konumlara request atılır ve bu base URL’in sonuna bir path eklenir.
Base URL:
dev.to
Örneğin, dev.to sitesine girdiğinizde ana sayfaya yönlendirilirsiniz. Fakat benim profilime girmek için adıma tıkladığınızda URL’nin sonuna aşağıdaki path’in eklendiğini görebilirsiniz.
/koraybarkin
Bu path kendi başına hiçbir işe yaramamaktadır, fakat base URL’imiz ile birleştiğinde dev.to sitesinde koraybarkin kullanıcısının profiline yönlendirmektedir.
https://dev.to/koraybarkin
Şimdi başka bir örnekten daha detaylı inceleyelim.
http://chroniclingamerica.loc.gov/search/pages/results/
Yukarıdaki URL’nin sonuna bir path eklenmiş ve bir sorgunun cevabı yansıtılmış. Şimdi ise parametre göndermenin ne işe yaradığını öğrenelim. Bu sitedeki aramamızın sonucunu parametre göndererek manipüle edebiliriz.
http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
Yukarıda görmüş olduğunuz gibi “?” işareti her bir query parametresinin başında yer yer almaktadır. Her bir query, & işareti ile birbirinden ayrılmaktadır. Yukarıdaki format=json query’si sayfadaki veriyi bize JSON halinde göstermesi için bir sorgudur. İkinci olarak da proxtext=fire sorgusu o sayfada yaptığımız aramayı spefisikleştirmektedir.
Şimdi bu terminolojileri anladığımıza göre Flask ile basit bir API yapalım.
İlk önce bir klasör açalım ve adına projeler diyelim. Daha sonra bu projeler klasörünün içerisine api adında bir klasör daha açalım ve bu api klasörünün içerisine de bir Python dosyası açalım (.py uzantılı) ve içerisine aşağıdaki kodu yapıştıralım.
import flask
app = flask.Flask(__name__)
app.config["DEBUG"] = False
@app.route('/', methods=['GET'])
def home():
return "<h1>dev.to/koraybarkin Flask ile Web API geliştirme</h1><p>Tebrikler ilk Web API'ınızı başarıyla geliştirdiniz!</p>"
app.run()
Daha sonra yaptığımız değişiklikleri kaydedip çalıştıralım. Her şey düzgün gittiyse aşağıdaki gibi bir sonuç almalısınız.
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Şimdi çıktımızda yazan http://127.0.0.1:5000/ adresine gittiğimizde aşağıdaki gibi bir ekrana ulaşıyor olmalısınız.
Şimdi ise bu yarattığımız basit Web API’ına veri gönderelim. Aşağıdaki kodu python dosyamıza yapıştıralım ve değişiklikleri kaydedelim. Daha sonra tekrar çalıştırdığımızda ana sayfamızdaki yazının hala aynı şekilde kaldığını görebiliriz. Peki bu eklediğimiz books array’indeki data nereye gitti? Kodu dikkatlice incelerseniz giriş ekranına bir /api/v1/resources/books/all path’ine jsonify(books) fonksiyonunu gönderdiğimizi görebilirsiniz.
import flask
from flask import request, jsonify
app = flask.Flask(__name__)
app.config["DEBUG"] = False
# Create some test data for our catalog in the form of a list of dictionaries.
books = [
{'id': 0,
'title': 'A Fire Upon the Deep',
'author': 'Vernor Vinge',
'first_sentence': 'The coldsleep itself was dreamless.',
'year_published': '1992'},
{'id': 1,
'title': 'The Ones Who Walk Away From Omelas',
'author': 'Ursula K. Le Guin',
'first_sentence': 'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.',
'published': '1973'},
{'id': 2,
'title': 'Dhalgren',
'author': 'Samuel R. Delany',
'first_sentence': 'to wound the autumnal city.',
'published': '1975'}
]
@app.route('/', methods=['GET'])
def home():
return '''<h1>dev.to/koraybarkin Flask ile Web API geliştirme</h1><p>Tebrikler ilk Web API'ınızı başarıyla geliştirdiniz!</p>'''
# A route to return all of the available entries in our catalog.
@app.route('/api/v1/resources/books/all', methods=['GET'])
def api_all():
return jsonify(books)
app.run()
Şimdi ise aşağıdaki path’i yazıp sonuca bakalım.
http://127.0.0.1:5000/api/v1/resources/books/all
Books array’indeki tüm veriyi alıp, jsonify() fonksiyonu ile json haline getirdik ve ekranımıza yansıttık. İşte statik bir şekilde veriyi gönderme, API oluşturma bu kadar basit!
Posted on October 9, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.