Arayüz ve API kodunuzu Spyne ile Birleştirin



Benzer belgeler
Mobil Cihazlardan Web Servis Sunumu

PHP 1. Hafta 1. Sunum

FIRAT ÜNİVERSİTESİ BİLGİSAYAR MÜH.

TÜRKİYE ELEKTRONİK FON ALIM SATIM PLATFORMU WEB SERVİS İŞLEMLERİ

JSON Korsanlığı. Mesut Timur, Şubat 2010, WGT E-Dergi 4. Sayı

PAKET TRANSFER SİSTEMİ

Bir port aynı anda bir process tarafından dinlenebilir. Fakat bir process birden fazla portu dinleyebilir.

Öğr. Gör. Serkan AKSU 1

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

V-Count API v İnsan Sayma sonuçları için istekler adresine gönderilecektir.

Google Search API ile ajax arama

PAKET TRANSFER SİSTEMİ

BIL411 - BİLGİSAYAR AĞLARI LABORATUVARI

Medula Eczane Stok Bilgileri Web Servisleri Kullanım Kılavuzu

İNTERNET PROGRAMCILIĞI DERSİ

VIDEOCELL API. Versiyon 1.0.0

Basit bir web uygulaması

Üst Düzey Programlama

V-Count API v3.6 İçindekiler

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Zope Uygulama Sunucusu

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

2 Kullanıcı Yönetimi ve Yetkilendirme Tüm kullanıcıların Kullanıcı Adı ve Parola bilgisi Sağlık.Net sisteminde kullandığı veriler olmalıdır.

ÇÖZÜM BİLGİSAYAR KOLAY RANDEVU RANDEVU WEB SERVİSLERİ YAZILIM FİRMALARI ENTEGRASYON KILAVUZU Sürüm: 1.0

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

ANKARA ÜNİVERSİTESİ ELMADAĞ MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI PROGRAMI DERS İÇERİKLERİ

PAKET TRANSFER SİSTEMİ

Oracle da kullanılan veri tipleri:


İnternet Programcılığı

Semantik Ağ ve Üst Veri Sistemleri İçin Yeni Nesil Veri Tabanı Yönetim Modeli: NoSQL. R. Orçun Madran Atılım Üniversitesi.

MOBİL UYGULAMA GELİŞTİRME

Bütün XML dökümanlarının bir kök elemanı olmalıdır. Diğer bütün elemanlar kök elemanı tarafından kapsanır.

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

C# ile e-posta Göndermek

COĞRAFİ BİLGİ SİSTEMLERİ ArcGIS SERVER A GİRİŞ EĞİTİMİ

GELİR İDARESİ BAŞKANLIĞI Uygulama ve Veri Yönetimi Daire Başkanlığı E-Fatura Uygulaması (Yazılım Standartları ve Nesne Yapısı) Ocak 2010 Versiyon :

Sunucu Taraflı JavaScript ile Gerçek Zamanlı Web Uygulamaları Geliştirme

COĞRAFİ BİLGİ SİSTEMLERİ SERVER MİMARİSİ SERVER UYGULAMA GELİŞTİRME EĞİTİMİ

SMS API. KobiKom Telekomunikasyon A.Ş. SMS API Kullanım Bilgilerini İçerir. Tel: Fax:

Medula Eczane E-Reçete Web Servislerinin Kullanım Kılavuzu (Test amaçlıdır, ödemeye esas teşkil etmeyecektir)

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

1. MİCROSOFT SQL SERVER 2014'E GİRİŞ

Sunucularımızı Gözleyelim. Oğuz oguzyarimtepe ~ gmail.com

Exchange Server 2010 Sertifika Oluşturma

solid; BORDER-LEFT: #1F9FFF 0px solid; BORDER-RIGHT: #1F9FFF 0px solid; BORDER-TOP: #1F9FFF 0px solid; COLOR: #1F9FFF; FONT-FAMILY: Trebuschet MS;

Mobil Uygulama Geliştirme Yaklaşımları, Web Tabanlı Mobil Uygulama Çatıları. Burak USGURLU

Soket, bir sunucu programı ve bir veya birden çok istemci programı arasında çift yönlü iletişim kuran bir yazılım uç noktasıdır.

Veri Tabanı-I 5.Hafta

Veritabanı. Ders 2 VERİTABANI

Html temelleri. Ders 4

TC KİMLİK NO SMS GÖNDERİM SOAP API

VERİ TABANI ve YÖNETİMİ

SOAP API. Mobildev Toplu Mesajlaşma API

Bölüm 10: PHP ile Veritabanı Uygulamaları

Medula Eczane E-Reçete Web Servislerinin Kullanım Kılavuzu (Test amaçlıdır, ödemeye esas teşkil etmeyecektir)

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

Değerlendirme Soruları 140. Şerit Kullanımı 124 Şerit Sekmeleri 124 Şeridi Gizleme 125 Eklentiler 125

