 |
|
 |
CGI Uygulamaları
CGI nedir?
Web geliştiriciler durağan sayfalardan, akıllı dinamik sayfalara geçmek istediklerinde,
kısa adı CGI olan Common Gateway Interface teknolojisini geliştirdiler. Bu geliştiricilerin
asıl istediği, Web sunucusu üzerinden sunucu tarafında programlar çalıştırabilmekti.
Bu yeni teknolojiye Common Gateway denilmesinin sebeplerinden en önemli üçü
şuydu:
- CGI programları sunucudan bağımsız olmalıydı
- CGI programları hemen her dille yazılabilmeliydi
- Hemen her istemcide çalışabilmeliydi
Dolayısıyla, CGI bir programlama dili değildir. Piyasadaki, bir girdiyi işleyip,
çıktı üretebilen her dil CGI programları geliştirmek için kullanılabilir. Örneğin
Perl, C, Python, Tcl, AppleScript, Shell script'leri geliştirme için en çok
tercih edilen dillerdir.
CGI programlarında temel fikir, uygulamaların mantık katmanının, sunucu tarafında
oluşturulmasıydı.
CGI programlarıyla neler yapılabilir?
Bir CGI programı genel olarak şu 4 adımdan geçer, ancak bunların bazıları her
uygulamada olmayabilir:
- Kullanıcıdan bilgi alma
- Alınan verilerin bir veritabanına işlenmesi
- İstenen verilerin veritabanından bir sorgu sonucu alınması
- Kullanıcıya işlenmiş bilgilerin gönderilmesi
Bu adımları kullanabilecek uygulama sayısı sınırsız gibidir. Birkaç örnek vermek
gerekirse:
- Öğrencilerin, isimleri ve numaralarıyla beraber almak istedikleri derslerin
kodlarını bir Web sayfasından girmesi, ve bunların bir veritabanına işlenerek,
öğrenci işleri ve danışmanları tarafından gözden geçirilmesi
- Siteyi ziyaret eden kişilerin bırakacağı e-posta adreslerine, sitedeki yeniliklerin
düzenli olarak postalanması
- Ziyaretçilerin, site hakkında görüşlerini bildirebileceği bir erişim formu
- Site hakkında anketler
- Yerel ağın bir program tarafından sürekli gözlenerek, sorunların bir Web
sayfasında gerçek zamanlı yayınlanması
- Site içi arama motorları (en kolaylarından biri olmasına rağmen hep ihmal
edilen bir özelliktir)
- Web tabanlı e-posta, haber öbekleri okuma/gönderme
- Web tabanlı stok yönetimi, muhasebe, iş akışı, proje yönetimi vb (biraz
zor olsa da)
- İçerik oluşturucuların, Web sayfalarını sunucuya koyması için, dosya yöneticisi
tarzı bir arabirim (bir örneği, ULAKBİM içinde kullanılmaktadır)
Hangi dili kullanmalıyız?
Yukarıda belirtildiği gibi, CGI programları için istenen birçok dil kullanılabilir.
Ancak Internet geliştiricilerinin kabul ettiği de facto standart Perl,
arkasından C'dir. Perl, neredeyse CGI'ın doğumundan beri kendine bu alanda pek
rakip tanımamaktaydı. Bunun birkaç sebebi vardı:
Perl'in Avantajları
- Perl öğrenmesi kolay bir dildir (yine de bazı programcılar kodlarını anlaşılması
çok zor şekilde yazmaktadır).
- Yukarıdaki sebeple, dünya üzerinde birçok geliştiricisi vardır ve karşılaşılan
sorunların çözümünü Internet üzerinden bulmak kolaydır.
- Yine aynı sebeple, varolan uygulamaları geliştirmek için, Perl bilen üniversite
öğrencileri, mühendisler vb birçok kişi görevlendirilebilir.
- CGI uygulamalarında en çok karşılaşılan görevlerden biri olan karakter dizilerinin
işlenmesi (string manipulation) için Perl çok güçlü bir dildir.
- Kendini kabul ettirmiş olması nedeniyle, Perl için yazılmış birçok modül
bulunmaktadır ve bunlar uzun zamandır kullanıldığı için karşılaşılabilen birçok
sorunun çözümü test edilmiş ve sağlamlaşmışlardır.
Windows NT'nin dünyada genel yükselişiyle birlikte, Perl/C CGI programlarının
karşısına ASP teknolojisi çıkmıştır, ve hızla yükselmiştir. Temelde ASP, CGI'dan
biraz farklı da olsa (bkz. CGI'ın alternatifleri kısmı) mantık olarak, yine
sunucu tarafında program çalıştırmak amacıyla yaratılmıştı. Ancak, Microsoft'dan
memnun olmayan bazı geliştiriciler, ASP'ye karşılık olarak, kaynak kodu açık
olarak gelen PHP dilini yaratmışlardır. PHP, kendisinden önceki dillerin en
iyi özelliklerini toplaması ve bir programcının bekleyebileceği birçok fonksiyonu
hazır olarak sunması nedeniyle, kısa zamanda bir patlama yapmış, ve Netcraft'ın
istatistiklerine göre yaklaşık 1,400,000 sunucudan 400,000'inde çalışır olmuştur.
PHP'nin avantajlarını saymak gerekirse:
PHP'nin avantajları
- Perl gibi, öğrenmesi kolay ve yazılımı JavaScript ve Perl'e benzer bir dildir.
- Internet üzerinde geliştiricisi çoktur ve PHP'yle yazılmış birçok paket
çözüm, bedava olarak Internet'den indirilebilir.
- Apache Web sunucusuyla çok iyi tümleşikliği nedeniyle, performansı yüksektir
ve hem "Guru" geliştiricilerin, hem de programlamaya yeni başlayanların
işini çok kolaylaştırmaktadır.
- PHP, ana hedefleri bedava, açık kaynak kod, sunucu tarafı çalışma, benzer
dillerdeki eksiklikleri giderme ve en önemlisi Hipermetin işleme olan bir
dildir. Zaten PHP ismi de PHP: Hypertext Preprocessor
kısaltmasından gelir.
- PHP'ye eklenen özellikler, kullanıcılarından gelen istekler doğrultusunda
olmaktadır. Eklenmesini istediğiniz bir özelliğin, geliştiricilere bir e-posta
atarak bir sonraki sürümde (ki bu 2-3 ay gibi sıkça olmaktadır) dile bütünleştirilmesini
isteyebilirsiniz.
Genel olarak hangi dilin seçileceği, aslında bir mühendislik problemi gibidir
ve şu soruların cevaplarında saklıdır:
- Platform seçimi:
Bu genel olarak bir işletim sistemi ve Web sunucusu seçimidir. Bazı diller,
işletim sistemi seçildiği anda dışarıda kalmaktadır. Örneğin, MacOS dışında
bir seçim yapıldığı anda AppleScript de dışarıda bırakılmaktadır. Genel olarak
Web sunucularında, sağladıkları yüksek güvenlik ve sağlamlık nedeniyle, Unix
ve türevi işletim sistemleri seçilmelidir. Örneğin, Solaris, HP-UX, Linux
ve FreeBSD sunucu olarak en çok kullanılan Unix sistemleridir.
- Dil seçimi:
Kendini kabul ettirmiş birçok dil, birden fazla işletim sistemine taşınmıştır.
Örneğin Perl ve C, varolan bütün işletim sistemlerinde vardır.
- Uygulamanın çalıştırılma sıklığı:
Eğer yazılacak uygulama, sunucunuzun bütün trafiğini önişlemden geçiriyorsa,
ya da 1 gün içinde 100,000 gibi bir sıklıkta çalışmak zorundaysa, yorumlanan
(interpreted) diller yerine (Perl, Python, Tcl, PHP, kabuk programları vb)
derlenen (compiled) dillerin (C/C++ vb) kullanılması daha yerinde olur.
Tersi durumu ele alırsak, uygulamaların, sunucuya çok fazla yük bindirmeyeceği
biliniyorsa, yorumlanan diller işin daha kısa sürede yapılmasını sağlarlar,
çünkü yorumlananan dillerin yapısı genel olarak daha basittir. Ancak bu durumda
dilin basitliği nedeniyle kendine fazla güvenen acemi geliştiricilerin hata
yapma olasılığı artar.
- Örnek kodların ve harici modüllerin bulunabilirliği:
Özellikle büyük uygulamaların yazılımında, eğer bu iş için ayırabilecek yeterli
personeliniz yoksa, örnek kodlar çok işinize yarayacaktır. Bu kodları inceleyerek,
programınıza uygun kısımları kendi kodunuzun içine yapıştırabilir, ya da teknikleri
inceleyerek ilham alabilirsiniz. Eğer programın belli kısımlarını yazamayacak
gibiyseniz, ya da dahası, bu işi yapan modüller piyasada mevcutsa, bu modülleri
programınızın içine tümleştirebilirsiniz. Örneğin Java için, piyasada birçok
hazır modül bulunmaktadır. Ayrıca, bu modüller Internet üzerinden de ücretsiz
olarak kullanıma açılmış olabilir. Özellikle Perl için konuşmak gerekirse,
birçok kütüphane Internet'te mevcuttur. Bu modüllerin birçoğu yukarıda da
belirtildiği gibi, uzun süredir kullanımda olduğu için, güvenirlikleri, milyonlarca
kullanıcı tarafından ve birçok farklı durum için test edilmiştir.
- Sisteme tümleştirme:
Yeni yazacağınız programlar, sisteminizde bulunan diğer programlarla iletişim
kurmak zorundaysa, bu da dil seçiminizi etkileyecektir. Örneğin elinizde RMI
üzerinden veri bekleyen bir Java programı varsa, bu programla CGI programınız
arasında bağlantı kurmak için sizin programınızı da Java'yla yazmanız akıllıca
olur. Bir C ya da Perl programıyla şansınızı denemek için, Java RMI tariflerine
%100 uyan bir modül yazmanız gerekecektir.
Yorumlanan diller mi, derlenen diller mi?
Yorumlanan dillerin en büyük dezavantajlarından biri kullanıcıdan gelen verilerin,
komut satırına aynen aktarılabilmesidir. Ayrıca, bir dezavantaj da programların
kodlarının ve çalışır hallerinin aynı olmasıdır, halbuki derlenen dillerde,
çalışan programı ele geçiren biri kaynak kodunu ele geçirmediği için programı
kolayca inceleyemez ve güvenlik deliklerini bulamaz. Son olarak, yorumlanan
dillerin çalışma hızı derlenen dillere göre daha yavaştır.
Derlenen dillerin hızlarına rağmen büyük dezavantajı da daha uzun geliştirme
süresi, programa kısıtlı kişilerin müdahalesi gibi sorunlardır.
Ancak burada iki noktayı belirtmek gerekir, bu durum yavaş yavaş değişmektedir.
Apache sunucusu için geliştirilen mod_perl ve mod_php modülleriyle, yorumlanan
diller sunucu tarafından çok daha hızlı çalıştırılabilirler. Ayrıca, perl'deki
tainting gibi mekanizmalarla, güvenlik konusunda ciddi adımlar da atılmıştır
ve komut satırına gönderilen verilere kısıtlamalar getirilebilir.
Dolayısıyla, yorumlanan diller (artık çok az) daha yavaş olsa da, çok kısa
zamanda uygulama geliştirilebilmeleri nedeniyle derlenen dillere tercih edilebilirler.
Hangi Web sunucularında CGI çalıştırabiliriz?
Piyasadaki birçok Web sunucusu CGI programlarının çalıştırılmasına izin vermektedir.
Belli başlıları:
- Apache Web sunucusu:
Internet » http://www.apache.org/
Apache Software Foundation'ın geliştirdiği bu sunucu, temellerini NCSA'in
Web sunucusundan almıştır, ancak zamanla artan ilgi nedeniyle, geliştiriciler
bu sunucuyu sürekli geliştirmiş, site yöneticileri de hem bedava olması, hem
birçok özelliği desteklemesi, hem de performansının iyi olması nedeniyle Apache'ye
çok rağbet göstermişlerdir. Kaynak kodunun açık olması nedeniyle, güvenlik
delikleri sadece kendi geliştiricileri tarafından değil, 3. grup geliştiriciler
tarafından da hızla kapatılmaktadır. Birçok site, kaynak kodu kendilerine
göre değiştirerek, ihtiyaçlarına daha iyi cevap vermesini sağlamaktadır. Apache,
CGI programlarının çalıştırılması için de ideal ve hızlı bir sunucudur. Ayrıca,
Java, XML, Perl, PHP gibi dillere, yüklediği modüllerle yerleşik destek (native
support) de sunabilmektedir. 2.0 sürümüyle Apache'ye multi-threading özelliği
de eklenecektir. Bu nedenlerle Apache, şu an dünyada %62 gibi bir pazar payına
sahiptir.
- Microsoft IIS:
Internet » http://www.microsoft.com/iis/
Microsoft, Windows NT makineleriyle bedava olarak dağıttığı IIS'le küçümsenmeyecek
bir pazar payına kavuşmuştur. ASP teknolojisinin (bkz. CGI'ın alternatifleri
bölümü) de, IIS'in kabul görmesinde rolü olmuştur. IIS, kolay kullanımı ve
epey yüksek performansıyla dikkat çekmektedir. Ayrıca, Frontpage HTML düzenleyicisi
için de yerleşik destek sunmakta, ve bu düzenleyiciyle yazılmış sayfaların
sunucuya aktarılması çok kolaya olmaktadır. Ancak, IIS'in en büyük sorunlarından
biri kendisinden kaynaklanan güvenlik problemleri, diğeri de çalışmak zorunda
olduğu Windows işletim sisteminden kaynaklanan problemleridir.
- Netscape Enterprise ve Fasttrack sunucuları:
Internet » http://www.iplanet.com/products/infrastructure/web_servers/
Netscape, istemci tarafında başlattığı ateşi sürdürememesine rağmen, sunucu
tarafında daha başarılı olmuştur. Netscape sunucularının iki sürümü vardır
ve her ikisi de varolan birçok işletim sisteminde çalışabilirler. Bu ailenin
birincisi, küçük firmalar ve Intranet'ler için tasarlanan Fasttrack'dir. Fasttrack,
aşağıda da bahsedilen SSJS teknolojisiyle birlikte gelmektedir. Bütün yönetimi
Web tabanlı bir arayüzden yapılabilmektedir. Abisi sayılabilecek Enterprise
(yeni adıyla iPlanet Web Server) sa durağan sayfa performansı yüksek, ancak
CGI performansı aynı oranda yüksek olmayan bir sunucudur. Ayrıca birden fazla
sanal alanın (virtual domain) olduğu bir ortamda performansı gittikçe düşmektedir.
Dünyadaki kullanım açısından, Apache ve IIS'in arkasından, 3. sıradadır. Her
iki sunucu da multi-threaded çalışmaktadır.
- WebSite Pro:
Internet » http://www.oreilly.com/catalog/webpro2/
O'Reilly firmasının yazdığı birçok özelliği destekleyen ancak yeterince taraftar
toplayamamış bir sunucudur. 2.0 sürümüyle beraber özel (custom) sunucu tarafı
HTML etiketleri, ISAPI (Microsoft'un IIS için geliştirdiği bir API) desteği,
Java Server Pages ve Servlet, VBScript, JScript, Perl ve Python desteği de
sunmaktadır. WebSite'ın benzeri olan IIS'in gerisinde kalmasının en büyük
nedeni, IIS'in bedava, WebSite'ınsa 800$ dolar civarında olmasıdır. WebSite
Pro üzerinde, CGI programları orta denebilecek bir performansda çalışmaktadır.
- Zeus Web sunucusu:
Internet » http://www.zeus.co.uk/
Zeus, Web sunucusu, yanına bile yaklaşılamayan yüksek bir performans sunmaktadır.
CGI/Fast CGI, ISAPI, NSAPI, Servlet, RMI, Frontpage Eklentileri, 128 bit güvenlik
vb gibi birçok teknolojiyi desteklemektedir. Zeus, son araştırmalara göre
pazar payını gittikçe yükseltmektedir. 30 günlük bir deneme sürümü mevcuttur.
Örnek bir CGI programı neye benzer?
Aşağıda aynı programın hem Perl hem de PHP karşılıkları vardır. Kodlar, sadece
tanıtım amaçlı olduğu için uzun tutulmamıştır, ancak bir fikir vereceğini tahmin
ediyorum.
Görev: Bir Web sayfasındaki formdan alınan verinin bir düz metin dosyasına
eklenmesi.
Kullanılan HTML kodu
|
<html>
<head>
<title>Veri giriş formu</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-9">
</head>
<body>
<form action="/cgi-bin/ilk-perl.pl">
<p>İsminiz: <input type="text"
name="isim">
<p>E-postanız: <input type="text"
name="eposta">
<p><input type="checkbox"
name="yeniler" value="gonder">
Yeni haberleri bana da gönder
<p><input type="submit" value="Gönder">
</form>
</body>
</html>
|
Perl çözümü (Dosya yerleri Unix, Linux vb için verilmiştir):
|
#!/usr/local/bin/perl
# bu dosyanin adı ilk-perl.pl olmalı, yukarıya bakınız.
# perl programlarında 1. satır hariç, başında # olan
# satırlar işleme sokulmazlar
# bu yorum satırları, okunurluğu arttırmak içindir.
# 1. satırdaki komut, perl programının diskte nerede
# durduğunu belirtir, bu satır olmadan programınız çalışmaz.
# istemciye göndereceğimiz çıktı başlıyor
# bu satırla istemciye bir HTML çıktısı gönderdiğimizi
# belirtiyoruz, aksi takdirde istemci, HTML kodlarını da
# olduğu gibi ekrana basar
print "Content-type: text/html\n\n";
# CIKTI_SONU karakterlerini görene kadar bütün herşeyi gönder
print <<CIKTI_SONU;
<html>
<head>
<title>CGI çıktısı üretiyoruz</title>
</head>
<body>
<h4>Verdiğiniz bilgileri kaydediyorum, lütfen bekleyin</h4>
CIKTI_SONU
$depo = $ENV{'QUERY_STRING'};
@ciftler = split(/&/, $depo);
# verilerin tutulacagi dosyayı açmaya çalış, hata çıkarsa bas
# >> işareti dosyanın sonuna ekleme yapılacağını gösterir
# $! varsa dönen hatayı basar
open (VeriDosyasi, ">>/home/cu/veri.txt") or die "Dosyayı
açamıyorum: $!";
# formdan gelen bilgilerin herbiri için...
foreach $cift (@ciftler){
($alan, $deger) = split(/=/, $cift);
print VeriDosyasi "$alan=$deger\n";
print "Şu anda yazılan alan: $alan, değeri:$deger<br>\n";
}
# dosyayı kapat
close (VeriDosyasi);
# kullanıcıya teşekkür et
print <<CIKTI_SONU;
<p>Bilgileriniz başarıyla kaydedildi, teşekkür ederiz
</body>
</html>
CIKTI_SONU
# programın sonu
|
PHP çözümü (Dosya yerleri Unix, Linux vb için verilmiştir):
|
<?
// bu dosyayı ilk-php.php adıyla kaydederseniz, yukarıdaki
// html kodunda form action'ı da ilk-php.php yapmalısınız.
// php'deki yorumlar C++'a benzer
// hem tek satırlık // yorumları
// hem de ve */ blok yorum ikilisini kullanabilirsiniz.
// aslında aşağıdaki satıra PHP modül olarak kurulmuşsa
// gerek yoktur, PHP bunu otomatik olarak ekler
header("Content-type: text/html");
/*
yukarıdaki ve aşağıdaki <? ve ?> ikilileri,
php bloklarının başını ve sonunu ifade ederler.
*/
?>
<html>
<head>
<title>CGI çıktısı üretiyoruz</title>
</head>
<body>
<h4>Verdiğiniz bilgileri kaydediyorum, lütfen bekleyin</h4>
<?
// fopen'ın "a" parametresi, dosyanın sonuna ekleme
// yapılacağını belirtir
$VeriDosyasi = fopen("/home/cu/veri.txt", "a");
while (list ($alan, $deger) = each ($HTTP_GET_VARS)) {
echo "Şu anda yazılan alan: $alan, değeri:$deger<br>\n";
fwrite($VeriDosyasi, "$alan=$deger\n");
}
// dosyayı kapat
fclose($VeriDosyasi);
?>
<!-- kullanıcıya teşekkür et -->
<p>Bilgileriniz başarıyla kaydedildi, teşekkür ederiz
</body>
</html>
<!-- programın sonu -->
|
Her iki program da, açılan dosyaya şuna benzer 3 satır ekler:
|
Perl çıktısı
|
PHP çıktısı |
|
isim=Cuneyt%20Yılmaz
eposta=cu%40ulakbim.gov.tr
yeniler=Gönder
|
isim=Cuneyt Yılmaz
eposta=cu@ulakbim.gov.tr
yeniler=Gönder |
Perl'den farklı olarak PHP, otomatik olarak % işaretleriyle şifrelenen (URL
encoded) karakterleri orjinalleriyle değiştirir. Yani cu%40ulakbim.gov.tr
-> cu@ulakbim.gov.tr olur.
Perl için söylenebilecek önemli bir husus, hemen her Perl programcısının
kendi stilini geliştirebilme esnekliğidir. Yukarıda verilmiş Perl kodu, istenen
işi yapan tek Perl programı değildir, sadece tanıtım amacıyla yazılmıştır.
Yukarıda gizli şekilde belirtildiği gibi, her CGI programı çıktısına bir
başlık eklemek ve çıktının MIME tipini belirtmek zorundadır, ör. Content-type:
text/html ya da Content-type: image/gif gibi. Bu şekilde, istemcinin tarayıcısı
gelen veriyi ne şekilde ekrana dökeceğini bilecektir.
Nelere dikkat etmeliyiz?
CGI programlarında genel olarak unutulan en önemli husus, işlenen verinin ham
veri değil, bir kullanıcının girdiği bilgiler olduğudur. Dolayısıyla programcı
karşı tarafta rastgele bir bilgi kaynağı değil, bir insan olduğunu hatırlamalıdır.
- Güvenlik:
CGI programları Web sunucusunun çalıştığı makineyi normale göre daha güvensiz
hale getirebilir. Internet'te bulunan birçok makine CGI programlarının güvenlik
delikleri nedeniyle kırılmıştır ya da geçici süreler için işlemez hale getirilmiştir.
Dikkat edilmesi gereken hususlar Web sitesinin
ve CGI programlarının güvenliği belgesinde anlatılmıştır.
- Hız ve bellek kullanımı:
Programlarınızı yazarken mümkün olduğu kadar hızlı çalışması ve az bellek
kullanması için eniyileştirme (optimization) yapmalısınız. Makineniz, 1 istemci
için gerekli CGI programını çalıştırırken, diğer 10 istemcinin isteğini bekletmemelidir.
- Taşınabilirlik:
Uygulamalarınızı yazarken mümkün olduğu kadar kullanılan işletim sistemi ve
Web sunucudan bağımsız olmasına dikkat ediniz. Bu şekilde, günün birinde kullandığınız
işletim sistemi veya sunucuyu değiştirmek zorunda kaldığınızda (bu yavaşlık,
sistemin çok açığı olması, yeni sürümlerin çıkması, bir göçme durumunda yedek
sunucuya aktarma vb yüzünden olabilir) programlarınızı küçük değişikliklerle
çalıştırmanız mümkün olur.
- Kodları tekrar kullanım (Code reusability):
Uygulamanız birden fazla program kullanıyorsa, ortak parçalarını tek bir modül
altında toplamaya çalışınız. Bu şekilde hem kodların yönetimi daha kolay olur,
hem de bazı kritik hataları her programcıkta düzeltmeniz gerekmez. Aksi takdirde,
bir programda kapattığınız bir hata, başka bir programda düzeltilmemiş haliyle
kalabilir.
- Hatasız (Bug-free) programlar ve Sınama aşaması:
Programınızı dış dünyaya açmadan önce mutlaka olarak, programcıların dışında
sınamacılara veriniz. Bu şekilde programcıların fark edemediği hataları, bu
kişiler bulabilirler. Bu hatalar, güvenlik delikleri açabileceği gibi istemciye
istenmeyen çıktılar göndebilir ya da veri tabanındaki bilgilerin bütünlüğünü
bozabilir. Ayrıca programlarınızda verdiğiniz değişken kapasitelerinin üzerinde
değerler vererek, programınızın beklenmedik durumlarda nasıl davrandığını
inceleyiniz.
- Siteye bütünleştirme:
Mümkünse CGI uygulamalarınızı sitenizin genel görünümünü bozmayacak çıktılar
üretecek şekilde programlayınız. Bunu yaparken şablonlama sistemi kullanırsanız,
sitenizin görünümü değiştiğinde, CGI uygulamalarınızı yeni görünüme kolayca
adapte edebilirsiniz.
CGI'ın alternatifleri nelerdir?
Aslında CGI'ın birçok "alternatifi" vardır. Bunların bir kısmı temel
olarak CGI prensibiyle çalışmasına rağmen, farklı isimler almışlardır. Bu nedenle
aşağıdaki teknolojileri, CGI'dan farklı nitelendirmemin sebebi, genel olarak
CGI dendiğinde Apache/Perl ya da Apache/C ikililerinin kastediliyor olmasıdır.
- SSJS - ServerSide JavaScript:
Netscape firmasının ilk defa Livewire ürünüyle birlikte ortaya attığı
bir teknolojidir. İstemci tarafında çalışan ve büyük kabul gören JavaScript
dilinin sunucu tarafında da çalışabilir bir sürümüdür. Programlar, sunucu
tarafında HTML sayfalarına gömülebilen JavaScript kodlarından oluşur. Sunucu,
bu kodları yorumlar, çıktıyı üretir ve istemciye saf HTML kodu gönderir.
Internet » http://developer.iplanet.com/tech/ssjs/
- Artıları: İstemci tarafında çalışan JavaScript'ün tüm özellikleri yanısıra,
dosya okuma/yazma ve gelişmiş oturum yönetimi (session management) fonksiyonları
sağlar. Veritabanı bağlantısı olarak ODBC, Oracle, Informix ve Sybase
arabirimleri sağlar. Birçok Unix ve Windows sunucu ortamlarında çalışabilir.
- Eksileri: Uygulamalar, site genelinde çalıştırılamaz. Her uygulamanın
kendine has bir dizini olmalıdır, ve sadece Netscape Web sunucularında
(Netscape Fasttrack, Enterprise Server, yeni adıyla iPlanet Web Server
vb) çalışabilir. Her ne kadar derlense de SSJS de aynı JavaScript gibi
yorumlanan bir dildir. Ayrıca, uygulamaların çalıştırılmadan önce derlenmesi
ve yönetim konsolundan tekrar başlatılması gerekir.
- ASP - Active Server Pages:
Microsoft firmasının aynı SSJS gibi sunucu tarafında çalışan script dili
çözümüdür. ASP de belli bir programlama diline bağlı değildir, IIS üzerinde
çalıştırılabilen her dili kullanabilir.
Internet » http://msdn.microsoft.com/
- Artıları: ASP, SSJS'den farklı olarak kendisi için aktarılan her dille
(ör. JavaScript, JScript, VBScript, hatta gerekli modüller kurulursa Perl,
PHP vb) geliştirilebilir. Uygulamalar gerekirse bileşen (component) haline
getirilebilir ve diğer uygulamalar içinden çağırılabilir. Ayrıca, ASP
programlamaya, Windows NT işletim sistemiyle gelen IIS sunucusunu kurar
kurmaz başlayabilirsiniz.
- Eksileri: Sadece Microsoft'un Web sunucularında çalışır, ve Windows
NT ve türevlerine bağımlıdır. ASP de SSJS gibi yorumlandığı için yerleşik
koddan (native code) yavaş çalışır. Şu aralar geliştirilmeye çalışılsa
da, Apache Web sunucusunda çalışmamaktadır. (Visual Studio 6.0 içindeki)
2.0 sürümü itibariyle CORBA, SMTP, POP, IMAP, LDAP ve XML desteği yoktur.
- Lotus Notes/Domino:
IBM-Lotus firmasının önceleri Groupware için geliştirdiği, sonradan Internet
ortamına uyarlamaya çalıştığı hızlı uygulama geliştirme platformudur. Kendisine
has bir döküman yönetim sistemine sahiptir,ve kısıtlı da olsa bir veritabanı
gibi kullanılabilir.
Internet » http://www.lotus.com/
- Artıları: Lotus Notes/Domino, geliştiricilere basitleştirilmiş bir arabirim
sunar ve birçok uygulama, klavyeye dahi dokunmadan yazılabilir. Ayrıca,
Domino sunucu ailesinde birçok paket çözümler sunulmaktadır.
- Eksileri: Lotus Notes, öncelikle kendi içine kapalı bir sistemdir. Uygulama
geliştiricilerin, sunucuda birçok alana müdahalesi, veritabanındaki bilgileri
SQL uyumlu bir başka veritabanına aktarması zordur. Genel olarak, Intranet
uygulamalarına yönelik olduğu için Extranet'lerin bazı taleplerini karşılayamamaktadır.
Son olarak, bazı uygulamalar, Web tarayıcılarında çalışmamaktadır, bu
uygulamalar için Lotus Notes istemcisi kullanılmak zorundadır.
- ColdFusion:
Internet »
Allaire firmasının üzerinde dikkatlice düşünerek piyasaya sunduğu bir sunucu
tarafı uygulama geliştirme platformudur. ColdFusion uygulamaları ASP ve SSJS
gibi, HTML dosyalarının içine yerleştirilen ColdFusion etiketleri kullanılarak
yazılır, bu dile de CFML (ColdFusion Markup Language) denilmiştir.
Internet » http://www.allaire.com/Products/ColdFusion/
- Artıları: ColdFusion, Windows NT haricinde, belli başlı Unix işletim
sistemlerinde de çalışabilir ve programları sorunsuzca aktarılabilir.
Ayrıca, SQL, IMAP, POP, SMTP, LDAP, CORBA, XML destekleri yanında, Sunucu
kümeleme (server clustering), varolan Web sunucusuna (ör. Apache) entegrasyon,
CGI, ISAPI, NSAPI gibi teknolojilere de destek vermektedir. Son olarak,
piyasadaki en iyi HTML düzenleyicilerinden Homesite'la iyi bir bütünleşikliği
vardır.
- Eksileri: Yüksek maliyet (Haziran 2000 itibariyle 4995$), Unix sürümünün
zaman zaman göçmesi ve zayıf bellek yönetimi.
- JAVA:
Sun Microsystems firmasının Internet'de devrim yaratan dili. Asıl olarak,
taşınabilir cihazlar (avuçiçi bilgisayarlar, cep telefonları vb) ve elektronik
aletlerde (televizyon, çamaşır makinesi, müzik seti vb) kullanılmak üzere
tasarlandığı için platform-bağımsızlığı en büyük vaatlerinden biridir. Ancak,
daha sonra hedef büyütülerek, Java önce istemci tarafında çalışabilir bir
hale, sonra da sunucu tarafında çalışabilir bir hale getirilmiştir.
Internet » http://java.sun.com/
- Artıları: Java herşeyden önce platform-bağımsızdır. Yazılan uygulamalar,
işletim sistemi değiştirilse de hiçbir değişiklik yapılmadan yenisinde
de çalışabilir. Java, NYP-Nesne Yönelimli Programlama (Object Oriented
Programming)'ya dayanan bir dil olduğu için NYP'nin tüm avantajlarını
taşır. Dolayısıyla öğrenme süreci, NYP'ye tanıdık olanlar için çok yüksektir
ve Internet üzerinde geniş bir destekçi kitlesi vardır. Bu nedenle yeni
programların geliştirilmesi çok hızlı olmaktadır. Java, zamanla geliştirilerek
Java Server Pages (JSP) ve Servlet (Server ve Applet kelimelerinden türetme)
teknolojilerini destekler hale gelmiştir. JSP, ASP'ye çok benzeyen bir
teknolojidir. Ayruca, daha önce yazılmış Java, programların yenilerine
bütünleştirilmesi de çok kolay olmaktadır. Piyasada, hemen her tür isteği
karşılayabilecek modüller bulunmaktadır.
- Eksileri: Java, iddia edebildiği şeylerin hemen hepsini yapabilmesine
rağmen, halen çok yavaştır. Özellikle derlenmiş kodlara göre 20:1 gibi
bir fark oluşmaktadır. Ayrıca, Internet tarayıcılarının, özellikle Netscape
Communicator ve Internet Explorer'ın, Java destekleri birbirinden farklı
olduğu için, geliştiriciler istemci tarafı çalışan uygulamalarında sıkıntı
çekmektedirler. Bu normal olarak, sunucu tarafını etkilemese de, iki tarafın
arasındaki iletişimin istemci tarafı Java'ya dayandırılmaması akılcı olur.
Ayrıca bakınız:
Web sitesinin ve CGI programlarının güvenliği
|
 |
|
 |