Ajax Konusunda Uzmanlaşma, Bölüm 7

0
butch
IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Ajax'ta Uzmanlaşma, Bölüm 7: İsteklerde ve yanıtlarda XML kullanılması

Ne zaman iyi, ne zaman kötü bir fikir olduğunu öğrenin

Düzey: Orta

Brett McLaughlin (brett@newInstance.com), Yazar ve Editör, O'Reilly Media Inc.

10 Ekim 2006

Sıradan Ajax geliştiricileri bile Ajax içindeki x harfini ve bunun XML anlamına geldiğini fark edecektir. XML, her tür programlama ortamındaki en yaygın veri biçimlerinden biridir ve zamanuyumsuz uygulamalarda sunucu yanıtları açısından gerçek avantajlar sunar. Bu makalede, sunucuların bir isteğe yanıt verirken nasıl XML gönderdiklerini görürsünüz.

Günümüzde, XML ile karşılaşmadan önemli bir programlama gerçekleştiremezsiniz. XHTML'e geçmeyi düşünen bir Web sayfası tasarımcısı, JavaScript ile çalışan bir Web programcısı, uygulama açıklayıcıları ve veri bağlama kullanan sunucu tarafındaki bir programcı ya da XML tabanlı veritabanlarını inceleyen bir arka yüz geliştiricisi de olsanız genişletilebilir biçimleme diliyle her yerde karşılaşırsınız. Dolayısıyla, XML'in Ajax'ın temelini oluşturan teknolojilerden biri olduğunu düşünmek çok da şaşırtıcı değildir.

Ancak, bu düşünce, teknik gerçeklikten çok, Ajax uygulamalarında kullanılan temel nesneler için yapılan kötü ad seçimlerini yansıtmaktadır (XMLHttpRequest). Diğer bir deyişle, çoğu kişi, XMLHttpRequest nesnesinin her zaman XML kullandığını varsaydıklarından, XML'in Ajax'ın temel bir parçası olduğunu düşünürler. Ancak durum böyle değildir ve bunun nedenleri, bu makalenin birinci bölümünün konusudur. Aslında, Ajax uygulamalarının çoğunda, XML'in çok nadiren göründüğünü fark edeceksiniz.

XML'in Ajax'ta gerçek kullanımları vardır ve XMLHttpRequest bunlara da olanak verir. Sunucuya XML göndermenizi engelleyecek hiçbir şey yoktur. Bu dizinin önceki makalelerinde, veri göndermek için düz metin ve ad/değer parametrelerini kullanmıştınız, ancak XML de geçerli bir biçimdir. Bu makalede, bunu nasıl yapacağınız üzerinde duracağız. Daha da önemlisi, istek formatınız için neden XML kullanabileceğinizi ve çoğu durumda, neden kullanmamanız gerektiğini anlatacağım.

XML: Gerçekten de orada mı?

Ajax uygulamaları ve bunların XML kullanımlarıyla ilgili varsayımlarda bulunmak kolaydır; hem teknoloji adı (Ajax) hem de kullandığı temel nesne (XMLHttpRequest) XML'in kullanıldığını ima eder ve Ajax ile bağlantılı XML kullanımını her zaman duyarsınız. Ancak, bu algılama tamamen yanlıştır ve zamanuyumsuz uygulamaların yazılması söz konusu olduğunda malzemelerinizi gerçekten bilmek isterseniz, bu algılamanın yanlış olduğunu bilmelisiniz -- ve daha da iyisi neden yanlış olduğunu bilmelisiniz.

XMLHttpRequest: Kötü adlar ve HTTP

Bir teknolojiyle ilgili olabilecek en kötü şeylerden birisi, teknolojinin çok popüler olması ve temel parçalarını değiştirmenin imkansız hale gelmesidir. Ajax uygulamalarındaki temel nesnelerden biri olan XMLHttpRequest için de durum böyledir. Bakıldığında, HTTP istekleri üzerinden XML göndermek ya da bir çeşit XML biçiminde HTTP istekleri göndermek için tasarlanmış gibi görünür. Adının ne ima ettiğine bakmadan, nesnesinin asıl yaptığı şey, bir HTTP isteği göndermek için istemci kodunuza (genellikle Web sayfanızdaki JavaScript) bir yol sağlamasıdır. Hepsi bu kadar; yaptığı başka bir şey yoktur.

