Makale Özeti

Web tabanlı yazılım geliştirme süreçlerine bir şekilde dahilseniz, ASP.NET Atlas yakın gelecekte uygulamalarınızın vazgeçilmez bir parçası olacak ve şimdiden takip etmeniz gereken önemli bir teknolojidir.

Makale

Google'da Ajax için bir arama yaparsanız 150 milyon sonuçla karşılaşırsınız. Hollanda futbol efsanesi Ajax ve mitoloji kahramanı Ajax ile ilgili kayıtları çıkarsanız bile geriye milyonlarca sonuç kalır. Binlerce makalenin yanında, postback'lerden kurtularak daha hızlı tepkiler veren Web tabanlı uygulamalar için Prototype, script.aculo.us gibi onlarca JavaScript tabanlı kod kütüphanesi ve Ajax.NET gibi .NET ortamında daha alt seviye (low level) çözümler de mevcut. Kesin olan tek şey var; Ajax gelip geçici bir teknolojik heves olmaktan çok ötede, bundan sonraki Web tabanlı uygulama geliştirme metodolojilerinin bir parçası olacak ve bizlere alternatif arabirimler yaratma imkanı sunan kalıcı bir teknoloji.

Bütün bu Web 2.0, "Software as a service", Ajax vs. fırtınası içinde Microsoft'un pek de adının geçmediğini düşünenler, firmanın bu konulardaki genel stratejisini Ray Ozzie'nin "Internet Services Disruption" adlı e-postasından öğrenme fırsatı buldular. O makalede Ozzie Ajax ile ilgili olarak

...bu teknolojiyi 1998'de Internet Explorer'a ekledik, Outlook Web Access'le ilk Ajax uygulamalarını yazdık, ama teknoloji tanıtımını iyi yapamadık...

demekte. Yine aynı makale, değişen teknolojinin web arayüzlerini öne çıkardığından bahsetmekte. İşte bu noktada hem Microsoft'un hem de Microsoft tabanlı yazılım geliştiriciler olarak bizim ihtiyacımız var olan geliştirme aracımız Visual Studio.NET'in hızlı Ajax uygulamaları geliştirme becerilerine de sahip olması. Bu isteğimize Microsoft'un yanıtının kod adı Atlas.

Atlas ile ASP.NET Programlama Modeli

Tim Berners-Lee 1989'da Web'i icat ettiğinde günün birinde web uygulamalarının yüzlerce kilobyte'lık sayfalar döndüreceğini hesaba katmadığı kesin. Statik html sayfaları gibi aynı sayfa içinde etkileşim gerektirmeyen yapılarda, içerik bir kez browser'a gönderildikten sonrasının çok da önemi yoktur. Ama live.com, GMail, Backpack gibi dinamik web uygulamaları bazen sayfa değişmeden kullanıcının onlarca yeri kliklediği ve her seferinde sunucu tarafında belli kararların alınmasını, ilgili dataların gösterilmesini gerektiren bir yapıdadır.

Atlas gibi AJAX yapılarının ana amacı, kullanıcının interaktif olarak kullandığı Web uygulamalarının daha zengin bir arabirimle ve kullanımı en az bölecek şekilde oluşturulmasıdır. Mimari olarak Atlas kullanımında Sunucu Merkezli ve İstemci Merkezli diye ayırabileceğimiz iki model ortaya çıkmaktadır.

Sunucu Merkezli Programlama

Bu model alıştığımız kontrol tabanlı ASP.NET programlama modeli üzerinden AJAX yeteneklerine sahip uygulamalar geliştirmemize imkan verir, JavaScript ve asenkron programlama bilgisine çok da ihtiyaç duymaz. Var olan uygulamaların kimi bölümlerinin hızlı bir şekilde postback gerektirmeyen bir yapıya dönüştürülmesi ihtiyacına uygun model sunucu merkezli programlama modelidir.

Alıştığımız yapıda bir sunucu kontrolü olan UpdatePanel bu modelin kalbidir. Standart ASP.NET Panel kontrolüne benzeyen UpdatePanel içine eklenen tüm ASP.NET kontrolleri postback’siz çalışabilen AJAX kontrollerine dönüşmektedir. UpdatePanel dışında bulunan ASP.NET kontrolleri postback ile güncelleme yapan klasik modele uygun olarak devam etmektedir. Bu yapıyla ASP.NET sayfasının bir bölümü AJAX uygulaması olarak çalışırken diğer bir bölümü klasik ASP.NET olarak çalışmaya devam edebilmektedir.

Sunucu tabanlı modelde AJAX üzerinden yapılan postback sonrası istemci tarafındaki kontrollerde oluşacak yeni görünüm, sunucu üzerinde oluşturulur ve istemciye gönderilir. Sadece iki görünüm arasındaki farklar gönderildiği için veri boyutu tüm görünümün gönderilmesinden daha az olacaktır. Öte yandan, iletilen veri görünümü de içerdiğinden istemci merkezli programlama modeline göre bu model daha büyük veri alışverişi yapmaktadır. Bu yaklaşımın avantajı, sunucu üzerinde ViewState’in her zaman güncel kopyasının bulunmasıdır.

