Uygulama geliştirirken, çoğu zaman bir web-servise ihtiyaç duyarız. Uygulamamızı tam anlamıyla test edebilmek için bir web-servisi ve onu çalıştıran bir sunucuyu ayağa kaldırmak gerekir. Geliştirme ortamında, API’ler üzerinde yaptığımız değişiklikleri hızlıca denemek için, web-servisin de hızlıca geliştirilmesine ve hazır hale getirilmesine ihtiyaç vardır. Ancak genellikle, basit bir işlev için bile, saatlerce dokümantasyon, konfigürasyon ve geliştirme gerekir.
Batteries-included
Tam da bu ihtiyaçlara cevap veren, Python’da geliştirilmiş, tek dosyalık bir web framework’ü mevcut. Bottle, WSGL üzerine, geliştirilmiş hafif ve çevik tek-dosyalık bir web framework’ü. Tüm ihtiyaçlara cevap vermese de, geliştirme ortamında ihtiyaç duyacağınız hızı size sağlıyor. Diğer framework’lerden en büyük farkı, içerisinde web-tabanlı geliştirme için, default konfigürasyonla size sunulmuş birçok yapı-taşı olması. Dilerseniz, bu yapı-taşlarını isteklerinize göre özelleştirmeniz de mümkün.
Bottle’ın çevikliğini göstermek için, aşağıda sadece birkaç satır kodla geliştirilmiş, basit bir API örneğine bakalım;
[code language=”python”]
import bottle
from bottle import route, run, request
@route(‘/’, method=’GET’)
def homepage():
return ‘Hello world!’
@route(‘/events/:id’, method=’GET’)
def get_event(id):
return dict(name = ‘Event ‘ + str(id))
@route(‘/result’, method=’POST’)
def result_submit():
result = request.POST.get(‘result’, ”).strip()
print(result)
# write result to file
fileName = "Result.json"
f = open(fileName + ".json", "w")
f.write(result)
return {‘success’: True}
bottle.debug(True)
run()
[/code]
İlk API, basit bir string döndürüyor, ikinci API ise, bir Python dictionary nesnesini, bu da içsel olarak Bottle tarafından JSON’a çevriliyor, üçüncü API ise, HTTP Post ile /result pathinden kendisine gönderilmiş olan, isteği dosyaya kaydediyor. Son satırdaki, run() metodu da, Bottle’ın içerisinde hazır gelen web-sunucusunu ayağa kaldırıyor. Böylece bu kodu çalıştırmak için saatlerce web sunucu konfigürasyonu yapmanıza gerek kalmıyor.
Yukarıdaki kodu webservice.py dosyasına kaydedersek; tek yapmamız gereken.
[code language=”bash”] python webservice.py [/code]
http://localhost/ tan webservisinizi kullanmaya başlayabilirsiniz.
Biraz hızlandıralım
Bottle’ın içerisindeki default sunucu, geliştirme amaçlı ve tek-thread çalışan bir sunucu olduğundan, ihtiyaçlarınız için yavaş gelebilir. Hızlandırmak isterseniz yapmanız gereken değişiklik çok az;
[code language=”python”]
import bottle
from bottle import route, run, PasteServer
//…
run(server=PasteServer)
[/code]
Daha başka sunucuları da bu şekilde kullanabilirsiniz. PasteServer için python-paste ‘in yüklü olması gerekiyor.