Bu nedenle, XMLHttpRequest nesnesinin adını, HttpRequest ya da belki, yalnızca Request gibi daha doğru bir şeyle değiştirmek iyi olurdu. Ancak, bugün milyonlarca geliştirici uygulamalarında Ajax kullanıyor ve kullanıcıların çoğunun Internet Explorer 7.0 ya da Firefox 1.5 gibi yeni tarayıcı sürümlerine geçmesinin yıllar süreceğini bildiğimiz için böyle bir hareket olanaklı değil. Sonuç olarak nesneyi XMLHttpRequest adıyla kullanmanız gerekiyor ve bunun kötü bir şekilde adlandırıldığını fark etmek de geliştiricilere kalıyor.

XMLHttpRequest nesnesini desteklemeyen bir tarayıcıyla (özellikle Windows üzerinde) çalışırken bilinen en iyi son çare yöntemlerinden biri Microsoft IFRAME nesnesinin kullanılmasıdır. XML, HTTP, hatta bir istek gibi bile görünmüyor değil mi? Açıkçası, bunların hepsini içerebilir, ancak XMLHttpRequest nesnesinin, XML ya da HTTP ile ilgili olmaktan çok, bir sayfanın yeniden yüklenmesine gerek kalmadan isteklerin yapılmasıyla ilgili olduğu gerçeği açıkça ortaya konmalıdır.

İstekler HTTP'dir, XML değil

Başka bir yaygın hata da XML'in sahne arkasında bir şekilde kullanıldığını düşünmektir -- dürüst olmak gerekirse, eskiden ben de böyle düşünürdüm! Ancak, bu görüş, teknolojiyi anlama açısından zayıflığımızı da gösterir. Bir kullanıcı tarayıcısını açıp sunucudaki bir Web sayfası için istekte bulunmak üzere http://www.google.com ya da http://www.headfirstlabs.com gibi şeyler yazar. http:// kısmını yazmasa bile tarayıcı, tarayıcı adres çubuğundaki bu parçayı doldurur. Bu birinci parça -- http:// -- iletişim nasıl oluştuğuyla ilgili, anlaşılması çok da zor olmayan bir ipucu sağlar: Hypertext Transfer Protocol (Bağlantılı Metin Aktarımı İletişim Kuralı) yoluyla. Sunucuyla iletişim kurmak için Web sayfanıza bir kod yazdığınızda, bu ister Ajax, ister normal biçimli bir POST, ister bir metin bağlantısı kullansın, söz konusu olan HTTP'dir.

HTTPS: Yine HTTP

Web konusunda yeni olanlarınız, https://intranet.nextel.com gibi URL'leri merak ediyor olabilirsiniz. https, güvenli HTTP'dir ve sıradan Web istekleri tarafından kullanılan HTTP iletişim kuralının daha güvenli bir biçimini kullanır. Bu yüzden, her ne kadar meraklı gözlerden uzak tutmak amacıyla fazladan birkaç güvenlik katmanı eklense de HTTPS'de söz konusu olan yine HTTP'dir.

Tarayıcılar ve sunucular arasındaki tüm Web iletişiminin büyük bir kısmının HTTP üzerinden olduğunu bildiğimizde, XMLHttpRequest tarafından gizli bir biçimde kullanılan aktarım ya da teknolojinin XML olduğu düşüncesi çok da anlamlı olmaz. XML kesinlikle HTTP isteği içinde gönderilebilir, ancak HTTP, çok net bir şekilde tanımlanmış bir standarttır ve yakın bir zamanda da herhangi bir şekilde ortadan kalkacak gibi görünmemektedir. İsteğinizde özel olarak XML kullanmıyorsanız ya da sunucu, yanıtı size XML biçiminde göndermiyorsa, XMLHttpRequest nesnesinde düz eski HTTP'yi kullanmaktan başka yapmanız gereken bir şey yoktur. Birisi size bir daha "Evet, buna XMLHttpRequest denmesinin nedeni, arkada XML kullanmasıdır" dediğinde yalnızca gülümseyin ve sabırlı bir şekilde onlara HTTP'nin ne olduğunu ve XML'in HTTP üzerinden gönderilebildiğini, ancak XML'in bir veri biçimi olduğunu, bir aktarım iletişim kuralı olmadığını anlatın.



XML'in (gerçekten) kullanılması

Şimdiye kadar size XML'in Ajax içinde kullanılmadığı yerlerden söz ettim. Ancak, Ajax içindeki x ve XMLHttpRequest içindeki XML gerçekliğini devam ettiriyor ve Web uygulamalarında XML kullanmak için birkaç seçeneğiniz var. Bu bölümde temel seçeneklere bakacak ve bu makalenin geri kalanında, bu konuda gerçekten ayrıntıya gireceksiniz.