Rest Nedir? Örnek Restful API. Rest Nedir? Deniz Bahadr GÜR, Mehmet Onur YALAZI. Özgür Web Teknolojileri Günleri, 2010

API geliştiricileri. Web server ile yapılan entegrasyonun neticeleri. API Dokumantasyonu

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

«BM364» Veritabanı Uygulamaları

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

ÖRÜN (WEB) GÜVENLİĞİ. Hazırlayan: Arda Balkanay

Ç NDEK LER G R fi 1 Bafllamadan Önce 1 Kitab Kimler Okumal? 1 Kitap çerisindeki Örnekler 2 Örneklerin Kullan m 3 Çekinmeden Yaz n 7

NoSql ve MongoDB. Saygın Topatan

Akıllı Kontrolde Teknoloji Devi SCADA YAZILIMI. Supervisory Control and Data Acquisition. ViewPLUS. Açık, Esnek, Ölçeklenebilir.

MOBILEPAX SOAP PRODUCT API KULLANIM ŞEKLİ

Veri Tabanı-I 1.Hafta


VISILABS SEGMENT KURULUM KILAVUZU

HTTP. (Hyper Text Transfer Protocol)

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

MOKA ÖDEME SERVİSİ BAYİ İŞLEMLERİ ENTEGRASYON DOKÜMANI

Windows Live ID ve parolanızı giriniz.

Sol tarafta yer alan Click here to activate your account linkini seçiniz.

e-logo e-fatura Özel Entegratör Sistemi

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

08217 Internet Programcılığı I Internet Programming I

1.1 Web Kavramlar URL terimini tanımlayınız ve anlayınız.

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

MİLLİ SAVUNMA ÜNİVERSİTESİ KARA HARP OKULU DEKANLIĞI BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DERS TANITIM BİLGİLERİ

BLM401 Mobil Cihazlar için ANDROID İşletim Sistemi. SQLite Veritabanı. BLM401 Dr.Refik SAMET

Bilgisayar Programcılığı Uzaktan Eğitim Programı. e-bilg 121 AĞ TEKNOLOJİLERİNİN TEMELLERİ Öğr. Gör. Bekir Güler

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

UBL UBL Türkiye Özelleştirmesi TEMEL BİLGİLER

GELİR İDARESİ BAŞKANLIĞI Uygulama ve Veri Yönetimi Daire Başkanlığı E-Fatura Uygulaması (Yazılım Standartları ve Nesne Yapısı) Ocak 2010 Versiyon :

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Kurulum 14 FTP ye Bağlanmak ve Dosyaları Atmak 14 Veritabanı Oluşturulması ve Bağlanıp Kurulumun Tamamlanması 15

BM 402 Bilgisayar Ağları (Computer Networks)

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

Veri Tabanı-I 1.Hafta

JETSMS XML Mesaj İşlemleri Yardım Dokümanı Tarih Sürüm XML ile Mesaj İşlemleri

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

İNTERNET PROGRAMLAMA II. Tanımlar

Transkript:

Arayüz ve API kodunuzu Spyne ile Birleştirin Burak Arslan burak@arskom.com.tr Özgür Web Teknolojileri Günleri 19 Ekim 2012 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 1

Konumuz Spyne ı Kullanmak Hello World Çoklu Protokol Doğrulama SQLAlchemy entegrasyonu İkincil Fonksiyonlar Katkıda bulunmak Protokol yazmak Taşıyıcı yazmak İkincil işleyici yazmak XML Ekosisteminden neler öğrenebiliriz? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 2

Spyne Nedir? Spyne, birden fazla protokol ve/veya taşıyıcı kullanarak online hizmet sunmanızı kolaylaştırır. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 3

Spyne Nedir? Aynı zamanda uygulamanızın iyi tanımlanmış bir online API sunmasına yardımcı olur. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 4

Nereden esti? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 5

Nereden Esti? Eskiden; Sadece tarayıcı sandbox ına HTML/CSS/JS üretmek yeterliydi. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 6

Nereden Esti? Eskiden; Sadece tarayıcı sandbox ına HTML/CSS/JS üretmek yeterliydi. İstemci çok beceriksiz olduğu için grafik arayüz çizimi de sunucuda yapılıyordu. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 6

Nereden Esti? Artık; Tarayıcı dışındaki uygulama sandbox larına ve sunulan hizmeti kullanan başka uygulamalara da veri üretiliyor. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 7

Nereden Esti? Artık; Tarayıcı dışındaki uygulama sandbox larına ve sunulan hizmeti kullanan başka uygulamalara da veri üretiliyor. İstemciler çok daha becerikli, o yüzden sunucunun üzerindeki bütün çizim yükü istemciye yüklenebiliyor. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 7

Nasıl başladı? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 8

Nasıl başladı? Önce protokol araştırmasına giriştim: XML / SOAP / WSDL XML / XML-RPC JSON / JSON-RPC Corba Pickle REST / HTTP Vb c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 9

