Selam. Bu yazıda size Python frameworklerinden bir diğerini, falcon framework’ü tanıtacağım. Kendi sitesindeki hız testlerinde bir hayli iyi olduğu belirtilmekte. Özellikle PyPy3.5 için 126 kat hızlı olduğunu söylemiş
Öncelikle Falcon için bilgilere ulaşabileceğiniz iki adresi vereyim.
Resmi Site: https://falconframework.org/
Doküman Sitesi: https://falcon.readthedocs.io/en/stable/
Kısa Bilgi
Falcon, minimalist takılan, yüksek performanslı bi web framework. Özellikle RESTful servisler ve uygulama backendlerinı Python ile oluşturmak isteyenler için düşünülmüş.
Ayrıca falcon, herhangi bir WSGI containerı ile çalışabilecek kadar uysalmış. PEP-3333 ile geliştirilmiş. Söylemek gerekiyor PEP-3333, WSGI için bir standart.
Falcon kendi söylemiyle yalındır. Öyle herkesin kullanacağı bir şey değil. Genellikle HTTP APIlarına kendisini odaklamış durumda. Bu da şu anlama gelebilir. Kardeş sen burada built-in template engine, form helper ya da ORM bulamazsın.
Falcon olabildiğince yalın demiştim. Yani bağımlılık konusunda da öyle six ve mimeparse adında iki kütüphane haricinde bağımlılığı yok.
Kurulum
Kurulum basit şekilde gerçekleşiyor:
Kod:
$ pip install falcon
# Eğer yoksa gunicorn
$ pip install gunicorn
İlk Uygulamamız
Kod:
# -*- coding: utf-8 -*-
import falcon
import json
class OzluSozler:
def on_get(self, req, resp):
"""Bu metod özlü sözler döndürecek"""
sozler = [
{
'soz': 'Hayatta en hakiki mürşit ilimdir',
'soyleyen': 'Mustafa Kemal Atatürk'
},
{
'soz': 'Biz, oldukça ortalama bir yıldızın '
'ufak bir gezegenindeki gelişmiş sanat eseriyiz '
'Fakat evreni anlayabiliyoruz.'
'İşte bu bizi çok özel kılıyor',
'soyleyen': 'Stephen Hawking'
}
]
resp.body = json.dumps(sozler)
app = falcon.API()
app.add_route('/sozler', OzluSozler())
Ardından
Kod:
gunicorn main:app --reload
komutunu vererek çalıştırabiliriz. Burada main dosya adı, app ise uygulama içinde falcon’u kim çağırıyor ne çağırıyor ise o. Başlangıç için bu basit örnek yeterli gibi geliyor bana.
Biraz Daha Detay
Biraz daha detay verecek olursak istersek queryleri yakalayabiliriz. Yine aynı örnek üzerinden gideceğiz bu arada.
Kod:
class OzluSozler:
def on_get(self, req, resp):
"""Bu metod özlü sözler döndürecek"""
sozler = [
{
'soz': 'Hayatta en hakiki mürşit ilimdir',
'soyleyen': 'Mustafa Kemal Atatürk'
},
{
'soz': 'Biz, oldukça ortalama bir yıldızın '
'ufak bir gezegenindeki gelişmiş sanat eseriyiz '
'Fakat evreni anlayabiliyoruz.'
'İşte bu bizi çok özel kılıyor',
'soyleyen': 'Stephen Hawking'
}
]
api_version = req.get_param('v')
if api_version:
resp.body = json.dumps(sozler)
else:
hata = {'hata': 'Version bilgisi gereklidir'}
resp.status = "400"
resp.body = json.dumps(hata)
Yukarıdaki kodda eğer url
Kod:
localhost/sozler
şeklinde çağırılırsa hata oluşacaktır. Eğer ki query string türünden v verilirse hatasızca çalışacaktır. Hatta işi biraz daha ilerletip, belirli sözleri özellikle seçtirebiliriz. Bunun için q adında bir query daha tanımlayalım.
Kod:
api_version = req.get_param('v')
quote_no = req.get_param('q')
soz = sozler
if api_version:
try:
if quote_no:
soz = sozler[int(quote_no)]
resp.body = json.dumps(soz)
except:
hata = {'hata': 'Böyle bir söz bulunamadı'}
resp.status = "400"
resp.body = json.dumps(hata)
else:
hata = {'hata': 'Version bilgisi gereklidir'}
resp.status = "400"
resp.body = json.dumps(hata)
Yukarıdaki gibi olacaktır. Böyle içe doğru uzanan if kullanımı hoş değil ancak bu yazıda mükemmel kullanıma da gerek yok. Bu arada on_get metodunu kullanarak bu API endpoindinin sadece GET isteklerinde kullanılabilir olduğunu belirttik.
Şu an için bu kadar. Falcon sadece bu kadar değil. Diğer konuları en başta verdiğim konudan alabilirsiniz