Web Sitelerinde Azure Mobile Services

0 dakikada yazıldı

77018 defa okundu

Düzenle

Azure Mobile Services konusunda bundan önce sizlerle bazı videolar
paylaştım, webcastler
yaptık
ama itiraf
etmek gerekirse Azure Mobile Services kullanımını pek de Mobile dışında
düşünmedik. Zaten aslına bakarsanız Microsoft da böyle düşünmüyor :)
Fakat ürünün ismini bir kenara koyar ve ne yaptığına bakarsak kaba
tabiri ile bize REST üzerinde basit ve hızlı olarak data erişimi
sağlıyor. Tabi ki data erişimi dışında Mobile Services'da daha bir çok
component var ama dedim ya, kaba bir şekilde ürünün olayı bu. Bu noktaya
kadar aynı fikirdeysek şimdi geçelim hikayenin diğer açısına.

Geçenlerde bir web sitesi projesi ile ilgili düşünürken sitenin tüm veri
erişimini REST üzerinden bir API set ile tasarlamaya karar verdim.
Genelde bu gibi mimari tasarımları pek sevmem. Neden mi? Siteye giren
ziyaretçinin ilk yaptığı request ile ona ihtiyacı olan veriyi yollamak
yerine ihtiyacı olan veriyi alabileceği bir uygulama yolluyor olmak ve
sonrasında ikinci, üçüncü HTTP talepleri ile esas ziyaretçinin görmek
istediği şeyi vermek bence kullanıcı deneyimi açısından inanılmaz
anlamsız ve saçma. Böyle projelerde bulundum :), gördüm, saçma. Yanlış
olmasın, özellikle bahsettiğim saçmalık daha ilk sayfa açıldığında
yüklenecek verinin sonradan async API call ile yüklenmesi. Bu durum
özünde bir "mimari moloz sendromu" :) Ah şu "Mimari Moloz Sendormu"
yazısını yazmış olsaydım link verirdim şimdi. Neyse, kısmet :) Konumuza
dönersek, peki ben neden bu bahsettiğim web projesinde işleri böyle
yapiyim dedim? Aslında nedeni çok da önemli değil çünkü konumuz o değil
ama kabaca anlatmak gerekirse söz konusu web sitesinin full HTML olması
gerekiyordu :) Dedim ya, uzun hikaye.

Yani?

Şimdi geleceğim nokta şudur ki, tüm veri kaynağını vs REST üzerinden
siteye beslemeye karar verince bir baktım normal bir asp.net projesinden
daha kompleks (doğal olarak) istemci-sunucu kafasında bir yapı nedeniyle
iş yükü gereksiz artıyor. API yaz, tüket vs... ohooo yapacağımız bir web
sitesi zaten ve malum HTML'den öteye bile geçemiyor. İşte o anda aklıma
aslında tam da bu işleri çözen yani otomatik olarak API açan ve
üzerinden veri erişimi vs sağlayan Mobile Services geldi. Dedim ya
normalde Mobile Services mobil uygulamalar için tasarlanmış bir yapı ama
sonuç itibari ile bu Mobile Services HTML5 ile programlanan Windows8
Tablet uygulamalarında da kullanılabiliyor ve tam da bu nedenle bir
JavaScript SDK'yi var!! İşte bu!

Service erişimi anahtarı... Hmm...

Hayalimde taşlar çok güzel yerli yerine oturuyordu ki hemen aklıma
Mobile Services endpoint erişimi için kullandığımız management key'ler
geldi. O key'leri normal şartlarda biz mobil uygulamanın içine gömüyoruz
ve doğrudan erişilemiyor. En azından kolay yoldan erişilemiyor diyelim.
Bir web sitesi üzerinden Mobile Services kullandığımızda ise söz konusu
key/anahtar apaçık JavaScript kodunun içerisinde durmak zorunda. Bir an
hayallerim söndü. Sonra bir silkelendim :) Azure Mobile Services ile
daha önce ilgilenenler hatırlayacaktır her entity set, table için
permission / izinler ayarlayabiliyoruz. O ayarlar listesinde "Everyone"
diye bir seçenek var :) O seçeneği kullanmak mobil uygulama
geliştirirken pek de aklımıza gelmiyor çünkü zaten key'i uygulamanın
içine gömüyoruz ve her tür erişimi "key ile erişilebilir" diye
ayarlıyoruz. Oysa web ortamında "Everyone" olarak ayarlı bir tablo çok
daha işimizi görebilir ve keyi alenen paylaşmaktan kurtuluruz. Tabi bu
noktada aklınıza "Key yok herkes erişecek aman Allah'ım" gibi korku
cümleleri gelebilir :) Tamam da zaten REST API değil de normal web
sitesi üzerinden HTML ile sunsaydık veriyi herkes erişemeyecek miydi?
Pelki REST olduğu için :) otomatik kötüye kullanımı bilenler için
kolaylaştırmış oluyoruz fakat konsept olarak herkesin ulaşmasını
istediğiniz veriyi ne formatta açacaksanız açın sonuç itibari ile
herkese açacaksınız :) "Everyone" candır diyerek devam edelim. Böylece
"key"i JavaScript'in içinde bulundurmaktan kurtulduk.