Neden SOAP? XML ve XML Schema standartlarına dayanıyor. XML Schema standardında: Teorik temelleri olan veri yapıları kadar (örn. 8/16/32/64 bit tamsayı tipleri) pratikte işe yarayan veri yapıları (örn. tarih/saat) da tanımlanmış. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 10

Neden SOAP? XML ve XML Schema standartlarına dayanıyor. XML Schema standardında: Teorik temelleri olan veri yapıları kadar (örn. 8/16/32/64 bit tamsayı tipleri) pratikte işe yarayan veri yapıları (örn. tarih/saat) da tanımlanmış. XML Standardının ise; Neredeyse her platformda desteği var. Doğrulayıcısı var (lxml). Sorgulama dili var (XPath). Gizlilik (confidentiality) ve bütünlük (integrity) desteği var (PyXMLSec). c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 10

Neden SOAP? Soap, XML Schema standardına RPC, yönlendirme (routing) ve binary veri için iyileştirmeler (ve bir sürü başka özellik) ekliyor. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 11

Dezavantajları? Yavaş! Dokümanı hem işlemek yavaş hem de boyutu fazla. Soap standardının muğlak bıraktığı (dolayısıyla da uyumluluk sorunları çıkartan) bir çok nokta var. Soap kötü ününün bir kısmını da bu belgeye borçludur. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 12

Tamam, SOAP kullanmaya karar verdik... c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 13

Ama önce biraz terminoloji... c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 14

Terminoloji Taşıyıcı (Transport) Protokol Kullanıcı Kodu (User Code) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 15

TCP, UDP, vb. Taşıyıcı Protokol Application ServiceBase @rpc Dekoratörü Kullanıcı Kodu c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 16

Soaplib Rpclib Spyne 2009 Soaplib 0.8.1: 5000 İndirme Kasım 2010 1.0.0: 3000 İndirme Mart 2011 2.0.0-beta: 7000 İndirme Mart 2012 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 2.8.2-rc: 500 İndirme 29 Ekim 2012 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Soaplib Rpclib Spyne 2009 0.8.1: 5000 İndirme Kasım 2010 Soaplib 1.0.0: 3000 İndirme Mart 2011 2.0.0-beta: 7000 İndirme Mart 2012 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 2.8.2-rc: 500 İndirme 29 Ekim 2012 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Soaplib Rpclib Spyne 2009 0.8.1: 5000 İndirme Kasım 2010 1.0.0: 3000 İndirme Mart 2011 Soaplib 2.0.0-beta: 7000 İndirme Mart 2012 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 2.8.2-rc: 500 İndirme 29 Ekim 2012 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Soaplib Rpclib Spyne 2009 0.8.1: 5000 İndirme Kasım 2010 1.0.0: 3000 İndirme Mart 2011 2.0.0-beta: 7000 İndirme Mart 2012 Rpclib 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 2.8.2-rc: 500 İndirme 29 Ekim 2012 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Soaplib Rpclib Spyne 2009 0.8.1: 5000 İndirme Kasım 2010 1.0.0: 3000 İndirme Mart 2011 2.0.0-beta: 7000 İndirme Mart 2012 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 Spyne 2.8.2-rc: 500 İndirme 29 Ekim 2012 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Soaplib Rpclib Spyne 2009 0.8.1: 5000 İndirme Kasım 2010 1.0.0: 3000 İndirme Mart 2011 2.0.0-beta: 7000 İndirme Mart 2012 2.7.0-beta: 2000 İndirme youtube.com/watch?v=n4zdwlusbv0#t=21m58 g Explore GitHub Features Blog Sign in Eylül 2012 2.8.2-rc: 500 İndirme 29 Ekim 2012 Spyne 2.9.0: 2 senedir çıkan ilk kararlı sürüm! Star 125 Fork 71 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 17 Issues 20 Graphs

Şu an desteklenen Protokoller XML: SOAP 1.1 / XmlObject Json: JsonObject MsgPack: MessagePackObject, MessagePackRpc Html: HtmlMicroFormat(Ç), HtmlColumnTable(Ç), HtmlRowTable(Ç) Http: HttpRpc(G) Csv: Csv(Ç) baştan yazmak gerekli (G): Sadece giriş protokolü (Ç): Sadece çıkış protokolü c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 18

Şu an desteklenen Taşıyıcılar Http Client: urllib2, Twisted Http Server: WSGI, Twisted, Django, Pyramid Null Server: Test amaçlı çağrı arayüzü. ZeroMQ: REQ/REP Soket tipi. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 19

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 20

Tamam, biraz da kod görelim... c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 21

Aşağıdaki basit fonksiyona bakalım: from d a t e t i m e import d a t e t i m e d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 22

Şimdi bu fonksiyonu uzaktan çağrılabilir yapmak için; c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 23

Şimdi bu fonksiyonu uzaktan çağrılabilir yapmak için; 1) @rpc dekoratörü ile fonksiyonun girdi ve çıktı tiplerini belirliyoruz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 23

d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 24

from spyne. model. p r i m i t i v e import DateTime from spyne. d e c o r a t o r import s r p c d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 24

from spyne. model. p r i m i t i v e import DateTime from spyne. d e c o r a t o r import s r p c @srpc ( r e t u r n s=datetime ) d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 24

2) Bir ServiceBase altsınıfına koyuyoruz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 25

from spyne. model. p r i m i t i v e import DateTime from spyne. d e c o r a t o r import s r p c @srpc ( r e t u r n s=datetime ) d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 26

from spyne. model. p r i m i t i v e import DateTime from spyne. d e c o r a t o r import s r p c from spyne. s e r v i c e import S e r v i c e B a s e c l a s s DateTimeService ( S e r v i c e B a s e ) : @srpc ( r e t u r n s=datetime ) d e f g e t u t c t i m e ( ) : r e t u r n d a t e t i m e. utcnow ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 26

3) Daha sonra, bu hizmet tanımını kullanarak bir Application sınıfı oluşturuyoruz c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 27

[ DateTimeService ], c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 28

from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc h t t p r p c = A p p l i c a t i o n ( [ DateTimeService ], c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 28

from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc h t t p r p c = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 28

from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc h t t p r p c = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=httprpc ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 28

4) Son olarak, uygulamayı bir taşıyıcı ya bağlıyoruz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 29

from spyne. s e r v e r. wsgi import W s g i A p p l i c a t i o n a p p l i c a t i o n = W s g i A p p l i c a t i o n ( h t t p r p c ) Buradaki application nesnesi herhangi bir WSGI uyumlu HTTP sunucusuna verebileceğimiz standart bir WSGI uygulaması oldu. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 30

from spyne. s e r v e r. wsgi import W s g i A p p l i c a t i o n a p p l i c a t i o n = W s g i A p p l i c a t i o n ( h t t p r p c ) Buradaki application nesnesi herhangi bir WSGI uyumlu HTTP sunucusuna verebileceğimiz standart bir WSGI uygulaması oldu. $ c u r l h t t p : / / l o c a l h o s t :9910/ g e t u t c t i m e 2012 03 09T17 : 3 8 : 1 1. 9 9 7 7 8 4 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 30

Peki, ya biz bu fonksiyonu başka bir protokol kullanarak sunmak istersek? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 31

Misal: SOAP from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc from spyne. p r o t o c o l. soap import Soap11 soap = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=soap11 ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 32

Misal: SOAP $ c u r l h t t p : / / l o c a l h o s t :9910/ g e t u t c t i m e \ t i d y xml i n d e n t <? xml v e r s i o n= 1.0 e n c o d i n g= utf -8?> <s e n v : E n v e l o p e x m l n s :wsa=" http: // schemas. xmlsoap.org /ws /2003/03/ addressing " x m l n s : t n s=" spyne. examples. multiple_protocols " x m l n s : p l i n k=" http: // schemas. xmlsoap. org /ws /2003/05/ partner - link /" x m l n s : x o p=" http: // www.w3.org /2004/08/ xop / include " x m l n s : s e n c=" http: // schemas. xmlsoap.org /soap / encoding /" x m l n s : s 1 2 e n v=" http: // www.w3.org /2003/05/ soap - envelope /" x m l n s : s 1 2 e n c=" http: // www.w3.org /2003/05/ soap - encoding /" x m l n s : x s=" http: // www.w3.org /2001/ XMLSchema " x m l n s : w s d l=" http: // schemas. xmlsoap.org /wsdl /" x m l n s : x s i=" http: // www.w3.org /2001/ XMLSchema - instance " x m l n s : s e n v=" http: // schemas. xmlsoap.org /soap / envelope /" x m l n s : s o a p=" http: // schemas. xmlsoap.org /wsdl /soap /"> <senv:body> <t n s : g e t u t c t i m e R e s p o n s e> <t n s : g e t u t c t i m e R e s u l t> 2012 03 06 T17:43:30.894466 </ t n s : g e t u t c t i m e R e s u l t> </ t n s : g e t u t c t i m e R e s p o n s e> </ senv:body> </ s e n v : E n v e l o p e> c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 33

Veya, düz XML: from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc from spyne. p r o t o c o l. xml import XmlObject xml = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=xmlobject ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 34

Veya, düz XML: $ c u r l h t t p : / / l o c a l h o s t :9910/ g e t u t c t i m e \ t i d y xml i n d e n t <? xml v e r s i o n= 1.0 e ncoding= utf -8?> <n s 0 : g e t u t c t i m e R e s p o n s e x m l n s : n s 0="spyne.examples.multiple_protocols"> <n s 0 : g e t u t c t i m e R e s u l t> 2012 03 06 T17:49:08.922501 </ n s 0 : g e t u t c t i m e R e s u l t> </ n s 0 : g e t u t c t i m e R e s p o n s e> c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 35

Veya, HTML: from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc from spyne. p r o t o c o l. xml import HtmlMicroFormat html = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=htmlmicroformat ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 36