İstemci Merkezli Programlama

Browser üzerinde zengin uygulama geliştirme yolu çok uzun zamandır JavaScript’ten geçiyor. Atlas’ın sunduğu en önemli istemci özelliği JavaScript’le daha az haşır neşir olanların bile hızlı bir şekilde adapte olabileceği bir script altyapısının istemci sayfalarında kullanılabilmesi.

Browser tarafında Atlas uygulamalarının kalbi Atlas Script Framework’tür. Bilinen JavaScript programlamadan farklı olarak bu altyapı nesne tabanlı bir kütüphane, browser uyumluluk katmanı, .aspx sayfalarındakine benzer bir event yapısı ve genişletilebilir bir davranış (behaviour) altyapısı sunmakta.

Tüm yapının temelinde “Script core runtime” adı verilen ve nesneler, kalıtım, interface, event ve serialization altyapısını oluşturan temel vardır. BCL benzeri bir yardımcı class altyapısına ilave olarak data binding, validasyon gibi senaryolar için hazır bir bileşen altyapısı ve arabirim altyapısı da script framework içinde gelmektedir.

İstemci merkezli programlama modelinde sunucu verileri iş kurallarına göre oluşturan katmanları içerir. Görünümle ilgili tüm işlemler sunucudan serialization ile dönen veri üzerinde ve istemci tarafında yapılır. Bu modelin ASP.NET mimarisi ile en önemli uyuşmazlığı, state management için ASP.NET’in altyapısından faydalanamamasıdır. Browser üzerinde bulunan kontrollerde yapılan değişiklikler sunucu üzerindeki ViewState’le senkronize edilmediği için olası postback’lerde kontrollerin son durumlarının manuel olarak eşlenmesi gerekebilir.

Atlas’ın serialization yapısı JavaScript tarafından desteklenen JSON formatı üzerinde çalışmaktadır. JSON, AJAX mantıklı programlamada istemci ve sunucu arasında taşınan veri boyutunun XML’e göre daha küçük olması ve eval() metoduyla JavaScript içinde otomatik olarak parse edilebilmesi sebebiyle tercih edilmektedir. Veri boyutunun küçüldüğü durumlarda JSON, XML’e olan boyut avantajını kaybetmektedir. Ayrıca JSON serialization kütüphanelerinin XML’e göre daha az bulunması da özel uygulamalar geliştirme aşamasında bir sorun teşkil edebilir, ama Atlas kullanımı sırasında gerçekleşen JSON işlemleri kullanıcıya transparan bir şekilde yapıldığı için veri taşıma altyapısının mimari kolaylık ya da zorlukları yazılım geliştiriciye yansımamaktadır.

AJAX’ın temeli olan XMLHttpRequest çağrıları sunucu üzerindeki bir metodun çağırılmasında kullanılabildiği gibi aynı sunucuda tanımlı ve Atlas destekleyen web servislerinin çağırılmasında da kullanılabilir. Sunucu tarafında sayfaya eklenen ScriptManager kontrolü üzerinde tanımlanan ServiceReference tanımları, istemci tarafında JavaScript içerisinde çağrılabilir. Bu yapı, özellikle var olan web servis altyapısından faydalanan web uygulamaları geliştirirken kodların tekrar kullanımına izin veren ve proje sürelerini doğrudan etkileyen bir özellik kümesi sağlamaktadır.

Browser tabanlı uygulamalar JavaScript ile ulaşabilecekleri kaynaklarda uygulamanın alındığı web sunucusu ile sınırlıdırlar. Bu sınırlama web sayfalarında güvenlikle ilgili yıllardır süre gelen gelişimin sonucu olmakla beraber, AJAX dünyasında birden fazla servisin birleştirildiği mash-up denilen uygulamalar gibi çok kaynaklı uygulama geliştirmede bir engel olarak karşımıza çıkmaktadır. Piyasada bulunan AJAX kütüphaneleri standart sunucu çağrılarında benzer yapılar sunarken, bu tip 3. parti web servislerin kullanılmak istendiği durumlarda Atlas’ın “bridging” altyapısı büyük önem kazanmaktadır.

Bir Atlas bridge’ini istemci tarafından gelen çağrıları 3. parti web servislerine yönlendiren ara katman olarak düşünebiliriz. Bu yapı hem SOAP tabanlı web servislerini hem de REST/POX tabanlı daha hafif servisleri destekleyebilir. Bridge arabirimi olan .asbx yapılarında yapılan çağrılar cache’lenebilmekte ve birden fazla çağrının tek bir sonuç kümesinden çalışabilmesiyle hızlı bir veri erişimi altyapısı kurulabilmektedir. Aynı şekilde 3. parti servisten alınan veriler XSLT transformasyonları ya da Property Selector yapılarıyla istemciye özel sonuç kümeleri de oluşturulabilmektedir.