XML seçenekleri

Zamanuyumsuz uygulamalarınızda iki temel XML uygulaması görürsünüz:

  • Bir Web sayfasından sunucuya, XML biçiminde bir istek gönderme
  • Web sayfanızda sunucudan XML biçiminde bir istek alma

Bunlardan birincisi -- XML biçiminde bir istek gönderme -- isteğinizi, API kullanarak ya da yalnızca metin dizeleri oluşturarak, XML formatında sunucuya göndermenizi gerektirir. Bu seçenekte, eldeki ana iş, isteğin XML kurallarıyla uyumlu ve sunucunun anlayabileceği bir şekilde oluşturulmasıdır. Dolayısıyla, gerçekten XML biçimine odaklanmanız gerekir; göndermek istediğiniz veriler elinizdedir ve tüm yapmanız gereken, bunları XML semantiğiyle hazırlamaktır. Bu makalenin geri kalanı, Ajax uygulamalarınızda XML'in bu kullanımı üzerinde odaklanır.

Bu seçeneklerin ikincisi -- XML biçiminde bir istek alma -- sunucudan bir yanıt almanızı ve verileri XML'den çıkarmanızı gerektirir (yine bir API kullanarak ya da biraz kaba kuvvet yaklaşımıyla). Bu durumda, sunucudan gelen veriler üzerinde odaklanırsınız ve verileri, yapıcı bir şekilde kullanmak için XML'den çekip çıkarmanız gerekir. Bu dizinin bir sonraki makalesinin konusu da budur ve o zaman bu konu ayrıntılarıyla ele alınacaktır.

Küçük bir uyarı

XML kullanımının ayrıntılarına girmeden önce size küçük bir uyarıda bulunayım: XML, küçük, hızlı, alandan tasarruf etmenizi sağlayacak bir biçim değildir. Sonraki birkaç bölümde ve bu dizinin bir sonraki makalesinde de göreceğiniz gibi XML'i bu bağlamda kullanmak için önemli nedenler vardır ve XML, düz metin istekleri ve yanıtlarıyla karşılaştırıldığında (özellikle yanıtlarda) bazı avantajlara sahiptir. Ancak, iletilerinize XML'in gerektirdiği tüm biçim imlerini ve semantiği eklediğiniz için XML her zaman düz metinden daha fazla alan kaplayacak ve daha yavaş olacaktır.

Bir masaüstü uygulaması gibi çalışan parlak ve hızlı bir uygulama yazmak istiyorsanız, XML, başlamak için en iyi nokta olmayabilir. Düz metinle başlayıp, XML için belirli bir gereksinimle karşılaşırsanız, bu harikadır; ancak, en baştan XML kullanırsanız, uygulamanızın yanıt verebilirliğini yavaşlatmanız neredeyse kesin bir sonuçtur. Çoğu durumda, düz metni göndermek -- name=jennifer gibi ad/değer çiftlerini kullanmak -- metni, aşağıdaki gibi XML'e çevirmekten daha hızlı olacaktır:

<name>jennifer</name>

XML'in zaman kaybettirdiği tüm yerleri bir düşünün: Metnin XML olarak hazırlanması; fazladan bilgilerin gönderilmesi (dikkat ederseniz çevre öğeleri, XML üstbilgisini ya da daha gerçekçi bir isteğin parçası olabilecek başka şeyleri belirtmedim); sunucunun XML'i ayrıştırması, bir yanıt oluşturulması, yanıtın yeniden XML olarak hazırlanması ve Web sayfanıza geri gönderilmesi; son olarak yanıtın sayfanızda ayrıştırılması ve verilerin kullanılması. Dolayısıyla, XML'i ne zaman kullanacağınızı öğrenin, ancak birçok durumda uygulamanızı daha hızlı yapacağını düşünerek uygulamanızı oluşturmaya XML'den başlamayın; XML, daha çok, birazdan da sözünü edeceğimiz gibi esneklik sağlar.



İstemciden sunucuya XML

XML'i, bir istemciden sunucuya veri göndermek için kullanılan format olarak ele alalım. Öncelikle, bunun teknik açıdan nasıl yapılacağını görecek, daha sonra da bunun ne zaman iyi bir fikir olduğu ve ne zaman olmadığı üzerinde duracağız.

Ad/değer çiftlerinin gönderilmesi

