28 Ağustos 2013 Çarşamba

Restful(REpresentational State Transfer) Giriş

Restful (temsili durum transferi) web hizmetleri ve web apiler için standart bir mimari tasarımdır. Kurallar bütünü gibi düşünülebilir.Amacı istemci sunucu arasındaki alışverişi HTTP üzerinden sağlamak.

Rest sistemindeki özellikler 6 bölümde incelenir.

1. istemci-sunucu mimarisi: İstemcinin sunucu tarafındaki veri kaynağı hakkında hiç birşey bilmemesi, Server'ın da doğru istekler geldiği sürece doğru yanıtı vermesidir.

2.Stateless:  Sunucu kısmında bir durumun tutulmadığını anlatır. İstemci tarafından yapılan sorgular sunucunun cevap verebilmesi için gerekli tüm bilgiyi taşır.

3.Cacheable: Http yanıtları önbelleklenebilir olabilir Bu nedenle sunucu, yanıtlarının bu özelliğe sahip olup olmadığını belirtmelidir.

4.Uniform İnterface: Bir istemci ve sunucu arasındaki iletişim yöntemi tek tip olmalıdır. Böylece her parça bağımsız şekilde değişebilir.

5Layered System: Burada kast edilen aslında istemcinin son sunucuya mı yoksa bir aracı sunucuya mı bağlandığını bilmiyor olması, yani her katman aslında tek bir katmanı biliyor.

6. Code on Daemon: Sunucu bazen istemci tarafına çalıştırılabilir kod veya komut dosyaları sağlayabilir.

Rest mimarisi http protokolüne uygun tasarlanmıştır. Http methodları ve anlamları aşağıdaki tabloda anlatılmış.


Birdahaki yazımda restful özelliği olan bir microframework(Flask) ile web api örneği yazacağım. 

Görüşmek üzere...

22 Ağustos 2013 Perşembe

Python'da Sınıflar ve Miras Alma

 Nesne tabanlı programlama denildiğinde akla gelen ilk şey sınıflardır. Sınıf dediğimiz kavram fonksiyonlara benzer. Fonksiyonlarda nasıl veri tipleri ve değişkenleri tekrar kullanmak için bir yerde toplayabiliyorsak, yazdığımız sınıflarda da nesnenin özelliklerini toplayabiliyoruz.

Sınıflarla ilgili birkaç kavramdan bahsedeyim.

-Sınıf Değişkeni:  Bir sınıfın tüm örnekleri tarafından paylaşılan değişkendir. Sınıf değişkenleri sınıf içinde tanımlanır fakat dışında sınıf metodudur.

-Fonksiyonu Aşırı Yükleme: Belirli bir işleve birden fazla davranış atamak.

-Operatör aşırı yükleme: Belirli bir operatör için birden fazla fonksiyon atamak.

-Miras Alma: Bir sınıftan türetilen diğer sınıflar için, o sınıfın özelliklerinin devri anlamındadır. 

Sınıf Oluşturma:

"class className: " şeklinde oluşturulur. Aşağıdaki kod parçasını deneme.py dosyasına yazalım.


class Employee: 
    empCount = 0
     
    def __init__(self, name, salary): 
       self.name = name  
       self.salary = salary 
       Employee.empCount += 1 
    def displayCount(self): 
       print "Total Employee %d" % Employee.empCount  
    def displayEmployee(self): 
       print "Name : ", self.name, ",Salary: ", self.salary

nesnelerini oluştururken Python'u çalıştırıp önce "from deneme import Employee" diyerek sınıftaki özellikleri kullanılabilir hale getiriyoruz.

emp1 = Employee("aybuke", "5000")

diyerek de nesnemizi oluşturabiliriz.