Veya, HTML: $ c u r l h t t p : / / l o c a l h o s t :9910/ g e t u t c t i m e \ t i d y xml i n d e n t <d i v c l a s s="get_utc_timeresponse"> <d i v c l a s s="get_utc_timeresult"> 2012 03 06T17 : 5 2 : 5 0. 2 3 4 2 4 6 </ d i v> </ d i v> c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 37

vesaire... c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 38

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 39

Giriş verisini deklaratif kısıtlarla sınırlamak da çok basit. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 40

Yani, bunu yapacağınıza: d e f get name of month ( month ) : A l d i g i 1 12 a r a s i n d a k i t a m s a y i y i ay i s m i n e d o n u s t u r u r. # g e l e n v e r i i n t o l m a y a b i l i r v a l u e = i n t ( month ) # g e l e n v e r i y u k a r i d a k i k i s i t l a r a u y m a y a b i l i r i f not (1 <= v a l u e <= 1 2 ) : r a i s e V a l u e E r r o r ( v a l u e ) r e t u r n d a t e t i m e (2000, month, 1 ). s t r f t i m e ( "%B" ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 41

Bu kadarı yeterli: c l a s s NameOfMonthService ( S e r v i c e B a s e ) : @srpc ( Integer ( ge=1, l e =12), r e t u r n s=unicode ) d e f get name of month ( month ) : r e t u r n d a t e t i m e (2000, month, 1 ). s t r f t i m e ( "%B" ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 42

Doğrulama özelliğini açmayı da unutmazsak; from spyne. a p p l i c a t i o n import A p p l i c a t i o n from spyne. p r o t o c o l. h t t p import HttpRpc r e s t = A p p l i c a t i o n ( [ NameOfMonthService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( v a l i d a t o r= soft ), o u t p r o t o c o l=httprpc ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 43

$ c u r l l o c a l h o s t :9912/ get name of month?month=3 March c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 44

$ c u r l l o c a l h o s t :9912/ get name of month?month=3 March $ c u r l D l o c a l h o s t :9912/ get name of month?month=13 HTTP/1.0 400 Bad Request Date : Sat, 10 Mar 2012 1 4 : 2 1 : 3 6 GMT S e r v e r : WSGIServer /0.1 Python / 2. 7. 2 Content Length : 63 Content Type : t e x t / p l a i n C l i e n t. V a l i d a t i o n E r r o r The s t r i n g 13 c o u l d not be v a l i d a t e d c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 44

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 45

Veritabanı ile çalışmak Python ve ilişkisel veritabanlarını birarada kullanacaksanız, SQLAlchemy kullanın! (Gerçekten, Spyne kullanıp kullanmamanızın bu ( ) sözle pek alakası yok.) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 46

Spyne & SQLAlchemy 1) Kendi veritabanı nesnenizi oluşturmanız lazım. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 47

Spyne & SQLAlchemy from spyne. model. complex import TTableModel MyTableModel = TTableModel ( ) veya hazır metadatanız varsa; MyTableModel = TTableModel ( metadata ) veya hazır sınıfınız varsa; MyTableModel. A t t r i b u t e s. s q l a m e t a d a t a = \ metadata c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 48

Spyne & SQLAlchemy 2) Bu nesneyi kullanarak tablolarınızı oluşturmanız lazım c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 49

Spyne & SQLAlchemy c l a s s User ( MyTableModel ) : t a b l e n a m e = "ornek_user" i d = I n t e g e r 6 4 ( p r i m a r y k e y=true ) i s i m = Unicode (64) soyad = Unicode (64) Burada; # SQAlchemy Tablo N e s n e s i User. A t t r i b u t e s. s q l a t a b l e # SQAlchemy Mapper N e s n e s i User. A t t r i b u t e s. s q l a m a p p e r c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 50

Spyne & SQLAlchemy Yani tabloyu yaratmak için: metadata. c r e a t e a l l ( ) veya MyTableModel. A t t r i b u t e s. s q l a m e t a d a t a. c r e a t e a l l ( ) veya User. A t t r i b u t e s. s q l a t a b l e. c r e a t e ( ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 51

Spyne & SQLAlchemy 3) Artık bu nesneyi kullanan hizmetler yazabilirsiniz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 52

Spyne ın SQLAlchemy Eklentileri Spyne ın karmaşık tanımlarını da veritabanına kolayca yazabilirsiniz c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 53

Spyne ın SQLAlchemy Eklentileri Şu iki nesne tanımına bakalım: c l a s s Perm ( MyTableModel ) : t a b l e n a m e = ornek_user_perm i d = I n t e g e r 3 2 ( p r i m a r y k e y=true ) app = Unicode (256) op = Unicode (256) c l a s s User ( MyTableModel ) : t a b l e n a m e = "ornek_user" i d = I n t e g e r 6 4 ( p r i m a r y k e y=true ) name = Unicode (128) perms = Array ( Perm ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 54

Buradaki Array yapısını tek bir kolondaki bir XML dokümanı olarak tutmak istersek: from spyne. model. complex import xml c l a s s User ( MyTableModel ) : t a b l e n a m e = "ornek_user" i d = I n t e g e r 6 4 ( p r i m a r y k e y=true ) name = Unicode (128) perms = Array ( Perm ). s t o r e a s ( xml ( no ns=true, r o o t t a g="p" ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 55

s e s s i o n. add ( User ( name="plq", perms =[Perm ( op= x, app= y ] ) ) INSERT INTO o r n e k u s e r ( name, perms ) VALUES ( plq, <p><perm ><op>x</op><app >y</app ></Perm > ) ; c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 56

Spyne ın SQLAlchemy Eklentileri Kendi tablosunda tutmak da isteyebiliriz: from spyne. model. complex import table c l a s s User ( MyTableModel ) : t a b l e n a m e = "ornek_user" i d = I n t e g e r 6 4 ( p r i m a r y k e y=true ) name = Unicode (128) perms = Array ( Perm ). s t o r e a s ( table ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 57

s e s s i o n. add ( User ( name="plq", perms =[Perm ( op= x, app= y ] ) ) INSERT INTO o r n e k u s e r ( name, perms ) VALUES ( plq ) ; INSERT INTO ornek perm ( op, app, o r n e k u s e r i d ) VALUES ( x, y, c u r r v a l ( ornek_user_id_seq ) ) ; c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 58

Servis örneği c l a s s UserManagerService ( S e r v i c e B a s e ) : @rpc ( User, r e t u r n s=i n t e g e r ) d e f a d d u s e r ( ctx, u s e r ) : c t x. udc. s e s s i o n. add ( u s e r ) c t x. udc. s e s s i o n. f l u s h ( ) r e t u r n u s e r. u s e r i d c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 59

Servis örneği Bu servisin kabul edeceği JSON dokümanı örneği: { User : { isim : Burak, soyad : Arslan, perms : [ { app : y, op : x }, { app : B, op : A } ], }} c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 60

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 61

İkincil Fonksiyonlar Spyne bağlamında; Bir çağrının cevabı istemciye döndürüldükten sonra çalıştırılan fonksiyonlara Auxiliary Method diyoruz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 62

Servis örneğini hatırlayalım c l a s s UserManagerService ( S e r v i c e B a s e ) : @rpc ( User, r e t u r n s=i n t e g e r ) d e f a d d u s e r ( ctx, u s e r ) : c t x. udc. s e s s i o n. add ( u s e r ) c t x. udc. s e s s i o n. f l u s h ( ) r e t u r n u s e r. u s e r i d c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 63

İkincil fonksiyon örneği from spyne. auxproc. t h r e a d import ThreadAuxProc c l a s s UserManagerAuxService ( S e r v i c e B a s e ) : auxproc = ThreadAuxProc ( ) @rpc ( User, r e t u r n s=i n t e g e r ) d e f a d d u s e r ( ctx, u s e r ) : m a i l g o n d e r ( "Patron! Bir kullanicimiz " "daha oldu!" ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 64

İkincil fonksiyonun kullanılması İkincil fonksiyon, birincil fonksiyon sorunsuz dönüş yaptıktan sonra arka planda çağrılır. A p p l i c a t i o n ( [ UserManagerService, UserManagerAuxService, ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=soap11 ( ), ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 65

İkincil fonksiyonlar ile ilgili son sözler Bir fonksiyon aksi belirtilmedikçe birincildir. Tam bir tane birincil fonksiyon ve sıfır veya daha fazla ikincil fonksiyon olabilir. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 66

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 67

Spyne ı kullanmayı az çok öğrendik. Peki Spyne a nasıl katkıda bulunabiliriz? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 68

Spyne a Nasıl Katkıda Bulunabilirsiniz? 1. Protokol yazarak 2. Taşıyıcı yazarak 3. İkincil işleyici yazarak 4. Belge / Tutorial yazarak, tercüme yaparak. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 69

Spyne ile kendi protokollerinizi yazmak da çok kolay. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 70

Spyne ile kendi protokollerinizi yazmak da çok kolay. kesin öyledir c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 70

Örneğin, baştaki tarih ve saat örneğinde dönüş verisini akrep ve yelkovanı olan bir saat üzerinde göstermeye çalışalım. (fazla detaya girmeden tabii ki) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 71

Bunun için ProtocolBase alt sınıfında serialize ve create out string fonksiyonlarını yazmamız lazım. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 72

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml d e f s e r i a l i z e ( s e l f, ctx, message ) : d e f c r e a t e o u t s t r i n g ( s e l f, ctx, c h a r s e t=none ) : c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml d e f s e r i a l i z e ( s e l f, ctx, message ) : d = c t x. o u t o b j e c t [ 0 ] # f o n k s i y o n d a n donen # d a t e t i m e n e s n e s i d e f c r e a t e o u t s t r i n g ( s e l f, ctx, c h a r s e t=none ) : c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml d e f s e r i a l i z e ( s e l f, ctx, message ) : d = c t x. o u t o b j e c t [ 0 ] # f o n k s i y o n d a n donen # d a t e t i m e n e s n e s i # ( detaya g i r m i y o r u z d e m i s t i k ) d e f c r e a t e o u t s t r i n g ( s e l f, ctx, c h a r s e t=none ) : c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml d e f s e r i a l i z e ( s e l f, ctx, message ) : d = c t x. o u t o b j e c t [ 0 ] # f o n k s i y o n d a n donen # d a t e t i m e n e s n e s i # ( detaya g i r m i y o r u z d e m i s t i k ) # c l o c k l x m l i n Element n e s n e s i o l a r a k t u t u l a n # b i r svg d o s y a s i c t x. out document = c l o c k d e f c r e a t e o u t s t r i n g ( s e l f, ctx, c h a r s e t=none ) : c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

from l x m l import e t r e e from spyne. p r o t o c o l import P r o t o c o l B a s e c l a s s SvgClock ( P r o t o c o l B a s e ) : mime type = image/ svg+xml d e f s e r i a l i z e ( s e l f, ctx, message ) : d = c t x. o u t o b j e c t [ 0 ] # f o n k s i y o n d a n donen # d a t e t i m e n e s n e s i # ( detaya g i r m i y o r u z d e m i s t i k ) # c l o c k l x m l i n Element n e s n e s i o l a r a k t u t u l a n # b i r svg d o s y a s i c t x. out document = c l o c k d e f c r e a t e o u t s t r i n g ( s e l f, ctx, c h a r s e t=none ) : c t x. o u t s t r i n g = [ e t r e e. t o s t r i n g ( c t x. out document ) ] c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 73

Bize özgü SVG protokolü: svg = A p p l i c a t i o n ( [ DateTimeService ], t n s= spyne.examples.multiprot, i n p r o t o c o l=httprpc ( ), o u t p r o t o c o l=svgclock ( ) ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 74

Bize özgü SVG protokolü: $ c u r l h t t p : / / l o c a l h o s t :9910/ g e t u t c t i m e \ > u t c t i m e. svg 2012-03-09 c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 75

Buraya kadar sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 76

Spyne da 10 çeşit taşıyıcı var: 1. İstemciler 10. Sunucular c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 77

İstemci taşıyıcısı Aşağıdaki gibi bir modül yazılması gerekli: c l a s s RemoteProcedure ( RemoteProcedureBase ) : d e f c a l l ( s e l f, args, kwargs ) : s e l f. c t x = s e l f. c o n t e x t s [ 0 ] s e l f. g e t o u t o b j e c t ( s e l f. ctx, args, kwargs ) s e l f. g e t o u t s t r i n g ( s e l f. c t x ) o u t s t r i n g =. j o i n ( s e l f. c t x. o u t s t r i n g ) # v e r i y i gonder # c e v a b i a l s e l f. c t x. i n s t r i n g = i n s t r i n g s e l f. g e t i n o b j e c t ( s e l f. c t x ) i f not ( s e l f. c t x. i n e r r o r i s None ) : r a i s e s e l f. c t x. i n e r r o r e l s e : r e t u r n s e l f. c t x. i n o b j e c t c l a s s BenimSuperIstemcim ( C l i e n t B a s e ) : d e f i n i t ( s e l f, u r l, app ) : C l i e n t B a s e. i n i t ( s e l f, u r l, app ) s e l f. s e r v i c e = S e r v i c e ( RemoteProcedure, u r l, app ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 78

İstemci taşıyıcısı bunu okumanız gerekmiyordu İstemci taşıyıcısı yazmak sunucu taşıyıcı yazmak ile kıyaslandığında çok daha basittir. Kaynak kod deposundaki örnekleri incelemek çok daha faydalı olur. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 79

Sunucu taşıyıcısı Sunucu taşıyıcıları için belirlenmiş bir api yok. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 80

Sunucu taşıyıcısı Sunucu taşıyıcıları için belirlenmiş bir api yok. Konu biraz karmaşık. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 80

Sunucu taşıyıcısı Yaptığı iş temelde şöyle: Giriş protokolüne istek bytestream ini gönderip istek nesnesini al. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 81

Sunucu taşıyıcısı Yaptığı iş temelde şöyle: Giriş protokolüne istek bytestream ini gönderip istek nesnesini al. Kullanıcı fonksiyonunu çalıştırıp dönen nesneyi al. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 81

Sunucu taşıyıcısı Yaptığı iş temelde şöyle: Giriş protokolüne istek bytestream ini gönderip istek nesnesini al. Kullanıcı fonksiyonunu çalıştırıp dönen nesneyi al. Bu nesneden çıkış protokolüne bytestream ürettirip bunu istemciye gönder. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 81

Sunucu taşıyıcısı Bu işi yapan bir taşıyıcı yazarken: (Eğer varsa) Sonsuz döngü çağrısının adının serve forever() olmasına, c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 82

Sunucu taşıyıcısı Bu işi yapan bir taşıyıcı yazarken: (Eğer varsa) Sonsuz döngü çağrısının adının serve forever() olmasına, Bütün concurrency yönetiminin burada yapılmasına, (Spyne kodunun geri kalanı reentrant olsa yeter.) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 82

Sunucu taşıyıcısı Bu işi yapan bir taşıyıcı yazarken: (Eğer varsa) Sonsuz döngü çağrısının adının serve forever() olmasına, Bütün concurrency yönetiminin burada yapılmasına, (Spyne kodunun geri kalanı reentrant olsa yeter.) Hangi isteğin arayüz dokümanı için, hangisinin RPC için olduğuna karar verilen kısmı unutmamaya c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 82

Sunucu taşıyıcısı Bu işi yapan bir taşıyıcı yazarken: (Eğer varsa) Sonsuz döngü çağrısının adının serve forever() olmasına, Bütün concurrency yönetiminin burada yapılmasına, (Spyne kodunun geri kalanı reentrant olsa yeter.) Hangi isteğin arayüz dokümanı için, hangisinin RPC için olduğuna karar verilen kısmı unutmamaya... dikkat ediyoruz. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 82

Buraya kadar sorusu olan? (itiraf etmek gerekirse bu bölümde yeteri kadar detaya girmedim) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 83

İkincil işleyici yazma konusunda ise; c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 84

İkincil işleyici yazma konusunda ise; apisi basit. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 84

İkincil İşleyici Yazmak (sadeleştirilmiş) ThreadAuxProc koduna bakalım: c l a s s ThreadAuxProc ( AuxProcBase ) : d e f p r o c e s s c o n t e x t ( s e l f, s e r v e r, ctx, args, kwargs ) : d e f i n i t i a l i z e ( s e l f, s e r v e r ) : c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 85

İkincil İşleyici Yazmak (sadeleştirilmiş) ThreadAuxProc koduna bakalım: c l a s s ThreadAuxProc ( AuxProcBase ) : d e f p r o c e s s c o n t e x t ( s e l f, s e r v e r, ctx, args, kwargs ) : s e l f. p o o l. a p p l y a s y n c ( s e l f. process, ( s e r v e r, c t x ) + args, kwargs ) d e f i n i t i a l i z e ( s e l f, s e r v e r ) : s e l f. p o o l = ThreadPool ( s e l f. p o o l s i z e ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 85

Bu konuda sorusu olan? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 86

Peki, (şu veya bu sebeple) kendi mesajlaşma ekosistemini yaratmak isteyenler XML ve çevresindeki teknolojilerden neler öğrenebilir? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 87

XML i yakından inceledikten sonra gördük ki... 1. Namespace desteği bir çok şeyi kolaylaştırıyor. 2. Nesne tanımlama dokümanı (XML Schema) tanımı yapılmalı. 3. Binary veri etkin taşınmalı. (Soap ın MTOM eklentisi) 4. (XMLSec) Kriptografik gizlilikte ve doğrulamada kullanılacak temel nesneler tanımlanmalı. Bu işlemleri (ve sıkıştırmayı da) out-of-band yapmamalı. 5. Kalıcı depolama formatı (EXI) ve sorgulama dili (XPath) tanımlamalı. 6. Mesaj yönlendirme ve RPC temel nesnelerini tanımlayın, API tanımlama standardı (WSDL) tanımlayın. Yönlendirme verisini eklemek için bütün mesajı işlemek gerekmesin! Bkz. email. c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 88

Geçmiş Olsun! umarım sizleri çok sıkmadım... c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 89

Eee, ne eksik? c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 90

Belge! c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 91

Belge! Belge! c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 92

Belge! Belge! Belge! c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 93

c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 94

Peki, başka ne eksik? Protokollerden: Taşıyıcılardan: İkincil İşleyicilerden: ProtoBuf! XmlRpc! Thrift! YAML! HTML! (Yani bütün sayfa) SMTP! Bildiğin Dosya! SPDY! WebSockets! Başka süreçte, hatta başka bilgisayarda işleme! ( ve daha bir sürü şey! Kaynak kod deposundaki ROADMAP.rst belgesine bir göz atabilirsiniz. ) c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 95

Daha fazla bilgi için: github.com/arskom/spyne Çoklu protokol: Doğrulama: Veritabanı: Örnekler examples/multiple protocols examples/validation.py examples/user manager/server sqlalchemy.py c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 96

Teşekkür Bu sunuma değerli yorumlarıyla katkıda bulunan aşağıdaki arkadaşlarıma çok teşekkür ederim: Alper Aydemir Gökberk Arslan Merve Ünlü Abdurrahman Yaşar c Arskom Ltd. - Özgür Web Teknolojileri Günleri - 19 Ekim 2012 97