Yazdığınız Web uygulamalarının yaklaşık %90'ında, kodunuzu sunucuya gönderilecek ad/değer çiftleriyle bitirirsiniz. Örneğin, bir kullanıcı Web sayfanızdaki bir forma adını ve adresini yazarsa, formdaki verileri aşağıdaki şekilde alabilirsiniz:

firstName=Larry
lastName=Gullahorn
street=9018 Heatherhorn Drive
city=Rowlett
state=Texas
zipCode=75080

Bu verileri sunucuya göndermek için yalnızca düz metin kullanıyorsanız, kodunuz Liste 1'deki gibi görünebilir. (Bu, bu dizinin birinci makalesinde kullanılan örnek I'e benzer bir örnektir. Bkz. Kaynaklar.)


Liste 1. Ad/değer çiftlerinin düz metin olarak gönderilmesi
function callServer() {
  // Get the city and state from the Web form
  var firstName = document.getElementById("firstName").value;
  var lastName = document.getElementById("lastName").value;
  var street = document.getElementById("street").value;
  var city = document.getElementById("city").value;
  var state = document.getElementById("state").value;
  var zipCode = document.getElementById("zipCode").value;

  // Build the URL to connect to
  var url = "/scripts/saveAddress.php?firstName=" + escape(firstName) +
    "&lastName=" + escape(lastName) + "&street=" + escape(street) +
    "&city=" + escape(city) + "&state=" + escape(state) +
    "&zipCode=" + escape(zipCode);

  // Open a connection to the server
  xmlHttp.open("GET", url, true);

  // Set up a function for the server to run when it's done
  xmlHttp.onreadystatechange = confirmUpdate;

  // Send the request
  xmlHttp.send(null);
}

Ad/değer çiftlerinin XML'e dönüştürülmesi

Bunun gibi veriler için biçim olarak XML kullanmayı istiyorsanız, yapmanız gereken ilk şey verileri saklamak için temel XML biçimini kullanmak olacaktır. Ad/değer çiftlerinizin tümü XML öğelerine dönüştürülebilir; burada, öğe adı çiftin adı ve öğenin içeriği de değer olur:

<firstName>Larry</firstName>
<lastName>Gullahorn</lastName>
<street>9018 Heatherhorn Drive</street>
<city>Rowlett</city>

<state>Texas</state>
<zipCode>75080</zipCode>

Elbette, XML bir kök öğenizin ya da yalnızca bir belge parçasıyla çalışıyorsanız (XML belgesinin bir parçası) çevreleyen bir öğenin olmasını gerektirir. Dolayısıyla, yukarıdaki XML'i aşağıdaki gibi bir koda dönüştürebilirsiniz:

<address>
  <firstName>Larry</firstName>
  <lastName>Gullahorn</lastName>
  <street>9018 Heatherhorn Drive</street>

  <city>Rowlett</city>
  <state>Texas</state>
  <zipCode>75080</zipCode>
</address>

Şimdi bu yapıyı Web istemcinizde oluşturmaya ve sunucuya göndermeye -- neredeyse -- hazırsınız.

Sözlü iletişim

Ağ üzerinden XML göndermeye başlamadan önce, verileri gönderdiğiniz sunucunun -- ve komut dosyasının -- gerçekten de XML'i kabul ettiğinden emin olmak istiyorsunuz. Birçoğunuz için bu, aptalca da olsa yapılması gereken bir nokta gibi görünebilir; ancak, yeni programcıların çoğu, ağ üzerinden XML gönderirlerse, bunun doğru biçimde alınacağını ve yorumlanacağını varsayarlar.

Aslında, XML biçiminde gönderdiğiniz verilerin doğru olarak alındığından emin olmak için gerçekleştirmeniz gereken iki adım vardır:

  1. XML'i gönderdiğiniz komut dosyasının veri biçimi olarak XML'i kabul ettiğinden emin olun.
  2. Komut dosyasının, verilerinizi gönderdiğiniz belirli XML biçimini ve yapısını kabul ettiğinden emin olun.

Bunların ikisi de gerçekten bir insanla konuşmanızı gerektirebilir, sizi bu konuda uyarıyorum! XML olarak veri gönderebilmeniz önem taşıyorsa, komut dosyası yazarlarının çoğu size iyilikte bulunur; bu nedenle, XML kabul edecek bir komut dosyası bulmak çok da zor değildir. Yine de, kullandığınız biçimin komut dosyasının beklediği biçimle eşleştiğinden emin olmanız gerekir. Örneğin, sunucunun aşağıdaki gibi verileri kabul ettiğini düşünün:

<profile>
  <firstName>Larry</firstName>
  <lastName>Gullahorn</lastName>
  <street>9018 Heatherhorn Drive</street>

  <city>Rowlett</city>
  <state>Texas</state>
  <zip-code>75080</zip-code>
</profile>

Bu, yukarıdaki XML'e benzer -- iki nokta dışında:

  1. İstemciden gelen XML bir address öğesi içinde olmasına rağmen sunucu, verilerin bir profile öğesi içinde bulunmasını beklemektedir.
  2. İstemciden gelen XML zipCode öğesini kullanır, ancak sunucu, posta kodunun bir zip-code öğesinde olmasını beklemektedir.

Büyük bir sistem içinde bu gerçekten küçük noktalar, verilerinizi kabul eden ve işleyen sunucu ile kötü bir şekilde çöken ve Web sayfanıza -- ve büyük olasılıkla kullanıcılara -- şifreli bir hata iletisi veren sunucu arasındaki farkı oluşturur. Bu nedenle, sunucunun neyi beklediğini anlamalı ve verileri bu biçime uygun hale getirmelisiniz. Daha sonra -- yalnızca o zaman -- XML'in bir istemciden sunucuya gönderilmesi konusunda gerçek teknik sorunlarla uğraşmaya hazır olursunuz.

XML'in sunucuya gönderilmesi

XML'i sunucuya gönderme söz konusu olduğunda, verilerinizi almak ve XML'e dönüştürürken, verilerinizi gerçekten iletmek için harcadığınızdan daha fazla kod harcarsınız. Aslında, XML dizesini sunucuya göndermek üzere hazırladıktan sonra bu işlemi, diğer herhangi bir düz metni gönderdiğiniz şekilde gerçekleştirirsiniz; bu işlemi görmek için Liste 2'ye bakın.


Liste 2. Ad/değer çiftlerinin XML olarak gönderilmesi
function callServer() {
  // Get the city and state from the Web form
  var firstName = document.getElementById("firstName").value;
  var lastName = document.getElementById("lastName").value;
  var street = document.getElementById("street").value;
  var city = document.getElementById("city").value;
  var state = document.getElementById("state").value;
  var zipCode = document.getElementById("zipCode").value;

  var xmlString = "<profile>" +
    "  <firstName>" + escape(firstName) + "</firstName>" +
    "  <lastName>" + escape(lastName) + "</lastName>" +
    "  <street>" + escape(street) + "</street>" +
    "  <city>" + escape(city) + "</city>" +
    "  <state>" + escape(state) + "</state>" +
    "  <zip-code>" + escape(zipCode) + "</zip-code>" +
    "</profile>";

  // Build the URL to connect to

  var url = "/scripts/saveAddress.php";

  // Open a connection to the server
  xmlHttp.open("POST", url, true);

  // Tell the server you're sending it XML
  xmlHttp.setRequestHeader("Content-Type", "text/xml");

  // Set up a function for the server to run when it's done
  xmlHttp.onreadystatechange = confirmUpdate;

  // Send the request
  xmlHttp.send(xmlString);
}

Bu kodun çoğu, üzerinde durulmaya değer birkaç nokta dışında, kendi kendini açıklar niteliktedir. Birincisi, isteğinizdeki verilerin el ile XML olarak biçimlendirilmesi gerekir. Belge Nesne Modeli'nin (DOM) kullanımına ilişkin üç makaleden sonra bu biraz hayal kırıklığına neden olmuştur sanırım, değil mi? Hiçbir şey JavaScript kullanan bir XML belgesini oluştururken DOM kullanmanızı engellemez; bu durumda, GET ya da POST isteğiyle ağ üzerinden göndermeden önce DOM nesnesini metne dönüştürmeniz gerekir. Bu nedenle, verileri olağan dize işlemiyle basitçe biçimlendirmek çok daha kolay olur. Elbette, hata ve yazım yanlışları ortaya çıkabileceğinden XML ile uğraşan bir kod yazarken daha da dikkatli olmanız gerekir.

