| Editor Login | Register | ||
| > Bilgisayar > Web Programlama |
|
|
| 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ılabilmeliydiHemen her istemcide çalışabilmeliydiDolayı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 almaAlınan verilerin bir veritabanına işlenmesiİstenen verilerin veritabanından bir sorgu sonucu alınmasıKullanıcıya işlenmiş bilgilerin gönderilmesiBu 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çirilmesiSiteyi 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 formuSite hakkında anketlerYerel 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öndermeWeb 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
|
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |