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...
28 Ağustos 2013 Çarşamba
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.
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']
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']
Kaydol:
Kayıtlar (Atom)