Ali GÖREN Açık Kaynak, JavaScript, Python, .NET RSS

Falcon Framework

Etiketler: programming python api falcon

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ş :) /images/posts/python.png

Ö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:

$ pip install falcon

# Eğer yoksa gunicorn

$ pip install gunicorn

İlk Uygulamamız

# -*- 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ş maymun türleriyiz. '
            '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 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.

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ş maymun türleriyiz. '
            '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 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.

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 :)

My name is Yoda

Who Am I

24 Level insanım. Bana aşağıdan ulaşabilirsiniz.

Yorumlar