<script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>
<script src='http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.1.0.min.js'></script>

<script type="text/javascript">
    var client = new WindowsAzure.MobileServiceClient('https://darondeneme.azure-mobile.net/');
    todoItemTable = client.getTable('todoitem');
    var sorgu = todoItemTable.where({ complete: false });
    sorgu.read().then(function (todoItems) {
        for (var i = 0; i < todoItems.length; i++) {
            alert(todoItems[i].text)
        };
    }, hataolursa);
    function hataolursa(hata) {
        var text = hata + (hata.request ? ' - ' + hata.request.status : '');
        alert(text);
    }
</script>

Yukarıdaki kod süper basit bir şekilde Azure Mobile Services SDK ile
beraber gelen Windows 8 HTML5 örneklerinden çırptığım bir kod :)
MobileServices Client'ı oluştururken key vermek için kullanılan ikinci
parametreyi tamamen sildim. "todoItem" adındaki mobile services
varsayılan örneği ile gelen tabloya da "Everyone" okuma izni verdim.

Herkese okuma izni verdik.
Herkese okuma izni verdik.

İşte bu kadar :) artık Azure Mobile Services SDK içerisindeki Windows 8
HTML uygulama geliştirmek için yer alan tüm kaynakları kullanabilir, tüm
JavaScript SDK'yi kullanabilir ve her türlü veri erişimizi Mobile
Services üzerinden yapabilirsiniz. Özetle web sitenizin arka planı
tamamen Azure Mobile Services olmuş oluyor.

Her şey güzel gibi....

İtiraf etmek gerekirse Azure Mobile Services'ın bu şekilde
kullanılabileceğinin Microsoft'un aklına geldiğini bile sanmıyorum.
Materyallere, dokümanlara vs baktığınızda Azure Mobile Services'ın web
sitelerinde kullanımından bahsedildiğini hiç görmedim. Zaten ürünün adı
da belli :) Mobile Services. Peki bu işin altından bir sıkıntı çıkar mı?
Tek bir olası sıkıntı var; maliyet. Mobile services ücretsiz sürümünde
500.000 API erişimi limiti var. Yani sitenizde bir ayda 500.000 kişi
girip sadece ana sayfanıza baksa bile bu limite dayanabilirsiniz. 1.5
milyon API Call ise kabaca 25$. Kesinlikle ucuz değil. Mobile
uygulamlarda Mobile Services kullanımı bu fiyatlandırmada çok daha karlı
oluyor çünkü o marketteki getiri potansiyeli normal web ortamından daha
farklı ve mobile services'ın ölçeklenebilirliği göreceli daha değerli
bir pozisyonda oluyor. Normal web sitesi kullanımında ise insan biraz
daha teredütte kalıyor. İlla sitenizin verisini API üzerinden
verecekseniz ve aceleniz varsa, yeterli yazılım geliştirme kaynaklarınız
(zaman vs) yok ama bütçeniz varsa Mobile Services süper uygun bir
seçenek olabilir. Bir diğer senaryo ise zaten hali hazırda Mobile
Services kullanan mobil uygulamalarınız varken web sitenizi de buradan
besleyebilmek olabilir. Böylece mobil uygulaması olan web sitesi olmayan
çoğu startup web sitelerini daha hızlı bir şekilde release etme şansına
sahip olabilir. Daha eminim ki benim aklıma gelmeyen bir çok senaryo
vardır ama genel olarak maliyeti akılda tuttukça ben başka bir olası
sorun ile karşılaşılabileceğini düşünmüyorum.

Görüşmek üzere.