Bazı niteliklere erişmek için de aşağıdaki fonksiyonlar kulanılanılabilir:
- getattr(obj, name, [default]): nesne niteliğine erişmek için.
-hasattr(obj, name): niteliğin olup olmadığını kontrol etmek için.
-setattr(obj, name, value): nitelik ayarlamak için. Yoksa niteliği oluşturacaktır.
-delattr(obj, name): niteliği silmek için.

Dahili Sınıf Özellikleri: 

Nokta operatörü ile sınıf özelliklerine rahatça erişilir.

__dict__ : İsimuzaylarının bulunduğu sözlük.

__doc__: sınıf belgeleri tanımlandıysa buradadır.

__name__: sınıf adını bulundurur.

__module__: sınıfın tanımladığı modül adı. Etkileşimli modda __main__'dir.

__bases__:  Temel sınıf listesinde oluşma sırasına göre temel sınıfları barındıran, bir olasılıkla boş taban sınıfları. 

Miras Alma:

önce miras alınacak sınıfımızı oluşturalım.

class Animal(object): 
''' Our animal object '''
     def __init__(self,name,animalType): 
        print "I am a ",animalType 
    def makeNoise(self,noise): 
        print noise def sleep(self): 
        print "zzzz" 
    def eat(self,food): 
        print "Eating ",food

daha sonra alt sınıfımızı yazalım.

class Tiger(Animal):
    def __init__(self, name):
        super(Tiger, self).__init__(name, Tiger)
        self.makenoise('roar')
    def stalk(self):
        print 'talking an antelope'
        self.eat('anthelope meat')
yukarıda kullandığımız  "super" methodunun işlevi de şu aslında:

class A(object):
    
     def __init__(self):
     print ('running A .__init__')

class B(A):
     
     def __init__(self):
     print('running B.__init__')
     A.__init__(self)
     #super(B,self).__init__()

Sonraki yazımda görüşmek üzere..

15 Ağustos 2013 Perşembe

Pythonda Listeler, Tüpler, Sözlükler

Listeler, birden fazla değerin tutulabildiği veri tipleridir . Listelere eleman eklenip çıkartılabilir. İndeksleme sıfırdan başlar. Tanımlarken köşeli parantez [] kullanılır.

Tüpler, listelere benzer ancak içindeki değerleri değiştiremeyiz.Tanımlarken () parantez kullanırız. Ancak parantez kullanmasak da birden fazla elemana sahip her yeni değişken, Python'da tüp olarak algılanır.

Sözlükler ise anahtar değer çiftlerinden oluşur. Süslü parantez {} ile tanımlanır.

Küçük örneklerle aralarındaki farkları daha iyi anlayalım.

>>> liste = ['ilkbahar','yaz','sonbahar','kis']
>>> liste
['ilkbahar', 'yaz', 'sonbahar', 'kis']

liste elemanlarına erişirken:
>>> liste[1]
'yaz'

>>> liste[2:4]
['sonbahar', 'kis']

>>> liste[-2]
'sonbahar'
---------------------------------------------------------------------------------------------

>>> tup = ('canakkale','18','mart','universitesi')
>>> tup
('canakkale', '18', 'mart', 'universitesi')

>>> tup2 = "gs","fb","bjk"
>>> tup2
('gs', 'fb', 'bjk')
>>> type(tup2)
<type 'tuple'>

>>> (tp1, tp2, tp3) = ("1","2","3")
>>> tp1
'1'

tüp içindeki elemanlara erişirken:
>>> tup[1]
'18'----------------------------------------------------------------------------------------------

>>> sozluk = {'adi': 'aybuke', 'soyadi': 'ozdemir'}
>>> print sozluk
{'soyadi': 'ozdemir', 'adi': 'aybuke'}

sözlükteki elemanlara erişirken:
>>> sozluk['adi']
'aybuke'
-----------------------------------------------------------------------------------------------
dir (liste) diyerek liste veri tipi üzerinde kullanabileceğimiz fonksiyonları listeleriz. Bu tüpler ve sözlükler için de geçerli.

>>> dir(liste)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']