XML'inizi oluşturduktan sonra, büyük oranda metni gönderirken açtığınıza benzer bir bağlantı açarsınız. Bazı tarayıcılar GET sorgu dizelerine uzunluk sınırlaması getirdiği ve XML de oldukça uzun olabildiği için ben, XML için POST isteklerini kullanmayı tercih ediyorum; Liste 2'de GET isteğinden uygun şekilde POST isteğine nasıl geçildiğini görebilirsiniz. Ayrıca, istekte bulunduğunuz URL'nin sonuna eklenen bir parametre olarak gönderilmek yerine XML, send() yöntemiyle gönderilir. Bunların tümü oldukça küçük farklılıklardır ve ayarlanmaları kolaydır.

Yine de tamamen yeni bir kod satırı yazmanız gerekir:

xmlHttp.setRequestHeader("Content-Type", "text/xml");

Bunu anlamak çok da zor değil: Yalnızca sunucuya düz eski ad/değer çiftleri göndermek yerine XML gönderdiğinizi belirtir. Her iki durumda da verileri metin olarak gönderirsiniz, ancak burada text/xml olarak kullanırken, diğerinde gönderilen XML düz metin olarak kullanılır. Az önce ad/değer çiftlerini kullandıysanız bu satır şöyle okunur:

xmlHttp.setRequestHeader("Content-Type", "text/plain");

Sunucuya, XML gönderdiğinizi bildirmeyi unutursanız sorun yaşayabilirsiniz, bu nedenle bu adımı unutmayın.

Bunların hepsini bir araya getirdikten sonra, yapmanız gereken tek şey send() yöntemini çağırmak ve XML dizesini geçirmektir. Sunucu XML isteğinizi alır ve (ön çalışmanızı yaptığınızı varsayarak) XML'i kabul eder, ayrıştırır ve size bir yanıt gönderir. Her şey bundan ibarettir -- birkaç kod değişikliği yapılmış XML istekleri.



XML gönderilmesi: İyi mi, kötü mü?

XML yanıtları için XML isteklerini (ve bu makaleyi) terk etmeden önce, isteklerinizdeki XML kullanımının hassasiyeti üzerinde biraz duralım. XML'in aktarım açısından hiçbir şekilde en hızlı veri biçimi olmadığından söz etmiştim, ancak üzerinde düşünülmesi gereken daha birçok nokta var.

XML'in oluşturulması basit değildir

Fark etmeniz gereken ilk şey, XML'in isteklerde kullanmak üzere kolayca oluşturabileceğiniz bir şey olmadığıdır. Liste 2'de gördüğünüz gibi verileriniz, XML semantiğiyle hızlı bir şekilde karmaşıklaşabilir:

var xmlString = "<profile>" +
  "  <firstName>" + escape(firstName) + "</firstName>" +
  "  <lastName>" + escape(lastName) + "</lastName>" +
  "  <street>" + escape(street) + "</street>" +
  "  <city>" + escape(city) + "</city>" +
  "  <state>" + escape(state) + "</state>" +
  "  <zip-code>" + escape(zipCode) + "</zip-code>" +
  "</profile>";

Bu çok kötü görünmeyebilir, ancak bunun yalnızca altı alanı olan bir XML parçası olduğu da unutulmamalıdır. Geliştireceğiniz Web formlarının çoğunda 10 - 15 arasında alan olacaktır; tüm isteklerinizde Ajax kullanmasanız da, bu noktayı göz önünde bulundurun. En azından gerçek verilerle harcadığınız kadar zamanı köşeli ayraçlarla ve biçim imi adlarıyla harcarsınız ve küçük hatalar yapma olasılığınız oldukça yüksektir.

Buradaki başka bir sorun da -- önceden de belirttiğim gibi -- bu XML'i el ile oluşturmanız gerektiğidir. Bir DOM nesnesini, istek olarak gönderebileceğiniz bir dizeye dönüştürmek için iyi ve basit yöntemler olmadığı için DOM'nin kullanılması iyi bir seçenek değildir. Bu nedenle, bunun gibi dizelerle çalışmak en iyisidir -- ancak bu, aynı zamanda yeni geliştiriciler için gerçekleştirilmesi ve anlaşılması en zor seçenektir. Bu örnekte, tüm XML'i tek bir satırda oluşturdunuz; bunu birkaç adımda yaptığınızda her şey daha karmaşıklaşır.

XML, isteklerinize hiçbir şey eklemez