Mimari olarak web servis çağrılarının bir ucunun istemciye bağlanabilmesi, dağıtık uygulama yapılarına Atlas tabanlı arabirimlerin kolayca eklenebilmesi ve proje süreçlerinde zaman tasarrufu gibi sonuçlar ortaya çıkarmaktadır. Yine bu altyapı sayesinde yeni teknolojilerin Atlas kullanan web uygulamalarıyla kolay entegrasyonu da mimari kararlar verirken göz önüne alınmalıdır. Örneğin aynı altyapıyı kullanarak web uygulamasının WCF ile entegre edilmesi oldukça kolaydır.

AJAX ve Güvenlik

Atlas gibi AJAX uygulamalarında güvenlik, yapının atak yüzeyini genişletmesinden dolayı ayrı bir önem kazanmaktadır.  Web servislerinin ve sayfa metodlarının doğrudan JavaScript’le çağırılabilir olması sunucu üzerindeki metodların saldırılara daha açık olduğu anlamına gelir. Öncelikli olarak bilinmesi gereken nokta, sunucu tarafındaki kimi bilgilerin istemci üzerindeki JavaScript kodu incelenerek elde edilebileceğidir. Atlas üzerinden erişilebilir tüm sunucu metodları, aldıkları parametreleri mutlaka kontrol ederek kullanmalıdır. Beklenmedik parametre verilerinin kullanıcının yetkisi olmadığı verilere erişmesinin mümkün olmadığı bir tasarım öncelikle düşünülmelidir.

Bir diğer konu da sayfadaki bilgilerin validasyonudur. Klasik ASP.NET uygulamaları sayfa sonucu postback işlemi sırasında kullanıcıdan bilgiyi tek noktada alırken bir Atlas uygulaması sunucu tarafında bilgiyi parçalar halinde almaktadır. Hem bu ara iletişimler sırasında hem de son postback’de tüm bilgiler tekrar validasyondan geçirilmeli, ara kademelerde sunucu tarafında alınan bilgilerin son postback’de aynen geleceği varsayımına güvenilmemelidir.

Atlas yeni bir teknoloji olduğu için projede yer alan tüm yazılımcıların programlama modeline hakim olmaları ve bu modelin getirdiği yeni yaklaşımların uygulama güvenliğine etkilerini bilmeleri sağlanmalıdır.

Atlas Kullanımının Proje Süreçlerine Etkileri

Yeni bir uygulama mimarisi proje süreçlerinde de bazı yeni öngörüleri beraberinde getirir. ASP.NET ile birlikte klasik ASP’ye göre daha hızlı uygulama yazabilir hale gelmiştik. Entegre debugging araçları ile kod kalitesinde iyileşme sağlarken, yüzlerce ücretli ve ücretsiz sunucu kontrollerinin ASP.NET’te kullanılabilmesi ile görünümle ilgili yapıları kolayca oluşturarak asıl önemli olan iş süreçleri ile ilgili kodlara konsantre olabilmiştik.

Atlas kimi açılardan bizi bir adım öne taşısa da bazı yönlerden de ek dikkati hak ediyor. Öncelikle Web tabanlı uygulama geliştiren yazılımcılar artık JavaScript konusunda daha bilgili olmak zorunda. Özellikle bu konuda tecrübesi olmayan ekiplerin istemci tabanlı modelde geliştirme yapmadan önce JavaScript bilgilerini gözden geçirmeleri gerekmekte. JavaScript C tabanlı dillere ortak syntax kullandığı için, özellikle VB.NET kullanan geliştiricilerin eğitim ihtiyacı biraz daha öne çıkmakta.

Browser üzerinde debug işlemleri yine Visual Studio yardımıyla gerçekleştirilebilmekte. Öte yandan bu işlem hem ASP.NET’in doğal ortamında olduğundan daha zordur hem de birden fazla browser tipi söz konusu olduğunda bazen teknik imkansızlıklara takılmaktadır. Ayrıca bazı durumlarda istemci ve sunucu arasında iletilen verinin de HTTP protokolü seviyesinde incelenmesi gerekir. Bu gibi durumlar için Fiddler gibi 3. parti araçlara ihtiyaç vardır. Unit testing ya da functional testing metodolojilerinin uygulanması da bazı ek çalışmalar gerektirmektedir.

Sonuç

ASP.NET Atlas, özellikle var olan uygulamaların bazı bölümlerinin sunucu tabanlı geliştirme modelini kullanarak AJAX mantığına geçirilmesinde hızlı bir şekilde kullanılabilecek bir uygulama altyapısı sunuyor. MIX konferansında açıklanan go-live lisansı ile Atlas CTP’lerini profesyonel uygulamalarımızda hemen kullanabiliyoruz. İstemci tabanlı model daha da zengin uygulamaların kapısını açarken mimari ve proje yönetimi konularında bazı ek çalışmalar yapılmasını gerektirmekte.

Web tabanlı yazılım geliştirme süreçlerine bir şekilde dahilseniz, ASP.NET Atlas yakın gelecekte uygulamalarınızın vazgeçilmez bir parçası olacak ve şimdiden takip etmeniz gereken önemli bir teknolojidir.

Kaynaklar