Karmaşıklık sorununun ötesinde, istekleriniz için XML kullanmak, düz metin ve ad/değer çiftleriyle karşılaştırıldığında size gerçekten fazla avantaj (sağlayacağı herhangi bir avantaj varsa) sağlayacak değildir. Bu makaledeki her şeyin, ad/değer çiftlerini kullanarak gönderebileceğiniz verilerle aynı verileri almaya (Liste 1'e bakın) ve bunları XML ile göndermeye odaklandığını düşünün. Hiçbir noktada XML ile gönderebileceğiniz bir şeyi düz metin kullanarak gönderemeyeceğiniz belirtilmedi; bunun nedeni, hemen hemen hiçbir zaman XML kullanarak gönderebileceğiniz bir şeyi düz metin kullanarak gönderememenizin söz konusu olmamasıdır.

Ve bu, gerçekten de XML ve istekler ile ilgili ana noktadır: Çok seyrek olarak bunu yapmanızı gerektirecek bir durumla karşılaşırsınız. Bu dizinin bir sonraki makalesinde, bir sunucunun düz metin kullanarak yaparken çok zorlanacağı bazı şeyleri yapmak için XML kullanabileceğini göreceksiniz; ancak, istekler söz konusu olduğunda bu durum geçerli değildir. Yalnızca XML kabul eden bir komut dosyasından söz etmiyorsanız (çok az da olsa bunlardan var), hemen her istek durumunda düz metin kullanmanız daha iyi olacaktır.


Sonuç

Kesinlikle Ajax içindeki XML'i anlamaya başladığınızı hissediyor olmalısınız. Ajax uygulamalarının XML'i kullanmak zorunda olmadıklarını ve XML'in veri aktarımı için bir çeşit sihirli araç olmadığını biliyorsunuz. Bir Web sayfasından bir sunucuya XML gönderme konusunda da oldukça rahat olmalısınız. Daha da önemlisi, bir sunucunun isteklerinizi gerçekten işleyeceğinden ve yanıtlayacağından emin olmak için neler yapılması gerektiğiniz biliyorsunuz: Sunucu komut dosyasının XML'i ve XML'in verileri gönderdiğiniz biçimini kabul ettiğinden emin olmalısınız.

XML'in neden isteklere ilişkin veri biçimi için her zaman harika bir seçim olmadığı konusunda da artık iyi bir fikriniz olmalı. Gelecek makalelerde, XML'in yardımcı olduğu bazı durumları, ancak çoğu istekte, her şeyi yavaşlattığını ve karmaşıklaştırdığını göreceksiniz. Dolayısıyla, genellikle bir makalede öğrendiklerinizi hemen kullanmaya başlamanızı önerdiğim halde, burada öğrendiklerinizi kullanma konusunda çok dikkatli olmanızı öneriyorum. Ajax uygulamalarında XML isteklerinin yeri vardır, ancak bu yer, düşündüğünüz kadar geniş değildir.

Bu dizinin bir sonraki makalesinde, sunucuların XML kullanarak nasıl yanıt verdiklerini ve Web uygulamalarınızın bu yanıtları nasıl işleyebildiklerini göreceksiniz. Neyse ki, bir sunucunun Web uygulamasına XML göndermesi için, bunun tam tersinden daha çok sayıda neden vardır; bu yüzden, o makalenin teknik ayrıntılarını daha fazla kullanacaksınız; şimdilik, XML'in neden her zaman harika bir fikir olmadığını (en azından istekleri gönderirken) anladığınızdan emin olun. İsteklere ilişkin veri biçimi olarak XML kullanan bazı Web uygulamalarını denemek ve gerçekleştirmek ve daha sonra düz metne dönmek ve hangisinin sizin için daha hızlı ve kolay geldiğini belirlemek isteyebilirsiniz. Bir sonraki makaleye kadar çevrimiçi kalın.



Kaynaklar

Bilgi Edinme
  • Ajax'ta Uzmanlaşma: Bu dizinin önceki makalelerini okuyun.

  • XML: Çeşitli teknik makaleler ve ipuçları, senaryolar, standartlar ve IBM Redbook yayınları için developerWorks XML Zone sitesine bakın.

  • xml.com: Deneyimli bir XML programcısı değilseniz, XML konusunda anlaması en kolay çevrimiçi kaynaklardan biriyle başlayın.

  • "Build dynamic Java applications" (Philip McCarthy, developerWorks, Eylül 2005): Java™ bakış açısıyla Ajax'a sunucu tarafından bir bakış.

  • "Java object serialization for Ajax" (Philip McCarthy, developerWorks, Ekim 2005): Ağ üzerinden nesne gönderme ve Ajax ile etkileşimde bulunma konularını Java bakış açısıyla inceler.

  • "Call SOAP Web services with Ajax" (James Snell, developerWorks, Ekim 2005): Ajax'ın var olan SOAP tabanlı Web hizmetleriyle bütünleştirilmesine ilişkin bu ileri düzey makaleyi inceleyin; Ajax tasarım şablonunu kullanarak Web tarayıcısı tabanlı SOAP hizmetleri istemcisini nasıl uygulayacağınızı gösterir.

  • World Wide Web Consortium'daki DOM Ana Sayfası: DOM ile ilgili her şeyin başlangıç noktasını ziyaret edin.

  • DOM Level 3 Core Specification (DOM Düzey 3 Çekirdek Belirtimi): Çeşitli dillerden Belge Nesne Modeli'nin kullanabileceği tipleri ve özellikleri kullanarak çekirdek DOM'yi tanımlayın.

  • ECMAScript language bindings for DOM (DOM için ECMAScript dil ilişkilendirmeleri): Bir JavaScript programcısıysanız ve kodunuz için DOM kullanmak istiyorsanız, Düzey 3 Belge Nesne Modeli Çekirdeği tanımlarına ilişkin bu ek ilginizi çekecektir.

  • "Ajax: A new approach to Web applications" (Jesse James Garrett , Adaptive Path, Şubat 2005): Ajax moniker teriminin ilk kez kullanıldığı bu makaleyi okuyun -- tüm Ajax geliştiricileri bu makaleyi okumalıdır.

  • developerWorks teknik etkinlikleri ve Web yayınları: Teknik geliştiricilere yönelik bu yazılım brifinglerini takip edin.

  • developerWorks Web geliştirme alanı: Web oluşturma becerilerinizi makaleler, senaryolar, forumlar, vb. araçlarla genişletin.


Ürün ve teknoloji edinme
  • Head Rush Ajax, Brett McLaughlin (O'Reilly Media, 2006): Bu makaledeki fikirleri Head First yöntemiyle öğrenin.

  • Java and XML, Second Edition (Brett McLaughlin, O'Reilly Media, Inc., 2001): Yazarın XHTML ve XML dönüşümleriyle ilgili görüşlerini okuyun.

  • JavaScript: The Definitive Guide (David Flanagan, O'Reilly Media, Inc., 2001): JavaScript ve dinamik Web sayfalarıyla çalışmaya ilişkin kapsamlı yönergeleri inceleyin. Yayınlanacak olan yeni basımda Ajax ile ilgili iki yeni bölüm vardır.

  • Head First HTML with CSS & XHTML (Elizabeth and Eric Freeman, O'Reilly Media, Inc., 2005): Standartlaşmış HTML ve XHTML ve CSS'yi HTML'ye uygulamayla ilgili daha fazla bilgi öğrenin.

  • IBM deneme yazılımı: developerWorks'deki yazılımı doğrudan yükleyerek bir sonraki geliştirme projenizi oluşturun.


Tartışma


Yazar hakkında

Brett McLaughlin'in fotoğrafı

Brett McLaughlin, Logo günlerinden bu yana bilgisayarlarla ilgili çalışmalar yapmaktadır (Küçük üçgeni hatırlıyor musunuz?) Son yıllarda, Java ve XML topluluklarında en çok tanınan yazarlardan ve programcılardan biri oldu. Kendisi, Nextel Communications şirketi için karmaşık kurumsal sistemler uygulaması, Lutric Technologies için uygulama sunucuları yazma görevlerini üstlendi ve en son O'Reilly Media, Inc. için önemli kitaplar yazma ve yayına hazırlama işlerini yürütüyor. Brett'in, yeni kitabı Head Rush Ajax, Ajax'a Head First adlı ödüllü ve yenilikçi bir yaklaşım getiriyor. Son kitabı Java 1.5 Tiger: A Developer's Notebook, Java teknolojisinin en yeni sürümüyle ilgili ilk kitap olma özelliğini taşıyor. Artık bir klasik olan Java and XML adlı kitabı ise, Java dilinde XML teknolojilerinin kullanılması üzerine en açıklayıcı çalışma olmaya devam ediyor.

İlgili Yazılar

Python Web çerçeveleri, Bölüm 1

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 4: UNIX sahiplik kuralları ve izinleri

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

developerWorks: Linux için dokunmaya duyarlı ekran kurulması

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan ikinci IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Geniş bir Linux kümesinin kurulması, Bölüm 1: Giriş ve Donanım Konfigürasyonu

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Python Web çerçeveleri, Bölüm 2: TurboGears ve Python ile Web geliştirmesi

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.