Professional Documents
Culture Documents
Editör
Doç. Dr. OKTAY YILDIZ
Bu kitabın, basım, yayım ve sa ş hakları Atatürk Üniversitesi’ne ai r. Bireysel öğrenme
yaklaşımıyla hazırlanan bu kitabın bütün hakları saklıdır. Atatürk Üniversitesi’nin izni
alınmaksızın kitabın tamamı veya bir kısmı mekanik, elektronik, fotokopi, manye k kayıt veya
başka şekillerde çoğal lamaz, basılamaz ve dağı lamaz.
Copyright ©2022
The copyrights, publica ons and sales rights of this book belong to Atatürk University. All rights
reserved of this book prepared with an individual learning approach. No part of this book may
be reproduced, printed, or distributed in any form or by any means, techanical, electronic,
photocopying, magne c recording, or otherwise, without the permission of Atatürk University.
ATATÜRK ÜNİVERSİTESİ
AÇIK VE UZAKTAN ÖĞRETİM FAKÜLTESİ
İNTERNET PROGRAMCILIĞI II
ISBN: 978-625-8001-25-9
ERZURUM
1. Internetin Temelleri 4
Dr. Öğr. Üyesi MAHMUT KAYA
3. ASP 43
Dr. Öğr. Üyesi MAHMUT KAYA
4. ASP.NET: Giriş 65
Dr. Öğr. Üyesi ANIL UTKU
5. ASP.NET: CSharp 88
Dr. Öğr. Üyesi ANIL UTKU
Editör
• İnternet
• İnternetin Ortaya Çıkışı
İÇİNDEKİLER
sahibi olabilecek,
• İnternetin nasıl ortaya çıktığını
ve geliştiğini öğrenebilecek,
• Türkiye'de internet ağının
geçmişi ve bugünü hakkında fikir
sahibi olabilecek,
• Temel internet kavramları ve
protokollerini öğrenebilecek,
• Web teknolojisinin geçmişini ve
bugününü ve gelecekte nasıl
şekilleneceğini ÜNİTE
öğrenebileceksiniz.
1
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
İnternetin Temelleri
İnternet
İnternetin Ortaya
Çıkışı
İNTERNETİN TEMELLERİ
Türkiye’de
İnternetin Ortaya
Çıkışı ve
Yaygınlaşması
Temel İnternet
Kavramları
Web 1.0
Web 3.0
GİRİŞ
İnternet hayatımıza yerleştiğinden beri günlük hayatımızın her alanına etki
etmektedir. İnternet, kavramsal olarak bir bilgisayar veya herhangi bir elektronik
aygıtın; dünya üzerindeki milyarlarca bilgisayar veya elektronik aygıtlarla
haberleşmesini sağlayan genel bir elektronik iletişim ağına verilen isimdir. Bir
internet ağı üzerinde iletişim amacıyla yapılan veri aktarımı, standartlaştırılmış
belirli ağ protokolleri ile gerçekleştirilmektedir. Günümüzde internet sayesinde
eski haberleşme alışkanlıkları, bilgi aktarım kanalları değişmiş ve teknolojik yeni bir
döneme geçiş sağlanmıştır. Bu yeni dönem sayesinde bilgiye erişim kolaylaşmıştır.
Bilgiye erişimin ucuz, hızlı ve güvenilir olmasıyla beraber teknolojik ilerlemelerin
çok daha hızlı bir şekilde yapılabilmesi mümkün kılınmıştır.
İnternetin ilk ortaya çıkışı askeri çeşitli gereksinimlerle olmuştur. Birleşik
Devletler Savunma Bakanlığının (United States Department of Defense) birimler
arası haberleşmeyi sağlama amacıyla verdiği desteklerle yürütülen projeler
günümüz internet dünyasının temelini oluşturmaktadır. Başlangıçta askeri
amaçlarla gerçekleştirilen çalışmalar daha sonra sivil hayatta da kullanıma
sunulmuştur. Zamanla internet ağ alt yapısı ABD dışında Avrupa’ya da yayılmış ve
hızlı bir gelişim göstererek ticari amaçlı kullanımların da önünü açmıştır.
Bir internet kullanıcısı, internet servis sağlayıcıları tarafından sağlanan
bağlantı sayesinde bilgisayar veya akıllı cihazları kullanarak internet ağına erişim
sağlamaktadır. Bu kitap bölümünde öncelikle internet kavramının nasıl ortaya
çıktığı, dünyada ve Türkiye’de nasıl yayıldığı konusuna değinilmektedir. Daha
sonra temel internet kavramları hakkında bazı bilgilere yer vermektedir. Son
bölümde ise; web teknolojisindeki gelişmeler ele alınarak Web 1.0, Web 2.0 ve
Web 3.0 konuları ele alınmaktadır.
İNTERNET
İnternet, dünya üzerinde bulunan milyarlarca cihazın birbirine bağlandığı
ve iletişim kurabildiği küresel bağlantılı ağ sistemine verilen genel bir isimdir.
İnternet küresel Bilgisayarlar birbirleri arasındaki iletişimi, belirli standartlarla belirlenmiş olan
bağlantılı ağ sistemine çeşitli ağ protokolleri ile gerçekleştirmektedirler. Bilgisayar veya akıllı cihazlar
verilen genel bir internet servis sağlayıcılarından alınan hizmetlerle internet ağına erişim
isimdir. sağlamaktadırlar. Şekil 1.1’de verilen örnekte bir internet ağına bağlanan temsili
cihazlar görülmektedir.
İnternet ağı üzerinde bulunan her bir cihaz, IP (Internet Protocol) olarak
adlandırdığımız adres bilgisiyle diğer cihazlarla iletişim sağlamaktadırlar. Dünya
üzerindeki tüm cihazların birbiriyle haberleşme içerisinde olduğu bu ağ üzerinde,
bir standart haline gelmiş olunan TCP/IP ağ protokolü ile iletişim sağlanmaktadır.
TCP/IP ağ protokolü kullanılarak internet ağına bağlı olan cihazlar, farklı içerikteki
bireysel ve kurumsal web sayfalarına, sosyal medya sitelerine, finans sistemlerine,
dijital içeriklere, çevrimiçi oyun uygulamalarına vs. çok sayıda hizmete pratik, hızlı
ve güvenilir bağlantılarla erişim sağlamaktadırlar.
İnternet
Şekil 1.2. 1995 Yılı TRNET X.25 Bağlantı Yapısı (Özgit, 1995)
Intranet / Extranet
Intranet, kurum iç ağında paylaşımlar yapılmasını sağlayan, kendi sunucusu
ve güvenlik duvarı yazılımları olan kapalı ağ sistemlerine verilen isimdir. Bu ağa
bağlı olan bilgisayarlar, internete bağlı olmadığından dolayı dışardan erişime
kapalıdır. Her bilgisayarın kendine ait özel bir IP adresi bulunmaktadır.
Extranet, kurum içerisindeki bir ağdan başka bir ağa bağlanılmasına izin
veren özel ağ tipidir. Intranet’in daha genişletilmiş ve özelleştirilmiş bir ağı olup,
internet ağına erişimi yoktur. Bu ağ tipinde kurum ağından müşteri ağlarına
bağlanılarak çözümler üretmek, paylaşımlar yapmak mümkündür. Tablo 1.1.’de
IP
İnternette yer alan her bilgisayarın veya akıllı bir cihazın bir IP (Internet
Protocol) adresi bulunmaktadır. IP adresi haberleşme amacıyla TCP/IP kullanan bir
ağ üzerinde cihazların birbirini kolayca bulmasını sağlamaktadır. İnternete
İnternet ağına bağlı her bağlanan her bir cihaza internet servis sağlayıcısı tarafından IP adresi
cihazın bir IP adresi atanmaktadır. Dinamik IP adresi ve statik IP adresi olmak üzere iki türlü IP adresi
bulunmaktadır. bulunmaktadır. İnternet servis sağlayıcısından alınan hizmete göre IP adresi
dinamik veya statik olabilmektedir. Eğer servis sağlayıcıdan özel bir talepte
bulunulmamışsa, internet gezintilerinde dinamik IP adresleri kullanılmaktadır.
Dinamik IP adresi, internet servis sağlayıcısı tarafından bilgisayarın internet
ağına erişim sağladığı anda boşta olan herhangi bir IP adresinin bilgisayara
verilmesi ile gerçekleşmektedir. Bu sebeple farklı zamanlardaki internet
erişimlerinde farklı bir IP adresine sahip olunması muhtemeldir. Diğer yandan özel
amaçlarla ihtiyaç duyulan statik IP adresi ise, servis sağlayıcıları tarafından
sağlanan sabit ve değişmez IP adresleridir.
IP adreslerinin temelinde IPv4 kullanılmaktadır. 32 bitlik adres yapısı içeren
bu protokol, 232 yani 4.294.967.296 adet farklı bilgisayarı adresleme imkanına
sahiptir. Zamanla bilgisayar ve akıllı cihazların sayısının artması sonucunda, IP
adresleme için 128 bitlik adres yapısına sahip olan IPv6 önerilmiştir. IPv6 ile 2128
adet IP adresi verilebilmesi mümkündür.
Örnek
•IPV4 Adres: 176.090.189.146
•IPV6 Adres: 2001:0CA8:0000:2E3B:02AD:00FF:1E28:9C5A
Bant Genişliği
Bant genişliği kavramı internet ağı üzerinde iletişim halinde bulunan iki
cihazın birbirlerine gönderebileceği maksimum veri aktarım miktarını belirleyen
bir kavramdır. İnternet hızının artışı ve azalışıyla doğrudan ilgilidir.
Kullanıcıların web
sayfalarına erişim
sağladığı yazılımlara
internet tarayıcısı
denilmektedir.
Web Sayfası
Web sayfası, web üzerinde bulunan bir URL ile web tarayıcılarını kullanarak
erişebildiğimiz çeşitli amaçlarla geliştirilmiş ses, görüntü, metin vs. içeriklerinin
bulunduğu internet sayfalarıdır. Web sayfası içerikleri, web sunucularında
saklanmaktadır. HTML, CSS, JavaScript, ASP.NET, PHP vb. programlama dilleri ve
dil ortamları ile web sayfaları oluşturulmaktadır. Web sayfaları, statik ve dinamik
içeriklerden oluşmaktadır.
Bağlantı (Link)
Web sayfası içerisinde farklı içeriklere ulaşmak için kullandığımız web
adresleridir. Farklı bir web sayfası üzerindeki farklı bir içeriğe erişmek için
kullanılmaktadır.
İstemci (Client)
Bir internet ağı üzerinde bulunan içeriklere erişmek isteyen son kullanıcıyı
ifade etmektedir. Bilgisayar, cep telefonu ve hatta bir TV istemci olabilir. İstemci,
internet ağında bulunan bir bilgiyi sunuculardan talep eder ve erişim yetkisine
bağlı olarak gerekli bilgiye ulaşmaktadır.
Sunucu (Server)
Kullanıcıların talep ettiği içeriklerin tutulduğu bilgisayar sistemlerini ifade
etmektedir. Kullanıcılar burada bulunan içeriklere istenildiği zaman
erişebilmektedir.
Örnek
•Atatürk Üniversitesi Alan Adı Adresi: https://www.ataauni.edu.tr
Alt alan adı bir alan adına bağlı olan alt alanları ifade etmektedir.
Örnek
E-Posta
İnternette kişilerin birbirleriyle aralarında mesaj göndermesine ve almasına
izin verilen haberleşme sistemidir.
Örnek
•Gmail Giden Posta Sunucusu Erişim Adresi: smtp.gmail.com
Web 1.0
(1991 - 2014) İNTERNETİN GELİŞİMİ VE WEB
İnternetin başlangıç
dönemini ifade Dünyada internetin ortaya çıkışı ve getirilen yeniliklerle web teknolojisinin
etmektedir. gelişimi de dönemlere ayrılmıştır. İlk başlangıçta basit bilgi paylaşımları ve içerikler
oluşturulan web dünyası günümüzde çok daha farklı seviyelere gelmiştir. Statik
içeriklerden dinamik içeriklere geçiş süreci sonrası, internetin evrimi daha da
hızlanmış, bilgi çağının getirdiği yenilikler ve akıllı teknolojilerle çok daha ileri
teknolojik gelişmelere doğru bir gelişimden söz etmek mümkündür.
Web 1.0
İnternetin ilk ortaya çıktığı ve ilkel dönem olarak bu dönemi tanımlamamız
mümkündür. İnternetin ilk ortaya çıktığı dönem olan 1991 ile 2004 yılında Web 2.0
döneminin başlangıcına kadar olan dönemi ifade etmektedir. İnternetin başlangıç
yıllarında kullanıcıların büyük çoğunluğu içerik üreticisi olmaktan ziyade mevcut
web içeriklerinden yararlanmaktaydı.
Web 1.0 döneminde dinamik web içerikleri yerine daha çok bilginin sabit
olarak sunulduğu statik web sayfaları internet dünyasında yer almaktaydı. HTML
web içeriklerinin sunulduğu bu dönemde kullanıcıların çoğunluğu içerikleri okuma
amacıyla web sayfalarında gezinti yapmaktaydı. Bu dönemde Web sayfaları
kullanıcılarla etkileşim içerisinde olmayıp statik yapısını muhafaza etmiştir.
Web sayfalarının başlangıç dönemi olarak bahsettiğimiz Web 1.0’ın temel
özellikleri şunlardır:
Statik içerik sunması
Sadece okuma amaçlı kullanılması
Yorum yapma özelliği olmaması
Bilgi kaydetme özelliği olmaması
Sade ve genellikle metin tabanlı bir tasarım
Web 2.0
Web 1.0 statik içeriklerin sunulduğu kullanıcı etkileşimi olmayan bir
dönemdir. Web 2.0 dönemine geçişin en temel farkı dinamik içerikler
oluşturulabilmesidir. Dinamik içerikler ile web ortamında bilgi paylaşma kültürü
yaygınlaşmış, bu dönüşümle teknolojik değişimler ve ilerlemelerin daha hızlı bir
şekilde yayılımına imkan sağlanmıştır.
Web 1.0 döneminde kullanıcılar sadece bilgi alma tarafındadır. Ancak Web
2.0 dönemi ile birlikte kullanıcılar açısından içerik okuyan, içerik üreten, içerik
paylaşan bir döneme geçilmiştir. Bu yeni dönem ile kullanıcılar birbirleri ile daha
fazla etkileşim içindedir. Sosyal medya içerikleri ve uygulamaları (Facebook,
Twitter, Instagram, Youtube) bu dönemi en net şekilde yansıtan örnekler olarak
karşımıza çıkmaktadır.
Web sayfalarının ikinci dönemi olarak bahsettiğimiz etkileşim odaklı olan
Web 2.0’ın temel özellikleri şunlardır:
Dinamik içerik sunması
İçerik okuma ve içerik paylaşma imkanı sunması
Kullanıcılar arası etkileşim ve paylaşım odaklı olması
Zenginleştirilmiş ve etkileşimli ara yüz tasarımı
Web 2.0
Sosyal medya etkinliği
Bilginin üretildiği,
paylaşıldığı, kullanıcılar Web 3.0
arası etkileşimin yüksek
Web 2.0 dönemi ile kullanıcıların birbirleri ile etkileşimi ve paylaşım odaklı
olduğu dönemi ifade
içeriklerin üretilmesi döneminden bahsedilmektedir. Web 3.0 olarak
etmektedir.
adlandırıldığımız bu yeni dönem ise, bir geçiş süreci içerisindedir. Başlangıç
aşamasında kullanıcılara anlamsal içerikler sunulması şeklinde hedefleri bulunan
bu yeni dönem, mevcut yaşadığımız dönemi ifade etmektedir. Aynı zamanda bu
dönemde yapılması planlanan teknolojik değişim ve atılımlarla beraber web
dünyasında çok büyük yenilikler beklenmektedir. Merkeziyetsiz olarak yeni bir
döneme geçiş yapılması hedeflenen Web 3.0 döneminin Web 2.0 döneminden
farkı Şekil 1.4’te verilmiştir. Şekil 1.4’te görüleceği üzere merkeziyetsiz dönemde
kullanıcıların birbirleri arasında doğrudan iletişim halinde olması beklenmektedir.
•İNTERNET
•Dünya üzerinde bulunan milyarlarca bilgisayar veya elektronik aygıtın
haberleşme ve bilgi aktarımı amacıyla birbirine bağlandığı ortak bir ağa
verilen isimdir. İnternet ağında cihazlar belirli standart protokolleri
kullanarak birbirleri arasında iletişimi güvenli bir şekilde sağlarlar. İnternete
Özet
bağlı olmak isteyen tüm cihazlar internet servis sağlayıcısından alınan hizmet
ile ortak ağa dahil olurlar.
•İNTERNETİN ORTAYA ÇIKIŞI
•İnternet ağı oluşturma fikri 1958 yılında ABD ordusu tarafından finanse
edilen Savunma İleri Araştırma Projeleri Ajansının çalışmalarıyla başlamıştır.
Bu birimin yaptığı çalışmaların sonucunda farklı şehirlerde bulunan birimler
arasında haberleşme amacıyla bir ağ yapısı oluşturulmuştur. 1970li yılların
sonuna gelindiğinde TCP/IP protokolü ile internet ağındaki cihazların
birbirleriyle bir standart protokol ile daha kolay ve güvenli bir şekilde iletişim
kurması amaçlanmıştır. Günümüz internetinin temelleri de bu şekilde
atılmıştır.
•TÜRKİYE'DE İNTERNETİN ORTAYA ÇIKIŞI VE YAYGINLAŞMASI
•Türkiye'de internetin ortaya çıkışı ve günümüzdeki internetin yaygınlaşması
süreci 1980'li yıllara dayanmaktadır. 1986 yılında kurulmuş olan Türkiye
Üniversiteler ve Araştırma Kurumları Ağı (TÜVAKA), interneti Türkiye ile
tanıştıran bir kuruluş olmuştur. 1992 yılında ODTÜ ile Hollanda arasında X.25
devresi üzerinden oluşturulan internet ağı bugünkü internet ağımızın
temellerini oluşturmuştur. Başlangıç aşamasında sadece belirli kurumlar ve
üniversiteler internet ağına dahil olmuştur. İlk internet hizmet sağlayıcı olan
TURNET kuruluşunun hizmet vermesiyle beraber bireysel kullanıcılar da
internet erişimine sahip olmuşlardır. 2021 yılı itibariyle hane halkında
intenet kullanımı %92 seviyelerine ulaşmıştır. İnternet üzerinden satın
alımlarda ise bu oran %44,3 seviyelerine gelmiştir.
•TEMEL İNTERNET KAVRAMLARI
•İnternet üzerinde gezinti yapmak, bilgi paylaşmak ve iletişim kurma amacıyla
kullanılan temel bazı internet kavramları bulunmaktadır. İnternet ağı
üzerinde yapılan tüm veri aktarımları belirli standartlar çerçevesinde
gerçekleştirilmektedir. İnternet hizmeti internet servis sağlayıcıları
tarafından sağlanır. İnternet ağına tam bağlı olmayıp özel amaçlarla
oluşturulmuş küçük çaplı ağlar olarak Intranet ve Extranet karşımıza
çıkmaktadır. IP ile internet haberleşmesinde her bir cihaza bir adres
verilmektedir. İnternet tarayıcıları sayesinde web sayfasındaki içeriklere
erişim sağlanır. Bu web sayfalarının arkasında HTTP metin transfer protokolü
yapısı bulunmaktadır. Web içerikleri bir sunucuda web barındırma hizmetleri
ile tutulmakta olup, istemciler URL adresi ile bu web sayfalarına erişim
sağlamaktadır. Her bir web sitesinin bir IP adresi bulunmaktadır. Ip
adreslerinin akılda tutulması kolay olunmadığından web sitelerine erişim için
URL adresi kullanılmaktadır. DNS ile IP adresi site eşleştirmesi yapılarak
sitelere erişim sağlanır. Vekil sunucu ile web sitelerine güvenli erişim hizmeti
ve anonim erişim imkanı bulunmaktadır. E posta göndermek ve almak içinde
çeşitli protokoller belirlenmiştir. Neredeyse tüm e-posta sunucuları giden e-
posta için SMTP protokolünü ve gelen e-postalar için ise; IMAP ve POP
protokollerini desteklemektedirler.
Özet (devamı)
•İNTERNETİN GELİŞİMİ VE WEB
• İnternet ağının ortaya çıkışıyla beraber web çeşitli gelişim dönemlerinden
geçmiştir. Web gelişim dönemleri Web 1.0, Web 2.0 ve Web 3.0 dönemi
olarak ifade edilmektedir.
• Web 1.0:
•Web döneminin en ilkel dönemidir. Statik içeriklerin bulunduğu, çoğunlukla
okunma amaçlı kullanılan dönemi ifade etmektedir.
• Web 2.0:
•Statik içeriklerden dinamik içeriklere geçiş olmuştur. Bilginin üretildiği ve
paylaşıldığı, kullanıcılar arasında etkileşimin olduğu dönem ifade
edilmektedir.
•Web 3.0:
•İnternet içeriklerinin son kullanıcıya hitap edilirken anlamsal ağ içeriklerinin
de olduğu yeni dönemdir. Merkeziyetsiz ağ yapılarıyla web ortamının yeni
bir şekle bürüneceği dönemdir. Yapay zekanın da birincil unsur olduğu bu
dönemde kullanıcılar arasında platformsuz içerik paylaşımlarının yapılması
hedeflenmektedir.
DEĞERLENDİRME SORULARI
1. İnternet nedir?
a) Web tarayıcı çeşididir.
b) Dosyaların tutulduğu bir sunucudur.
c) Bilgisayar veya diğer cihazların bağlı olduğu ortak ağdır.
d) Sadece sosyal medya sitelerinin bulunduğu bir yerdir.
e) Mobil uygulama ağıdır.
3. HTML nedir?
a) Bir işaretleme dilidir.
b) Arama motorudur.
c) Ürün sipariş platformudur.
d) Web tarayıcıdır.
e) Mobil web sitesidir.
7. SMTP nedir?
a) Giden e-posta iletim protokolüdür.
b) Sunucu depolama hizmetidir.
c) Gelen e-posta iletim protokolüdür.
d) Veri paylaşım platformudur.
e) Dosya aktarım protokolüdür.
Cevap Anahtarı
1.c 2.b, 3a, 4.e, 5.b, 6.c, 7.a, 8.d, 9.a, 10.b
YARARLANILAN KAYNAKLAR
ARPANET. 29 Aralık 2021 tarihinde https://www.britannica.com/topic/ARPANET
adresinden erişildi.
Atzori, M., Koutrika, G., Pes, B., ve Tanca, L. (2020). Special issue on “Data
exploration in the web 3.0 age”. Future Generation Computer Systems.
İnternet Teknolojileri. 3 Ocak 2022 tarihinde
https://www.tutorialspoint.com/internet_technologies/ adresinden erişildi.
Özgit, A., Cagiltay, K. ve Taner, E. (1995). Turkish Internet (TR-NET): Policies for
Organizational Framework and Funding. International Networking
Conference, Honolulu, Hawaii, 27-30 June 1995.
Radu, R. (2019). Revisiting the Origins: The Internet and its Early Governance.
DOI:10.1093/oso/9780198833079.003.0003 In book: Negotiating Internet
Governance, Oxford University Press.
Survey on Information and Communication Technology (ICT) Usage in Households
and by Individuals. 29 Aralık 2021 tarihinde
https://data.tuik.gov.tr/Bulten/Index?p=Survey-on-Information-and-
Communication-Technology-(ICT)-Usage-in-Households-and-by-Individuals-
2021-37437 adresinden erişildi.
Ulaknet Tarihçesi. 27 Aralık 2021 tarihinde
https://ulakbim.tubitak.gov.tr/tr/kurumsal/ulaknet-tarihcesi adresinden
erişildi.
• Web Programlama
• Ön Yüz Web Geliştirme
İÇİNDEKİLER
Ön Yüz
Arka Yüz
Web Geliştirme Dilleri
DİNAMİK WEB
Arka Yüz
Arka Yüz Web Geliştirme Ortamları
Web Geliştirici
Profilleri
GİRİŞ
Web sayfası ya da uygulaması dünya çapında ağ üzerinde (WWW) bulunan
metin, görüntü, ses, video ve link bağlantıları içeriklerinden oluşmaktadır. Web
sayfası ya da web uygulamasına ait içerikler, internet ağına dahil olan bir web
sunucusunda bulunur ve bir web tarayıcısı aracılığıyla bu web sayfası içeriklerine
erişilir. Her bir web sayfasının kendisine ait bir tek düzen kaynak bulucu (URL)
adresi bulunmaktadır.
Web 1.0 döneminde web sayfası uygulaması içerikleri statik içeriklerden
oluşmaktaydı. Web 2.0 dönemine geçiş ile beraber web içerikleri de değişmeye
başlamıştır. Kullanıcının etkileşimde olduğu ve dinamik içeriklerin etkin olduğu bu
dönemde web tasarımları da oldukça zenginleşmiştir. Aynı zamanda dinamik içerik
oluşturma amacıyla kullanılan birçok web programlama dili, web geliştirme
ortamları ve veri tabanı da bu dönemde geliştirilmiştir.
Günümüzde web siteleri ve uygulamalarına olan taleplerin artması ve
ihtiyaçların farklılaşmasından dolayı sürekli güncellenen yeni teknolojiler ortaya
çıkmaktadır. Web sayfası ve içerik geliştirme teknolojileri genellikle iki yönüyle ele
alınmaktadır. Bu iki yönden birincisi, kullanıcının görebildiği kısımda yapılan
geliştirmeler olarak istemci tarafı (client side) geliştirme dilleri ve web sayfası
geliştirme ortamlarıdır. İkinci yön ise arka planda, kullanıcının göremediği kısımda
yapılan geliştirmeler olarak sunulan sunucu tarafı (server side) geliştirme dilleri,
web geliştirme ortamları, sunucu yazılımları ve veri tabanlarıdır.
WEB PROGRAMLAMA
Web teknolojisinin ilk çıktığı dönem olan Web 1.0 döneminde web sayfaları
statik içeriklerden oluşmaktaydı. Kullanıcıların etkileşimde bulunamadığı bu
dönemde, web sayfaları daha çok basit tasarımlardan oluşmakta, HTML işaretleme
dilinin etkin olduğu görsel tasarımlar da oldukça yetersizdi. Web teknolojisinin bu
başlangıç döneminde temel bazı bilgiler ve basit görsel öğelerden oluşan web
tasarım örnekleri bulunmaktadır.
Web 2.0 ile web sayfalarının kullanıcılar tarafından görünen görsel kısmı
Web 1.0 dönemi statik dışında, görünmeyen arka kısmında da yeni bir dönemin kapısı aralanmıştır. Web
içeriklerin bulunduğu 2.0 dönemi ile beraber hem kullanıcı tarafından görünen kısımda oldukça zengin
web sayfaları, Web 2.0 ve görsel tasarımlar oluşturulmakta hem de sunucu tarafında oldukça başarılı
dönemi ise dinamik dinamik etkileşimli içerikler ve paylaşımlar sunulmaktadır.
içeriklerin bulunduğu Günümüzde herhangi bir web sitesi ya da uygulaması geliştirildiği zaman
web sayfaları dönemini web tasarım ve web geliştirme yönü olarak iki farklı kavram bulunmaktadır. Web
ifade etmektedir. tasarım kısmı, kullanıcının etkileşime girdiği web sitesinin ara yüzünün tasarımı ve
geliştirilmesi olaylarıdır. Web geliştirme kısmı ise; web sitesinin kullanıcılar
tarafından görünmeyen sunucu tarafında yapılan işlemler, bağlantıların kurulduğu
yazılımlar, veri tabanı işlemleridir.
Kullanıcı tarafından görünen kısım aynı zamanda ön yüz geliştirme bölümü
olarak ifade edilmektedir. Kullanıcı tarafından görünmeyen kısım da arka yüz
Ön Yüz
(İstemci Tarafı)
Web Geliştirme
JavaScript
JavaScript, HTML ve CSS gibi istemci tarafı bir betik dildir. Ön yüz geliştirme
de üstün özellikleriyle web geliştiricileri tarafından tercih edilmektedir. HTML ve
CSS dillerinden farklı olarak günümüzde sunucu taraflı uygulamalarda da
kullanılmaktadır. Tarayıcının olmadığı birçok ortamda kullanımı mümkün
olmaktadır. JavaScript web sayfası geliştirme, oyunlar geliştirme ve mobil
JavaScript hem ön yüz
uygulama geliştirme gibi oldukça geniş bir kullanım alanına sahiptir. JavaScript
geliştirmede hem de
tarayıcı (browser) tarafından yorumlandığı için herhangi bir derleyiciye ihtiyaç
arka yüz geliştirmede
duymamaktadır(Resim 2.2).
kullanılmaktadır.
jQuery
En popüler JavaScript kütüphanelerinden biridir. Ön yüz geliştirmede hızlı,
JQuery ve TypeScript,
küçük ve basit özelliklere sahip platformlar arası bir JavaScript kütüphanesidir.
JavaScript dilini temel
Kullanımı kolay bir API ile HTML belgesi geçişi ve manipülasyonu, olay işleme,
alarak oluşturulmuş
animasyon ve Ajax gibi şeyleri çok daha basit hale getirip birçok tarayıcıda başarılı
dillerdir.
bir şekilde çalışmaktadır. jQuery ücretsiz bir açık kaynak kütüphanedir.
TypeScript
TypeScript, JavaScript'i temel alan ve JavaScript’e göre her ölçekte daha iyi
araçlar sağlayan bir ön yüz geliştirme dilidir. JavaScript’e ek söz dizimi ekleme
özelliği, kodların JavaScript’e dönüştürülüp her ortamda çalıştırılabilmesi özelliği
ve JavaScript’i anlayarak ek bir kod kullanmadan tür çıkarım özelliği avantajlarını
içermektedir.
Sass
CSS’in tüm sürümleriyle uyumlu bir CSS uzantı dilidir. Uzun yıllardır güçlü bir
ekip desteği ile yoluna devam eden bu dil, diğer CSS uzantısı dillere göre daha
fazla özellikler barındırmaktadır. İşletmeler tarafından CSS uzantı dili olarak sıklıkla
Sass, CSS dilini temel tercih edilmektedir.
alarak oluşturulmuş bir
uzantı dilidir. Ön Yüz Web Geliştirme Ortamları
Web geliştiricileri, web sayfası ya da uygulaması geliştirirken ücretli ya da
ücretsiz web geliştirme ortamlarını kullanarak daha etkin ve hızlı çözümler
sunmaktadırlar. Bu amaçla geliştirilmiş çok sayıda web geliştirme aracı ve
teknolojisi bulunmaktadır. Aşağıda istemci tarafında en çok tercih edilen web
gelişme ortamlarından bazıları hakkında bilgiler verilmektedir.
Sublime Text
En iyi metin editörlerinin başında gelmektedir. Küçük ve büyük ölçekli işler
için kullanımı uygundur. Güzel görünümü ve kullanım kolaylığı avantajlarıyla önde
gelen geliştirme araçlarından birisi olmaktadır. Basit ve kullanışlı bir editör
olmasının yanında bağlama duyarlı otomatik yazma özelliğiyle kullanıcılara yazım
kolaylığı sağlamaktadır.
Güncellenmiş Python uygulama programlama ara yüzü (api) ile önemli bir
Sketch, vektör grafikleri fayda sağlamaktadır. Ayrıca çok hızlı çalışma süresi ve söz dizimi tanımlarıyla önde
düzenleme ve başarılı gelen geliştirme araçlarından biridir. Sublime Text, ücretli bir web geliştirme
piksel hassasiyeti ortamıdır. Windows, Linux ve Mac işletim sistemlerinde çalışabilmekte iken mobil
sunmaktadır platformlarda kullanılamamaktadır.
Sketch
Güçlü vektör grafikleri düzenleme ve başarılı piksel hassasiyeti özelliklerine
sahiptir. Kullanım kolaylığı ve kullanışlı klavye kısa yolları sunmaktadır. Mac işletim
sisteminde web sayfaları geliştirmek için kullanılan bir platformdur. Sketch ücretli
bir web geliştirme ortamıdır.
Angular.JS
Google tarafından geliştirilen Angular.JS, küçükten büyüğe tüm web
projeleri için uygundur. Web uygulamaları için HTML kelime dağarcığını
genişletme imkanı sağlamaktadır. Anlamlı, okunabilir ve etkili bir geliştirme için
hızlı bir ortam yapısı vardır. Veri bağlama, denetçi ve sade JavaScript özelliklerine
sahiptir. Angular.JS ücretsiz bir açık kaynak yazılımıdır.
Chrome DevTools
Google tarafından geliştirilmiştir. HTML, CSS ya da JavaScript dillerinde
yapılan işleri gerçek zamanlı olarak düzenlememizi sağlamaktadır. Google Chrome
tarayıcısı üzerinde gerçek zamanlı çalışma imkanını sağlamaktadır. Chrome
DevTools ücretsiz bir yazılımdır.
Bootstrap
Hızlı ve etkin web sayfası geliştirme araçlarından biri olan Bootstrap açık
kaynak bir yazılımdır. HTML, CSS ve JavaScript dilleriyle web sayfaları geliştirmede
oldukça yaygın olarak kullanılan bir web geliştirme ortamıdır. Sass ve JQuery gibi
diğer web sayfası geliştirme araçlarını desteklemesiyle de geliştiricilere önemli
avantajlar sağlamaktadır. Bootstrap ücretsiz bir yazılımdır.
GitHub
Dünyada şu anda 70 milyonun üzerinde geliştirici ve 4 milyon üzerinde
organizasyon GitHub geliştirme ortamından yararlanmaktadır. Projeleri yönetmek
için ideal bir geliştirme ortamıdır. Windows, Linux ve macOS işletim sistemi
destekleri bulunmaktadır. İşbirlikçi kodlama, otomasyon ve CI/CD (Continuous
integration, Continuous delivery) desteği, güvenli kodlama, istemci uygulamaları
(mobil, masaüstü, komut satırı arayüzü), proje yönetimi, takım yönetimi gibi üstün
özellikleri bulunmaktadır. GitHub ücretsiz kullanımı ile beraber; ekip ve kurumsal
olmak üzere iki ayrı ücretli seçeneği olan bir geliştirme ortamıdır.
CodePen
CodePen web sayfası oluşturmak, öğrenmek, hata ayıklamak ve test
senaryoları oluşturmak için faydalı bir sosyal geliştirme ortamı olarak tercih
edilmektedir. Sınırlı bir hizmetle ücretsiz desteği bulunmaktadır. Ücretli
sürümlerinde ise sunulan hizmete göre ayrı fiyatlandırma seçenekleri
bulunmaktadır.
Arka Yüz
(Sunucu Tarafı)
Web Geliştirme
ASP.NET
2002 yılında klasik ASP dilinin başarısı üzerine Microsoft firması tarafından
.NET mimarisine dayalı geliştirilmiş olan popüler web uygulama geliştirme
teknolojisidir. Yazılan kodlar “.aspx” uzantısı ile kaydedilmektedir. Visual Basic ve
C# dilleri tarafından yazılan kodlarla “.aspx” uzantılı dinamik içerikli web sayfaları
oluşturulmaktadır. Başlangıçta sadece Windows işletim sistemi üzerinden
PHP
Dinamik web sayfalarına geçiş ile birlikte en çok tercih edilen dillerden biri
olmuştur. PHP, sunucu tarafında çalışan güçlü, çok amaçlı ve ücretsiz olarak
kullanılan bir web programlama dilidir. Linux ve Windows işletim sistemleri
üzerinde çalışabilmektedir. PHP dili öğrenilmesi çok kolay bir dil olup, arkasında
güçlü bir topluluk desteği vardır. HTML, CSS, JavaScript dilleriyle kolayca entegre
edilebilmesi, esnek olması, güvenilir olması programlama dilinin önemli
avantajlarındandır.
Java
Çok uzun yıllar önce geliştirilmiş bir dil olmasına karşın dinamik web
uygulamaları geliştirmek için hala en çok tercih edilen programlama dillerinden
biridir. Masaüstü uygulamaları, web uygulamaları ve mobil uygulamalar için
kullanımı mümkün olup çok amaçlı bir dildir. Java, günümüzde çevrimiçi
alışverişte, içerik yönetim sistemlerinde, oyunlarda, sosyal medyada, arama
motorlarında, reklamcılıkta vs. neredeyse tüm web içeriklerinde esnekliği, gücü ve
kullanım kolaylığı ile tercih edilmektedir.
Python
Son yıllarda programlama dilleri arasında üstünlüğünü ortaya koyan Python
sunucu tarafında bulunan web geliştirme dilleri arasında önemli bir yer edinmiştir.
Nesne yönelimli programlama desteğine sahip olup, prosedürel programlama
yapılarını da destekleyen üst seviye programlama dilidir. Basit söz dizimi ve kod
okunabilirliği yönleriyle öğrenmesi ve kullanımı oldukça kolay bir dildir.
Django
Güçlü bir Python web geliştirme ortamı olan Django, etkili ve sorunsuz web
sayfaları geliştirmeye yarayan bir web geliştirme aracıdır. MTV (Model-Template-
Views) mimarisini kullanan Django, geniş bir topluluk tarafından
desteklenmektedir. Genişletilebilme, ölçeklenebilirlik, hızlı geliştirme ve daha az
kod kullanımıyla önemli avantajlara sahiptir. Django ücretsiz ve açık kaynak
geliştirme ortamıdır.
ASP.NET Core
Hızlı, etkili, güvenli, platformlar arası ve bulut tabanlı uygulamalar
geliştirmek için Microsoft tarafından geliştirilen açık kaynak bir çapraz geliştirme
ortamıdır. Web uygulamaları, web servisler ve nesnelerin interneti uygulamaları
geliştirmek için idealdir. İstemci tarafı uygulamalarla sorunsuz bir şekilde bir araya
gelerek çalışma imkanı sağlamaktadır.
Node.js
Sunucu tarafı geliştirilen uygulamalarda, JavaScript’i aktif etmek için
kullanılan açık kaynaklı bir web geliştirme aracıdır. Node.js, Chrome web
tarayıcısının V8 JavaScript çalışma motoru üzerine kurulmuş olan bir JavaScript
çalışma zamanıdır. Ağ bağlantılı uygulamalar için geliştirilmiştir. Tüm işletim
sistemleri üzerinde çalışma desteği bulunmaktadır.
Laravel
Günümüzde PHP uygulamaları geliştirmek için kullanılan en popüler yazılım
geliştirme ortamlarından biridir. MVC (Model-View-Controller) mimarisini kullanan
Laravel, etkileyici ve iyi bir sözdizimine sahiptir. MVC mimarisi ile kodlar daha iyi
yapılandırıldığı için geliştiricilerin işlerini başlangıçta oldukça kolaylaştırmaktadır.
Laravel , MVC (Model-
Düz bir metin olarak kaydedilmeyip, karma ve şifreli parolalar oluşturmaktadır ve
View-Controler)
güvenli web sayfaları geliştirmek için idealdir.
mimarisini
kullanmaktadır. Java EE
Oracle tarafından geliştirilen Java EE, büyük ölçekteki projeler için
geliştirilmiş Java teknolojilerinin bütününü içeren bir web geliştirme aracıdır.
Geliştirilen her yeni sürüm, kurumsal işletmelerin ihtiyaçlarını karşılamaya
odaklanarak yeni özellikler eklemekte, uygulamanın taşınabilirlik özelliğini
geliştirmekte ve geliştiricilere daha üretken ortamlar oluşturmayı
hedeflemektedir.
MySQL
İlişkisel veri tabanı yönetim sistemlerinin en popüler örneklerinden biridir.
Hızlı ve yüksek performansa sahip olan MySQL, ölçeklenebilirlik, kullanılabilirlik ve
güvenilirlik konularında oldukça başarılıdır. MySQL veri tabanı yönetim sisteminin
PostgreSQL,
Güçlü, dayanıklı, yüksek performanslı ve ölçeklenebilir bir ilişkisel veri
tabanı yönetim sistemidir. PostgreSQL, SQL temeline dayanmakta olup açık kaynak
kodlu ücretsiz bir yazılımdır. Windows, Linux ve macOS işletim sistemleri desteği
bulunmaktadır. PostgreSQL, farklı tiplerde çeşitli veri tiplerini destekleme, veri
bütünlüğünü sağlama, eşzamanlılık hizmeti, veri güvenilirliği, olağanüstü
durumların üstesinden gelebilme, güvenlik sağlama, genişletilebilirlik ve metin
arama özelliklerine sahiptir.
SQL Server
Microsoft tarafından geliştirilmiş, windows tabanlı sunucu sistemlerinde
tercih edilen veri tabanı yönetim sistemidir. ASP.NET temelli web sayfalarıyla
uyumlu çalışmakta olup diğer web geliştirme dilleri ile de uyumlu bir şekilde
çalışmaktadır. İlişkisel bir veri tabanı olan SQL Server ile indeksleme, sorgulama ve
veri işleme ve raporlama işlemleri yapılabilmektedir. Güvenlik, ölçeklenebilirlik ve
güvenilirlik özelliklerini hem yerel sunucularda hem de bulut üzerinde
sağlamaktadır.
sunucu yazılımı olmakla beraber popüler web sunucu yazılımları olarak Apache, IIS
ve NGINX örnek verilebilir.
NGINX
Günümüzde 400 milyondan fazla web sayfası ya da uygulamasına hizmet
vermekte olan NGINX açık kaynak web sunucu yazılımıdır. Rus yazılımcı Igor
Sysoev tarafından geliştirilmiş olan sunucu yazılımı, düşük kaynak kullanımı ve
ölçeklenebilir olmasıyla sunucu yazılımları arasında ön plana çıkmaktadır. Ters
vekil sunucu, yük dengeleme, ön belleğe alma, otomatik indeksleme işlemleri
dolayısıyla tercih edilebilmektedir.
Web Geliştirici
Profilleri
•WEB PROGRAMLAMA
•Web içerikleri, dünya çapında ağda (WWW) yer alan ses, metin, resim, video
vb. içeriklerden oluşmaktadır. Web’in ilk başladığı dönemler olan Web 1.0
döneminde sadece statik içerikler bulunmaktaydı. Web 2.0 dönemine geçiş
ile beraber dinamik içerikler web dünyasında kendisine yer bulmuştur. Bu
dönemde web içerikleri oldukça zenginleşmiştir. Web tasarımı ara
yüzlerindeki teknolojiler gelişerek; istemci tarafı yeni teknolojiler web
Özet
dünyasında yer edinmiştir. Dinamik içerikler ile beraber sunucu tarafında da
birçok yeni dil ve araç geliştirilmiş ve daha faydalı, hızlı ve etkin web
programlama teknolojilerinin kullanımı ile giderek daha zengin ve ihtiyaçlara
cevap veren web içerikleri oluşturulmuştur.
•ÖN YÜZ WEB GELİŞTİRME
•Ön yüz geliştirme kullanıcılar tarafından görülen web sayfası ara yüzlerinin
tasarımından oluşmaktadır. İstemci tarafında görülen bu değişiklikler için; ön
yüz geliştirme dilleri tercih edilmektedir. Ön yüz geliştirme amacıyla birçok
web geliştirme ortamı bulunmaktadır. Bu geliştirme ortamlarıyla daha hızlı,
etkin ve pratik çözümler sunulmaktadır.
•Ön Yüz Web Geliştirme Dilleri: Ön yüz geliştirme dilleri, istemci tarafında
yazılabilen betik dillerden oluşmaktadır. HTML, CSS ve JavaScript temel ön
yüz geliştirme dillerindendir. Ayrıca bu dilleri temel alan bazı diller de
geliştirilmiştir.
•Ön Yüz Web Geliştirme Ortamları: İstemci tarafında web sayfalarının
kullanıcılar tarafından daha fazla ilgi çekici olması amacıyla pratik ve
kullanışlı web tasarım araçları geliştirilmiştir. Ücretli ve ücretsiz sürümleri
bulunan bu yazılımlar özel gereksinimlere bağlı olarak birbirlerine karşı çeşitli
üstünlükleriyle yazılım dünyasında yer edinmektedirler.
•ARKA YÜZ WEB GELİŞTİRME
•Web sayfalarının kullanıcı tarafından görünmediği sunucu tarafında
geliştiriciler tarafından yapılan işlemler ve kullanılan hizmetleri ifade
etmektedir. Dinamik bir işleyişin olduğu bu bölümde, web programlama
dilleri, sunucu tarafı web geliştirme ortamları, veri tabanları ve sunucu
yazılımları, sunucu tarafı geliştirmenin önemli bileşenleridir.
•Arka Yüz Web Geliştirme Dilleri ve Dil Ortamları: Dinamik web içerikleri
oluşturmada en sık tercih edilen programlama dil ve dil ortamları, ASP.NET,
PHP, Java ve Python olarak karşımıza çıkmaktadır.
•Arka Yüz Web Geliştirme Ortamları: Günümüzde geliştirilmiş olan web
programlama dilleri ile beraber bu dilleri destekleyen ve desteklenen
programlama dillerinde kodlama kolaylığı ve etkinliği sağlayan sunucu tarafı
web geliştirme ortamları bulunmaktadır.
•Arka Yüz Web Geliştirme Veri Tabanları: Sunucu tarafında oluşturulmuş
olan dinamik içerikler çeşitli veri tabanlarında saklanmaktadır. Bu veri
tabanlarında bulunan içerikler sayesinde kullanıcılarla etkileşimler
sağlanmaktadır. Veri tabanlarındaki içeriklere ekleme, silme ve güncelleme
işlemi yapılabilmektedir.
•Web Sunucu Yazılımları: Web sayfası ya da uygulamasına ait tüm içerikler
bir web sunucusunda tutulurlar. Kullanıcıların bu içeriklere hızlı ve güvenli
şekilde erişiminden web sunucu yazılımları sorumludur. Web sunucu
yazılımlarında dilsel ve işletim sistemlerine bağlı olarak çeşitli bağımlılıklar
olabilmektedir.
•WEB GELİŞTİRİCİ PROFİLLERİ
•Web sayfası ya da uygulaması geliştirmede gelişen teknolojiler ve ihtiyaçlar
ile içeriklerin zenginleşmesi sonucunda web geliştirici profilleri de
uzmanlıklarına göre farklılıklar gösterebilmektedir. İşin büyüklüğüne ve
uzmanlığına bağlı olarak ön yüz geliştiricisi, arka yüz geliştiricisi ve tam yığın
geliştiricisi olmak üzere çeşitli geliştirici profilleri ortaya çıkmıştır.
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi istemci taraflı bir betik dildir?
a) HTML
b) ASP.NET
c) PHP
d) Python
e) ASP
6. Aşağıdaki hangisi arka yüz web geliştirmede kullanılan veri tabanı yönetim
sistemlerinden biri değildir?
a) PostgreSQL
b) SQL Server
c) MySQL
d) jQuery
e) MongoDB
Cevap Anahtarı
1.a, 2.b, 3.e, 4.d, 5.b, 6.d, 7.e, 8.c, 9.c, 10.b
YARARLANILAN KAYNAKLAR
Angular.JS 7 Ocak 2022 tarihinde https://angularjs.org/ adresinden erişildi.
Apache HTTP Server. 11 Ocak 2022 tarihinde https://httpd.apache.org/
adresinden erişildi.
ASP.NET. 17 Ocak 2022 tarihinde https://dotnet.microsoft.com/en-
us/apps/aspnet adresinden erişildi.
ASP.NET Core. 11 Ocak 2022 tarihinde https://docs.microsoft.com/tr-
tr/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-6.0
adresinden erişildi.
Bootstrap. 15 Ocak 2022 tarihinde https://getbootstrap.com/ adresinden erişildi.
Chrome DevTools. 10 Ocak 2022 tarihinde
https://developer.chrome.com/docs/devtools/ adresinden erişildi.
CodePen. 7 Ocak 2022 tarihinde https://codepen.io/ adresinden erişildi.
Dean, J. (2017). Web Programming with HTML5, CSS, and JavaScript.
Massachusetts, ABD Jones & Bartlett Learning
Django. 11 Ocak 2022 tarihinde https://www.djangoproject.com/ adresinden
erişildi.
GitHub. 8 Ocak 2022 tarihinde https://github.com/ adresinden erişildi.
IIS. 12 Ocak 2022 tarihinde https://www.iis.net/ adresinden erişildi.
İnternet Teknolojileri. 1 Ocak 2022 tarihinde
https://www.tutorialspoint.com/internet_technologies/web_pages.htm
adresinden erişildi.
Java EE. 19 Ocak 2022 tarihinde
https://www.oracle.com/tr/java/technologies/java-ee-glance.html
adresinden erişildi.
JQuery. 5 Ocak 2022 tarihinde https://www.jquery.com/ adresinden erişildi.
Laravel. 12 Ocak 2022 tarihinde https://laravel.com/ adresinden erişildi.
MongoDB. 21 Ocak 2022 tarihinde https://www.mongodb.com/ adresinden
erişildi.
MySQL. 11 Ocak 2022 tarihinde https://www.mysql.com/ adresinden erişildi.
NGINX. 10 Ocak 2022 tarihinde https://www.nginx.com/ adresinden erişildi.
Node.JS 19 Ocak 2022 tarihinde https://nodejs.org/ adresinden erişildi.
PHP. 13 Ocak 2022 tarihinde https://www.php.net/ adresinden erişildi.
PostgreSQL. 11 Ocak 2022 tarihinde https://www.postgresql.org/ adresinden
erişildi.
Sass. 12 Ocak 2022 tarihinde https://sass-lang.com/ adresinden erişildi.
• ASP Nedir?
• ASP Nesneleri
İÇİNDEKİLER
ÜNİTE
3
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP
ASP Sürümleri
ASP Nedir?
ASP Nasıl Çalışır?
ASP Nesneleri
VBScript
JavaScript
ASP Betik Dilleri
PerlScript
Python
ASP
ASP'de Değişkenler
ASP'de Prosedürler
ASP'de
Veri Tabanı İşlemleri
GİRİŞ
Web 1.0 dönemi statik içeriklerin etkin olduğu dönemdir. Statik içerikler
istemci taraflı uygulamalar olup kullanıcı etkileşimi bulunmamaktadır. Dinamik
bilgi içeren web sayfaları ise internet ağının amacına ve hedeflerine daha uygun
bir yapıdır. Dinamik içerikler bilginin üretimi ve paylaşımını hedefleyen internet ağ
yapısının gelişimine çok olumlu katkılar sunmuştur. Bu tür dinamik içeriklere olan
talep ve ihtiyaçtan dolayı, sunucu taraflı geliştirilen dinamik web sayfası içerikleri
oluşturulmaya başlanmıştır.
Asp dilinin ortaya çıkışı ile beraber, kullanıcılar ile etkileşimin olduğu yeni bir
döneme geçiş yapılmıştır. Bu dönem, dinamik verilerin veri tabanında saklandığı,
işlendiği ve sunulduğu yeni bir dönem olmuştur. Asp ve benzeri teknolojilerin
ortaya çıkışı ile kullanıcıların web teknolojilerini kullanımı daha fazla artmış ve
internet ağından maksimum fayda sağlanmaya başlanmıştır.
IIS 4.0 (Internet Information Server) sürümünün ortaya çıkmasıyla beraber
ASP’de de çeşitli güncellemeler yapılmıştır. Günümüzde kullanımı devam eden
temel ASP nesneleri bu yeni güncellemeler ile gelmiştir. ASP yapısal olarak, nesne
modellerini içeren bir komut dosyası teknolojisidir. Temel ASP nesneleri Request,
Application, Response, ASPError, Session ve Server nesneleridir. ASP’de
başlangıçta VBScript betik dili tercih edilirken günümüzde JavaScript, PerlScript ve
Python dilleri de kullanılmaya başlanmıştır.
Her dilin kendi yapısında bulunan bazı temel öğeler bulunmaktadır. Bu
bölüm içerisinde ASP ile web programlaması yapılırken kullanılan bazı temel
öğelere yer verilmiştir. Bu temel öğeler anlatılırken ASP’de en çok tercih edilen
dillerden biri olan VBScript tercih edilmiştir. Temel öğeler olarak değişkenler, koşul
ifadeleri, döngüler ve prosedürler konularına yer verilmiştir.
ASP, sunucu tarafında betik dillerin kullanıldığı bir web geliştirme ortamıdır.
Bu dil ortamında kullanıcı etkileşimleri için web sayfalarında dinamik içerikler
kullanılmaktadır. Dinamik içerikleri oluşturmak, işlemek ve sunmak için veri
tabanlarından yararlanılmaktadır. ASP ile veri tabanlarında bu tür işlemleri
gerçekleştirmek için Microsoft tarafından geliştirilen ADO (ActiveX Data Objects)
nesneleri kullanılmaktadır. ADO teknolojisi ile hızlı, kolay ve güvenli veri tabanı
bağlantıları yapılmaktadır.
ASP, bir programlama dili değildir. Sunucu tarafında betik dilleri çalıştıran
bir teknoloji olan ASP’yi bir dil ortamı olarak ifade etmek daha yerinde bir ifade
olacaktır. ASP web sayfalarında, standart olarak VBScript dili ile JavaScript dili
kullanılmaktadır. Ayrıca yazılım destekleriyle Python ve PerlScript dillerine ait
kodlar da ASP sayfalarına entegre edilebilmektedir. Örnek olarak yazılan aşağıdaki
Asp kodunda, ASP etiketleri “<% %>” arasına “=Date” ifadesini yazdığımızda
sunucu makinede mevcut olan anlık tarih bilgisi değeri, web tarayıcı ekranına
getirilmektedir.
Örnek
ASP sunucu taraflı bir dil ortamı olup yazılan kodlar ve kullanıcıdan gelen
istekler sunucu tarafında işlenerek web tarayıcısına HTML çıktısı olarak
iletilir ve web tarayıcı istemci tarafında HTML içeriğini okuyup tarayıcı
ekranına yansıtır.
Sunucu tarafında ASP dosyalarını çalıştırmak için ASP motorundan
yararlanılmaktadır.
Kullanıcı etkileşimlerini gerçekleştirmek için veri tabanı bağlantısı
gerçekleştirilir ve veri tabanlarında bulunan kullanıcı bilgileri ya da web
sayfası içerikleri statik olmayıp güncellenebilmektedir.
<%
response.write("Atatürk Üniversitesi")
%>
</body>
</html>
ASP Sürümleri
Günümüzde, 2000 yılında geliştirilmiş olan ASP 3.0 sürümü kullanılmaktadır.
Microsoft tarafından .NET mimarisinin geliştirilmesiyle popülerliği azalsa da hala
günümüzde web uygulamaları geliştirmede yaygın bir şekilde kullanılmaktadır.
Kronolojik olarak ASP sürümlerini inceleyecek olursak;
Günümüzde ASP 3.0 İlk olarak IIS 3.0’ın geliştirilmesiyle, ASP 1.0 dinamik içerikli web sayfaları
sürümü oluşturmak için piyasaya sürülmüştür.
kullanılmaktadır. IIS 4.0’ın ortaya çıkışıyla birlikte, 1997 yılında ASP 2.0 sürümü ile ASP 1.0
sürümüne yeni özellikler eklemiştir. ASP 2.0 ile altı yeni nesne gelmiştir.
Bu nesneler Response, Request, Application, Session, ASPError ve Server
nesneleridir.
2000 yılına gelindiğinde, IIS 5.0 Microsoft tarafından sunulmuştur.
Bununla beraber, ASP 3.0 sürümü de piyasaya sürülmüştür. 2000 yılından
bu yana ASP 3.0 web sayfası geliştirme teknolojisi kullanılmaktadır.
ASP 3.0 ile yeni gelen veya güncellenen bazı temel özellikler şunlardır:
sunucu tarafı betik içermeyen “.asp" uzantılı dosyalar, yeni akış kontrol
yetenekleri, hata işleme ve yeni ASPError nesnesi, kodlanmış ASP betikleri, sunucu
betikleri, performansı arttırılmış aktif sunucu bileşenleri ve yapılan performans
iyileştirmeleridir.
Web İstek
Sayfa İşleme
ASP ASP Sayfası
Motoru (*.asp)
ASP NESNELERİ
IIS 4.0 sürümünün ortaya çıkışıyla beraber; ASP 2.0 sürümü de piyasaya
sürülmüştür. Bu yeni ASP sürümünde, günümüzde de sıklıkla kullanılan bazı temel
ASP nesneleri ortaya çıkmıştır. ASP bu tür nesne modellerini içeren bir komut
dosyası teknolojisidir. Temel ASP nesneleri olarak Request, Application, Response,
ASPError, Session ve Server nesneleri karşımıza çıkmaktadır.
Request
Request nesnesi ile kullanıcı tarayıcıdan bir HTTP isteği gönderdiğinde,
tarayıcı tarafından sunucuya gönderilen bilgiler alınmaktadır. İstemci sunucudan
herhangi bir sayfa için bir istekte bulunmak istediğinde, Request nesnesinden
yararlanılmaktadır. Örnek 3.2’de Request nesnesi için örnek bir kod
bulunmaktadır.
Kod Ekran Çıktısı
<% Üniversitemiz Atatürk
response.Cookies("site")="Atatürk Üniversitesi" Üniversitesi
siteisim=Request.Cookies("site")
response.write("Üniversitemiz " & siteisim)
%>
Örnek 3.2. Request Örnek
Application
Application nesnesi, sunucu tarafında global değişkenleri depolamak için
kullanılan bir nesnedir. Bu nesne ile IIS sunucusunun çalıştığı süre boyunca mevcut
olan bilgiler kayıt altında tutulabilir. Örneğin bir web sayfasına sayaç bilgisi
eklenerek; web sayfasına erişim sağlayan kullanıcı sayılarına ait bilgi
hesaplanabilir.
Örnek 3.3’te bir sayaç uygulaması örneği verilmektedir. Uygulama nesnesi
ile ASP etiketleri arasında sayaç değişkeni her giriş yapıldığında 1 kez
arttırılmaktadır. Metin içerisindeki ifade de kayıt altına alınan ziyaret sayısı değeri
sunulmaktadır. Örnek 3.3’te oluşturduğunuz kodun bulunduğu ASP sayfasını
tarayıcıda “14” kez çalıştırdığınızda sağ taraftaki sonuç tarayıcı ekranında
görüntülenmektedir.
Response
Kullanıcıya bilgi göndermek için kullanılan bir nesnedir. Kullanıcı bir ASP
sayfasına giriş yapmak istediğinde istekler önce sunucuya iletilir. Response nesnesi
Response nesnesi, ile sunucu tarafında bulunan bilgiler web tarayıcıya iletilmektedir. Sayfada
en çok kullanılan bulunan bir metin içeriği ya da web sayfasına ait çerez bilgileri Response nesnesi
nesnelerden olup bilgi ile iletilmektedir. Örnek 3.4’te “Atatürk Üniversitesi” metnini ekrana yazmak için
gönderme amacıyla kullanılan bir Response nesneyi örneği görülmektedir.
kullanılmaktadır.
Kod Ekran Çıktısı
<% Atatürk Üniversitesi
response.write("Atatürk Üniversitesi")
%>
ASPError
ASPError nesnesi, hataların yönetimi ile ilgilenen nesnedir. Bu nesne ile ASP
sayfalarında oluşan herhangi bir hataya ait ayrıntılı bilgiler kullanıcılara
sunulmaktadır. ASP dosyaları sunucu tarafında işlenirken; üç türlü hata durumu
olabilmektedir. Bu hatalar, derleme zamanı hataları, çalışma zamanı hataları ve
mantıksal hata türleridir. Bu tür hataların olduğu durumlarda, sunucu tarafında
işlenen kodlara ait hata bilgileri tarayıcıya iletildikten sonra kullanıcılara
sunulmaktadır.
Session
Session nesnesi, herhangi bir kullanıcıya ait oturum bilgilerini saklamak
amacıyla kullanılmaktadır. Özellikle kullanıcının sayfalar arasında gezinti yaptığı
durumlarda, kullanıcı bilgisinin kayıt altında tutulması gerekmektedir. Session
nesnesi ile kullanıcının web sayfasına erişimi olduğu süre boyunca, farklı sayfalar
arasında gezinti yapsa bile bilgiler kayıt altında tutulmaktadır. Örnek 3.5’te,
Session nesnesi kullanılarak; her bir kullanıcı için sunucu tarafında oluşturulan
benzersiz bir kimlik bilgisi döndürülmektedir.
Kod
<%
response.write(Session.SessionID)
%>
Server
Sunucu nesnesini kullanılarak sunucuda bulunan yöntem ve özelliklere
erişim sağlanmaktadır. Bu nesne sınırlı bir dizi yardımcı fonksiyonlar içermektedir.
Temelde başvurulan bazı fonksiyonlar ise CreateObject, HTMLEncode, MapPath,
URLEncode ve GetLastError fonksiyonlarıdır.
JavaScript
Netscape firması tarafından geliştirilmiş öğrenmesi kolay bir dildir. Web
sayfalarının davranışlarını programlama amacıyla kullanılmaktadır. Günümüzde
web programcılığında popüler dillerden biri olup, kullanıcılar için dinamik ve
etkileşimli web sayfaları oluşturulmasını sağlamaktadır.
PerlScript
Sözdizim yapısı olarak Perl dili ile benzer bir yapıya sahiptir. ASP
sayfalarında PerlScript dili kullanarak oluşturulan kodları çalıştırmak için
ActiveState firması tarafından hazırlanan PerlScript betik motoruna ihtiyaç
bulunmaktadır.
Python
Python günümüzde web sayfaları oluşturmaktan veri bilimine kadar birçok
alanda başarısını kanıtlamış esnek ve başarılı popüler programlama dilidir. Nesne
yönelimli kodlar yazmak için Python oldukça etkili bir dildir. ASP 2.0 ile gelen COM
(Component Object Model) betik dil desteği ile dil bağımsız ASP sayfaları
oluşturmak mümkündür. COM'un dilden bağımsız yapısı ve Python dilinin COM
desteğini kullanarak; Python dili ile ASP sayfaları oluşturmak mümkündür. Python
dili kullanılarak oluşturulan ASP web sayfası kodlarını çalıştırmak için Python
ActiveX betik motoruna ihtiyaç bulunmaktadır.
ASP’de Değişkenler
ASP’de standart olarak kullanılan VBScript dilini ele aldığımızda değişkenler
ayrı ayrı olarak tanımlanıp tek tip olarak ifade edilmiştir. Tanımlanan bir değişken
istenilen tüm tiplerde (sayı, metin vs.) ifade edilebilir. Değişkenin tipi tanımlandığı
anda değil, aldığı değere göre kullanılabilmektedir. ASP’de değişkenler doğrudan
kullanılabilmektedirler. Örnek 3.6’da “Universite” değişkenini Response nesnesiyle
ekrana yazdırmak istediğimizde değişken değeri olan “Atatürk Üniversitesi”
tarayıcıya döndürülüp ekrana yazılacaktır.
Kod Ekran Çıktısı
<% Atatürk Üniversitesi
Universite = "Atatürk Üniversitesi"
response.write(Universite)
%>
Değişkenin bir sayı olarak tanımlanması da yine benzer şekilde olup, değer
olarak sayı bilgisinin girilmesi yeterli olacaktır. Örnek 3.7’de bulunan kodu
çalıştırdığımızda ekrana toplama değerinin sonucu olan 8 değeri gelecektir.
Kod Ekran Çıktısı
<% 8
sayi1=3
sayi2=5
response.write(sayi1+sayi2)
%>
ASP dil ortamında VBScript betik dili için koşul ifadelerinin söz dizimi yapısı,
“if…Then…Else”, “If...Then...ElseIf” ve “Select Case” ifadeleri ile sağlanmaktadır.
%>
ASP’de Döngüler
Programlama dillerinde belirli koşullar altında çalışan bazı kod bloklarının
tekrarlı bir şekilde çalıştırılması için döngüler kullanılabilir. Bu amaçla kullanılan
döngü ifadeleri, içyapısında bulunan koşul ifadesiyle bir kod bloğunun birden çok
kez çalıştırılması gerektiğini anlayarak çalışmaktadır. Şekil 3.4’te görüldüğü üzere
kod bloğu, koşul ifadesi doğru olduğu sürece çalışmaktadır. Koşul ifadesi yanlış
olduğu durumda program akışına kaldığı yerden devam etmektedir.
Tekrar
Doğru ise
Kod Bloğu
For...Next Loop
Klasik programlama döngülerinde kullanılan “for” döngüsü ile aynı işlevi
görmektedir. Örnek 3.11’de görüleceği üzere döngü 5 kez çalışmakta ve a
ASP’de döngü ifadeleri değişkeni “0” değerinden “4” değerine kadar sayısal değerler almaktadır. Ekrana
için For...Next Loop, For ise “Sayı” ifadesi ile “a” değişkeninin değerleri yazılmaktadır.
Each...Next Loop ve Kod Ekran Çıktısı
Do…Loop yapıları <% Sayı= 0
kullanılmaktadır. For a=0 To 4 Sayı= 1
response.write("Sayı= " & a &"<br/>") Sayı= 2
Next Sayı= 3
%> Sayı= 4
Do...Loop
Bu döngü türü diğer programlama dillerinde bulunan while, do…while,
repeat…until döngülerini kapsayan bir döngü türüdür. VBScript dilinde bu döngü
ifadesi, Do While … Loop, Do…Loop While, Do Until…Loop, Do…Loop Until şeklinde
4 farklı yapı içermektedir. Kullanımları ve çalışma şekilleri çok benzer olmakla
birlikte koşul ifadesi doğru olduğu sürece ya da koşul doğru olana kadar çalışmayı
ifade etmektedir. Örnek 3.13 Do While…Loop kod örneğinde i değişkeni 1
değerinden 5 değerine kadar değerler almaktadır.Tarayıcı ekranına “Sayı” metni
ile “i” değişkeninin değeri döngüsel olarak yazılmaktadır. Programda “i”
değişkenin değeri döngü boyunca birer arttırılmaktadır.
ASP’de Prosedürler
Bir program yazılırken yazım kolaylığı amacıyla prosedürlerden yararlanılır.
Prosedürler hem programın okunurluğunu arttırmakta hem de tekrarlı şekilde
kullanılan veya çağrılan program parçacıkları için gereksiz yere fazla kod
yazılmasını engellemektedir. Program içerisinde çağrılan prosedürler ile
performans ve okunabilirlik anlamında en uygun kodların yazılması
hedeflenmektedir.
ASP’de geriye değer ASP dil ortamında standart olarak tercih edilen VBScript dilinde iki tür
döndürmeyen prosedür kullanımı bulunmaktadır. Bunlar “Subroutine” ve “Function” olarak ifade
Subroutine ve geriye edilmektedir. Her iki prosedür tipi de parametre alabilmektedir. İki prosedür
değer döndüren arasındaki temel fark ise geriye değer döndürülmesi olayıdır. “Subroutine”
Function olmak üzere prosedüründe geriye değer döndürülmezken, “Function” prosedüründe geriye
iki tane prosedür türü değer döndürülmesi olayı gerçekleşmektedir.
vardır.
Örnek 3.14’te yazılan “Subroutine” örneğinde “hos_geldiniz” isimli bir
prosedür tanımlanmıştır. Bu prosedür “Call” ifadesiyle çağrılmakta ve ekrana
“Response “ nesnesi kullanılarak “Hoş Geldiniz Öğrenciler” ifadesi yazılmaktadır.
Prosedür geriye değer döndürmemektedir.
Kod Ekran Çıktısı
<% Hoş Geldiniz Öğrenciler
Sub hosgeldiniz()
response.write ("Hoş Geldiniz Öğrenciler")
End Sub
Call hosgeldiniz()
%>
set rs=Server.CreateObject("ADODB.recordset")
rs.Open "Select * from Ogrenciler", baglanti
rs.Close
baglanti.Close
%>
•ASP NEDİR?
•ASP, “Active Server Pages” kelimelerinin kısaltmasından oluşmaktadır.
Türkçe ifade karşılığı “Aktif Sunucu Sayfaları” olarak ifade edilmektedir. Aktif
ifadesi, dinamik içerikler ifadesiyle örtüşmektedir. Sunucu sayfaları ile ifade
edilen durum ise; ASP dil ortamının sunucu tarafında çalışması durumudur.
ASP, ilk olarak 1999 yılında IIS 3.0 (Internet Information Server) sunucu
taraflı yönetim yazılımıyla beraber ortaya çıkmıştır. 1997 yılında ASP 2.0
Özet
teknolojisi ortaya konmuştur. ASP 2.0'da bu güncelleme ile Response,
Request, Application, Session, ASPError ve Server nesneleri gibi önemli
nesne modeli kavramları ortaya çıkmıştır. 2000 yılında günümüzde de
kullanılan ASP 3.0 güncellemesi gelmiştir. ASP dosya yapısı itibariyle; HTML
dili ve betik bir dilden oluşmaktadır. Betik dil olarak genellikle VBScript tercih
edilmekle birlikte farklı diller de kullanılabilmektedir. ASP dosyalarında betik
dile ait kodlar “<% ve %>” etiketleri arasına yazılmaktadır. ASP ile yazılmış
olan bir web sayfasında; web tarayıcıdan gelen sayfa isteği sunucu tarafında
ASP motoruna iletilir. ASP motoru gelen “.asp” uzantılı sayfayı satır satır
işleyerek bir HTML çıktısına dönüştürür. HTML çıktı sayfası web tarayıcısında
görüntülenir.
•ASP NESNELERİ
• IIS 4.0 sürümünün 1997 yılında ortaya çıkışıyla beraber ASP 2.0
güncellemesi gelmiştir. Bu güncellemede ki en temel değişiklik ASP
nesneleridir. 6 önemli nesne yapısı ortaya çıkmış olup bu nesneler Request,
Application, Response, ASPError, Session ve Server nesneleridir. Bu nesneler
günümüzde kullanılan klasik ASP’nin temel yapı taşlarıdır.
•ASP BETİK DİLLERİ
• Betik bir dil, herhangi bir programlama dilinde yazılmış ve çalıştırılmaya
hazır kod parçacıklarına denilmektedir. ASP bir programlama dili olmayıp,
içerisinde farklı betik dillerin çalışmasına izin veren ve aynı zamanda HTML
diline ait kodları da içeren bir dil ortamıdır. ASP başlangıçta Microsoft
tarafından geliştirilen VBScript betik dili ile çalışırken; günümüzde JavaScript,
PerlScript ve Python dilleri ile de yazılan kodlar ile de çalıştırılabilmektedir.
•ASP İLE WEB PROGRAMLAMA
•ASP içerisinde farklı betik diller ile kodlama imkanı sunan, sunucu taraflı
dinamik web sayfaları oluşturmaya yarayan bir dil ortamıdır. Bu dil
ortamında en çok tercih edilen betik dil olarak VBScript karşımıza
çıkmaktadır. VBScript dili, Visual Basic dilinin temel yapılarını içermekle
beraber daha sade bir betik dildir. Bu betik dilin kendisine has bazı yapıları
bulunmaktadır. Değişkenlerin tipi önceden belirlenmeyip, değişkenin aldığı
değere göre tipi (sayı, metin vs.) belirlenmektedir.
• VBScript dilinde koşul ifadeleri olarak “if…Then…Else”, “If...Then...ElseIf” ve
“Select Case” yapıları bulunmaktadır. Döngü diye tabir ettiğimiz tekrarlayan
kod blokları için For...Next Loop, For Each...Next Loop, Do...Loop yapıları
kullanılmaktadır. Prosedür kullanımında ise geriye değer döndürmeyen
“Subroutine” ve geriye değer döndüren “Functions” prosedürleri
kullanılmaktadır.
•ASP’DE VERİ TABANI İŞLEMLERİ
•ASP, dinamik içerikler oluşturmak için veri tabanlarından yararlanmaktadır.
Kullanıcı etkileşimi için veri tabanlarında veri ekleme, silme ve değiştirme
gibi bazı işlemler yapılmaktadır. ASP’de veri tabanlarında bu tür işlemleri
gerçekleştirmek için; hızlı ve etkili ADO (ActiveX Data Objects) nesneleri
kullanılmaktadır. Bu teknoloji dilden bağımsız bir nesne modeli olup,
geliştiricilere birçok kolaylığı beraberinde getirmektedir.
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisinde sunucu tarafında kodları çalıştırmak için
yazılan ASP kodlarının başına ve sonuna yazılan etiketlerdir?
a) <%asp ve asp%>
b) <asp ve asp>
c) <-asp ve asp->
d) <! ve !>
e) <% ve%>
Cevap Anahtarı
1.e, 2.a, 3.d, 4.e, 5.a, 6.a, 7.d, 8.e, 9.c, 10.e
YARARLANILAN KAYNAKLAR
Anderson, R. ve diğerleri. Professional Active Server Pages 3.0, Birmingham: Wrox
Press
ASP. 3 Ocak 2022 tarihinde https://www.w3schools.com/asp/ adresinden erişildi.
Mitchell, S. (2000). Designing Active Server Pages, Sebastopol, CA: O’Reilly &
Associates
Roff, J. T. (2001). ADO: ActiveX Data Objects, Sebastopol, CA: O’Reilly & Associates
Scripting with COM Objects. 5 Ocak 2022 tarihinde
https://docs.microsoft.com/en-us/windows/win32/com/scripting-with-
com-objects adresinden erişildi.
• .NET Framework
• ASP.NET
İÇİNDEKİLER
açıklayabilecek,
• .NET dillerini tanımlabilecek,
• .NET sınıf kütüphanelerini
açıklabilecek,
• ASP ve ASP.NET arasındaki farkı
açıklayabileceksiniz.
ÜNİTE
4
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: Giriş
.NET Versiyonları
.NET Framework
.NET'in Temelleri
ASP.NET
ASP.NET: GİRİŞ
.NET Mimarisi ve
Programlama Dilleri Managed C++ ile Arac
Sınıfının Oluşturulması
.NET Sınıf
Kütüphaneleri VB.NET ile Otomobil
Sınıfının Oluşturulması
Dil Entegrasyonu
C#.NET ile Ucak Sınıfının
Oluşturulması
66
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: Giriş
GİRİŞ
.NET ilk olarak Microsoft tarafından Temmuz 2000'de duyurulan bir
platformdur. .NET platformu, 1990'ların sonlarına kadar kullanılmakta olan
teknolojileri birbirine entegre eden, Windows hizmetlerine ve API'lerine yönelik
yeni bir programlama arabirimine sahip bir uygulama geliştirme çerçevesidir
(framework). COM+ bileşen hizmetleri, ASP Web geliştirme çerçevesi, XML ve
nesne yönelimli tasarım, SOAP, WSDL ve UDDI gibi yeni Web hizmet protokolleri
için destek .NET çerçevesine dahil edilmiştir.
.NET platformu geliştirme araçları, özelleştirilmiş sunucular, Web hizmetleri
.NET platformu, ve cihazlar olmak üzere dört ayrı ürün grubundan oluşmaktadır. Geliştirme
Windows hizmetlerine araçları, C#.NET ve VB.NET gibi programlama dillerini; Visual Studio gibi uygulama
ve API'lerine yönelik dizi geliştirme araçlarını, Web ve Windows uygulamaları oluşturmak için kapsamlı
yeni bir programlama bir sınıf kütüphanesini ve bu çerçevede oluşturulmuş nesneleri yürütmek için
arabirimine sahip bir ortak dil çalışma platformunu ifade etmektedir. Uzmanlaşmış sunucular: İlişkisel
uygulama geliştirme
veri depolama, e-posta ve işletmeden işletmeye ticareti gibi özel işlevsellik
çerçevesidir.
sağlayan sunucuları ifade etmektedir. Web hizmetleri, geliştiricilerin belirli bir
ücret karşılığında, kullanıcı kimliği bilgisi gerektiren uygulamalar oluşturmaları için
kullandıkları ticari Web hizmetlerini ifade etmektedir. Cihazlar ise cep
telefonlarından oyun konsollarına kadar .NET desteği olan cihazları ifade
etmektedir.
Microsoft .NET teknolojisi, bilgi işlem ve iletişim teknolojilerini birleştiren,
yeni nesil gelişmiş bir yazılım platformudur. .NET, geliştiricilerin, işletmelerin ve
tüketicilerin teknolojiyi kendi şartlarına göre kullanmalarını sağlar. .NET'in
arkasındaki temel fikir, odak noktasının bireysel Web sitelerinden veya İnternet'e
bağlı cihazlardan daha geniş, daha zengin çözümler sunmak için birlikte çalışan
bilgisayar, cihaz ve hizmet kümelerine kaymasıdır.
.NET, bilgi işleme ve iletişimi her zamankinden daha basit ve kolay bir hale
getirmiştir. Bu sayede kullanıcılar kendilerine nasıl, ne zaman ve hangi bilgilerin
iletileceği konusunda kontrole sahip olacaktır. İşletmeler, ürün ve hizmetlerini,
müşterilerin kendi elektronik yapılarına sorunsuz bir şekilde yerleştirmelerini
sağlayacak şekilde sunabilecektir.
.NET FRAMEWORK
Microsoft .NET, çeşitli programlama dillerinde geliştirilmiş uygulamaların
yürütülmesi veya çalıştırılması için ortak bir platform sağlayan bir çerçevedir. .NET,
aşağıdaki hedefleri yerine getirmek için tasarlanmıştır:
Nesneye yönelik programlama ortamı sağlamak,
Windows tabanlı uygulamalar ve Web tabanlı uygulamalar gibi çeşitli
uygulama türlerinin geliştirilmesi için ortam sağlamak,
.NET tabanlı kodun başka herhangi bir kodla bütünleşebilmesini sağlamak.
Microsoft .NET Framework, çeşitli Microsoft Windows işletim sistemlerinde
kullanılabilen, yazılımla uyumlu bir yapıdır. Yaygın programlama sorunlarına
67
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: Giriş
yönelik önceden kodlanmış çözümlerden oluşan geniş bir kitaplık ve çerçeve için
özel olarak yazılmış programların yürütülmesini yöneten bir sanal makine içerir.
.NET Framework, Windows platformu için oluşturulan çoğu yeni uygulama
tarafından kullanılmak üzere tasarlanmıştır. Çerçevenin temel sınıf kitaplığını
oluşturan önceden kodlanmış çözümler, kullanıcı arabirimi, veri erişimi, veri tabanı
bağlantısı, kriptografi, web uygulaması geliştirme, sayısal algoritmalar ve ağ
iletişimi dâhil olmak üzere birçok alanda çok çeşitli programlama ihtiyaçlarını
kapsar.
Sınıf kitaplığı, uygulamalar üretmek için onu kendi kodlarıyla birleştiren
programcılar tarafından kullanılır. .NET Framework için yazılan programlar,
programın çalışma zamanı gereksinimlerini yöneten bir yazılım ortamında
yürütülür. Ayrıca .NET Framework'ün bir parçası olan bu çalışma zamanı ortamı,
Ortak Dil Çalışma Zamanı (Common Language Runtime-CLR) olarak bilinir. CLR, bir
uygulama sanal makinesinin görünümünü sağlar, böylece programcıların programı
CLR, uygulama yürütme yürütecek belirli CPU'nun yeteneklerini dikkate alması gerekmez. CLR ayrıca
için ortak çalışma güvenlik, bellek yönetimi ve özel durum işleme gibi diğer önemli hizmetleri de
zamanı sağlayan, dilden sağlar.
bağımsız bir geliştirme
ve yürütme ortamıdır. .NET Framework’ün sunduğu avantajlar aşağıdaki gibi sıralanabilir:
Tutarlı ve nesne yönelimli bir programlama ortamı.
Kodun güvenli bir şekilde yürütülmesini destekler.
Yazılım dağıtımı ve sürüm çakışmalarını en aza indirir.
Birden çok cihazda çeşitli Windows tabanlı ve Web tabanlı uygulamalarda
hem geliştiriciler hem de kullanıcılar için tutarlı bir şekilde kullanılmasını
sağlar.
.NET Framework'e dayalı kodun diğer herhangi bir kodla
bütünleşebilmesini sağlamak için endüstri standartlarına dayalı iletişim
sağlar.
.NET, HTTP, XML ve SOAP gibi protokolleri içeren açık İnternet
standartlarına dayanmaktadır.
.NET Versiyonları
Microsoft tarafından geliştirilen bir programlama modeli olan .NET
Framework, Windows, Windows Phone, Windows sunucuları, XML Web hizmetleri
ve Microsoft Azure için uygulamaların oluşturulmasını ve çalıştırılmasını destekler.
.NET Framework, VB.Net, C++, F# ve C# gibi çeşitli programlama dillerinde FCL
(Framework Class Library) ve CLR (Common Language Runtime) adlı büyük bir sınıf
kitaplığı içerir.
.NET Framework, veri erişimi, ara yüz, kriptografi, veri bağlantısı, algoritma,
ağ iletişimi ve Web uygulaması geliştirme gibi çeşitli programlama ihtiyaçlarını
kapsayan Temel Sınıf Kütüphanesi (Base Class Library-BCL) sağlar.
Microsoft, 1990'larda yeni nesil Windows hizmetleri adı altında .NET
Framework geliştirme sürecini başlattı ve 2000 yılının sonlarında ilk beta
sürümünü yayınladı. 13 Şubat 2002'de .NET Framework 1.0, Windows 98,
68
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: Giriş
69
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.NET: Giriş
70
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.NET: Giriş
.NET’in Temelleri
.NET'in temel stratejisi yazılımı bir hizmet olarak etkinleştirmektir. .NET
ayrıca dağıtık bilgi işleme, bileşen oluşturma, kurumsal hizmetler, Web
paradigmasındaki değişiklikler ve tecrübe kazanımına yanıt vermeye
çalışmaktadır. Dağıtık bilgi işleme, istemci/sunucu uygulamalarının
geliştirilmesinin basitleştirilmesini sağlar. .NET’den önceki teknolojiler, işlem
sürecinde kişilerin ve makinelerin fiziksel yakınlığını gerektirdiği için Web üzerinde
birlikte çalışma konusunda eksikti. .NET, HTTP, XML ve SOAP gibi İnternet
standartlarından yararlanan bir uzaktan iletişim mimarisi sağlar.
Bileşen oluşturma, farklı üreticiler tarafından geliştirilen yazılım
bileşenlerinin entegrasyonunu ifade etmektedir. Bileşen Nesne Modeli
(Component Object Model-COM), tak-çalıştır yazılım teknolojisini beraberinde
getirmiştir ancak COM bileşenlerinin geliştirilmesi ve dağıtımı oldukça karmaşıktır.
.NET ise bu bileşenlerin oluşturulması ve dağıtımı için daha basit bir yol sağlar.
Kurumsal hizmetler, işlemlerin güvenliğini ve yönetilebilirlik için kod
yazmadan kurumsal uygulamaların geliştirilmesine izin verilmesini ifade
etmektedir. .NET, geliştirme süresini ve büyük ölçekli uygulamalar oluşturmaya
yönelik çabayı büyük ölçüde azalttığı için kurumsal hizmetleri desteklemeye
devam etmektedir.
Web paradigmasındaki değişiklikler, Web uygulamalarının geliştirilmesini
basitleştirmek için Web teknolojilerindeki değişiklikleri ifade eder. Günümüzde,
Web uygulaması geliştirme süreci, bağlanabilirlikten (TCP/IP), sunuma (HTML) ve
programlanabilirliğe (XML ve SOAP) geçiş göstermiştir.
Tecrübe kazanımı, yazılım endüstrisinin büyük ölçekli kurumsal ve web
uygulamaları geliştirirken kazandığı tecrübeleri ifade etmektedir. Örneğin, ticari
bir Web uygulaması birlikte çalışabilirliği, ölçeklenebilirliği, kullanılabilirliği ve
yönetilebilirliği desteklemelidir. .NET tüm bu hedefleri kolaylaştırmayı
hedeflemektedir. Bunlar .NET'in içerdiği ana kavramlar olsa da .NET'in bir nesneyi
İnternet üzerinden bir makineden diğerine iletmek için temel olarak açık İnternet
standartlarını (HTTP, XML ve SOAP) kullanmaktadır.
Microsoft .NET Framework'ün temel tasarım hedefleri, bileşen desteği, dil
entegrasyonu, uygulamaların birlikte çalışabilirliği, basit geliştirme ve güvenlik
olarak sıralanabilir. Bileşen desteği, geliştiricilerin kütüphane dosyası gibi
bileşenleri uygulamalarına kolay bir şekilde entegre edebilmeleri ifade etmektedir.
COM teknolojisinden önce, geliştiricilerinin kaynak kodlarına başvurmadan veya
değiştirmeden kütüphane dosyalarını uygulamalarına dâhil edebilmelerinin basit
bir yolu yoktu. COM'un ortaya çıkmasıyla, kütüphane dosyası gibi binary
bileşenlerin uygulamalara dâhil edilmesi kolaylaştı. Ancak COM’un getirdiği binary
yazma düzeni bir sınırlılık olarak ön plana çıkmaktadır. Benzer kodların sık sık
yeniden yazılmasına neden olan bu gereksinimler .NET ile ortadan kaldırılmıştır.
.NET’te tüm sınıflar binary düzeyde yeniden kullanılabilir.
COM, dil bağımsızlığını destekler. Bileşenler COM’da belirtilen tüm kuralları
karşıladığı sürece, uygulamalar tarafından kullanılabilir. Bu durum yeniden
kullanımı desteklerken, dil entegrasyonunu sağlamaz. Microsoft .NET yalnızca dil
71
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: Giriş
ASP.NET
Active Server Pages (ASP), yıllarca Windows Web sunucularında dinamik
Web sayfaları oluşturmak amacıyla Web geliştiricileri açısından önde gelen bir
seçim olmuştur. ASP, çeşitli diller aracılığıyla esnek komut dosyası oluşturmanın
basitliğini sunarak popülerlik kazanmıştır. Klasik ASP’nin eksiklikleri aşağıdaki gibi
sıralanabilir:
ASP, IIS altında çalıştırılır ve bu nedenle IIS'nin durdurulması veya yeniden
başlatılması gerektiğinden ASP uygulama çökmelerine karşı hassastır.
Klasik ASP'nin, Microsoft dışı teknoloji platformlarında kendini çalıştırma
ASP'de, her zaman bir mekanizması yoktur.
yorumlayıcı (JScript
ASP'de VBScript ve Jscript/JavaScript olmak üzere komut dosyası yazmak
veya VBScript)
aracılığıyla sunucu için yalnızca iki dil mevcuttur.
tarafı kodunu yürütülür. ASP'de, her zaman bir yorumlayıcı (JScript veya VBScript) aracılığıyla
sunucu tarafı kodunu yürütülür. Geleneksel bir ASP sayfası istendiğinde, o
sayfanın metni doğrusal olarak ayrıştırılır. Sunucu tarafı komut dosyası
olmayan tüm içerik, yanıta geri döndüğü gibi işlenir. Sayfadaki tüm sunucu
tarafı komut dosyası, önce uygun yorumlayıcı aracılığıyla çalıştırılır ve
72
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: Giriş
73
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: Giriş
74
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: Giriş
75
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: Giriş
76
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: Giriş
DİL ENTEGRASYONU
.NET'in hedeflerinden biri, uygulama programlama için ortak bir
paradigmayı desteklemek olduğundan, programlama kavramlarını tutarlı bir
şekilde belirtmeli ve kullanmalıdır. Bu bölümün devamında, Managed C++, VB.NET
ve C# gibi üç temel Microsoft .NET dili ve.NET dillerinin desteklediği temel
programlama kavramları incelenecektir.
• Namespace: İsim çakışmalarını azaltır.
• Arayüz: Arabirimi ortaya çıkaran nesneler tarafından uygulanması gereken
yöntemleri ve özellikleri belirtir.
• Kapsülleme: Nesne yönelimli dillerde, bir sınıfın tüm verilerini ve
davranışını kapsüllemesine izin verir.
• Kalıtım: Bir sınıfın, üst sınıfın uyguladığı zengin işlevselliği yeniden
kullanabilmesi için bir üst sınıftan miras almasına izin verir, böylece
geliştirme çabasını ve programlama hatalarını azaltır.
• Polimorfizm: Geliştiricilerin, türetilmiş bir sınıf tarafından geçersiz
kılınabilecek bir temel sınıfta davranışları belirlemesine veya uygulamasına
izin verir. Bu çok güçlü bir özelliktir çünkü geliştiricilerin başvurulan
çalışma zamanı nesnesine dayalı olarak doğru davranışı seçmesine olanak
tanır.
• İstisna işleme: Anlaşılması daha kolay kod yazılmasına izin verir. Tüm
hataların ortak ve anlaşılır bir düzende yakalanmasını sağlar.
Yukarıda .NET'in desteklediği önemli kavramların özellikleri açıklanmıştır.
Tüm bu özelliklerin örnekleri Managed C++, VB.NET ve C# kullanılarak
incelenecektir. Dil entegrasyonu, tamamen farklı bir dilde oluşturulmuş bir koddan
sınıf türetme, farklı bir dilde yazılmış kodun istisnalarını yakalama veya farklı
dillerdeki polimorfizmin avantajlarını kullanma gibi konuları kapsamaktadır. Örnek
olarak, Araç adında soyut bir sınıf geliştirmek için öncelikle C++ kullanılacaktır.
Araç sınıfı, Sola_Don(), Saga_Don() ve Frenle() olmak üzere üç polimorfik metot
sunmaktadır. Ardından, Araç'tan türetilen bir Otomobil sınıfı geliştirmek için
77
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: Giriş
VB.NET'i kullanılacaktır. Ayrıca, yine Araç’tan türetilen Ucak sınıfını geliştirmek için
C# kullanılacaktır.
78
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: Giriş
Imports System
Public Class Otomobil
Inherits Arac
Overrides Public Sub Sola_Don ( )
Console.WriteLine("Otomobil sola dönüyor.")
End Sub
Overrides Public Sub Saga_Don ( )
Console.WriteLine("Otomobil sağa dönüyor.")
End Sub
Overrides Public Sub Frenle( )
Console.WriteLine("Otomobil yavaşlıyor.")
throw new Exception("Frenleme hatası!")
End Sub
End Class
79
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: Giriş
{
Console.WriteLine("Frenler kullanılıyor.");
}
}
80
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: Giriş
arc. Sola_Don ( );
arc.Frenle( ); // Exception
}
catch(Exception e)
{
Console.WriteLine(e.ToString( ));
}
}
}
81
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: Giriş
•GİRİŞ
• Microsoft .NET teknolojisi, bilgi işlem ve iletişim teknolojilerini birleştiren,
yeni nesil gelişmiş bir yazılım platformudur.
•.NET, geliştiricilerin, işletmelerin ve tüketicilerin teknolojiyi kendi şartlarına
göre kullanmalarını sağlar.
Özet
•.NET'in arkasındaki temel fikir, odak noktasının bireysel Web sitelerinden
veya İnternet'e bağlı cihazlardan daha geniş, daha zengin çözümler sunmak
için birlikte çalışan bilgisayar, cihaz ve hizmet kümelerine kaymasıdır.
•.NET FRAMEWORK
•Microsoft .NET, çeşitli programlama dillerinde geliştirilmiş uygulamaların
yürütülmesi veya çalıştırılması için ortak bir platform sağlayan bir çerçevedir.
•.NET, nesneye yönelik programlama ortamı sağlamak
•Windows tabanlı uygulamalar ve Web tabanlı uygulamalar gibi çeşitli
uygulama türlerinin geliştirilmesi için ortam sağlamak
•.NET tabanlı kodun başka herhangi bir kodla bütünleşebilmesini sağlamak
gibi amaçlar doğrultusunda geliştirilmiştir.
•.NET’İN TEMELLERİ
•.NET'in temel stratejisi yazılımı bir hizmet olarak etkinleştirmektir. .NET
ayrıca dağıtık bilgi işleme, bileşenleştirme, kurumsal hizmetler, Web
paradigmasındaki değişiklikler ve tecrübe kazanımına yanıt vermeye
çalışmaktadır.
•ASP.NET
•ASP.NET, Microsoft .NET Framework'e dayalı Web uygulamaları geliştirmeye
yönelik bir sunucu tarafı teknolojisidir.
•ASP.NET’te, sayfadaki kod sunucu tarafından okunur ve ardından tarayıcıya
gönderilen standart HTML/JavaScript/CSS oluşturmak için dinamik olarak
kullanılır.
•ASP.NET kodunun işlenmesi sunucuda gerçekleştiğinden, sunucu tarafı
teknolojisi denilmektedir.
• ASP.NET aşağıdaki avantajlara sahiptir:
•ASP.NET, esnek bir şekilde programlama dillerinin kullanılmasını sağlar.
•ASP.NET sayfaları derlenir, yorumlanmaz. Her dinamik sayfa istendiğinde
kodunuzu okuyup yorumlamak yerine, ASP.NET dinamik sayfaları sunucunun
çok hızlı bir şekilde çalıştırabileceği binary dosyalar halinde derler.
•ASP.NET, .NET Framework'ün işlevlerine tam erişime sahiptir. XML, Web
Hizmetleri, veri tabanı etkileşimi, e-posta, düzenli ifadeler ve diğer birçok
teknoloji desteği doğrudan .NET'te yerleşiktir.
•ASP.NET, sayfalarınızdaki sunucu tarafı kodunu HTML düzeninden
ayırmanıza olanak tanır.
•.NET MİMARİSİ VE PROGRAMLAMA DİLLERİ
•.NET Framework Ortak Dil Belirtimi (CLS), Temel Sınıf Kütüphaneleri (BCL) ve
Ortak Dil Çalışma Zamanı (CLR) bileşenlerinden oluşmaktadır.
•CLS, .NET dil uyumlularının onaylaması gereken minimum standartları
tanımlar.
•Böylece, bir .NET derleyicisi tarafından derlenen herhangi bir kod, .NET
Framework ile birlikte çalışabilir.
82
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: Giriş
Özet (devamı)
•Ayrıca, temel sınıf kütüphaneleri, belirli bir bilgisayardaki dizin ve dosya
sistemiyle etkileşime girmek, ilişkisel veri tabanlarıyla (ADO.NET aracılığıyla)
iletişim kurmak vb. için türler sağlar.
•BCL, işlevsellik ve uygulamalardan oluşan tutarlı, nesne yönelimli bir
kütüphanedir.
•CLR, uygulama yürütme için ortak çalışma zamanı sağlayan, dilden bağımsız bir
geliştirme ve yürütme ortamıdır.
• CLR'nin temel amacı, programcı adına .NET nesnelerini yüklemek, bulmak ve
yönetmektir.
•DİL ENTEGRASYONU
•Dil entegrasyonu, tamamen farklı bir dilde oluşturulmuş bir koddan sınıf
türetme, farklı bir dilde yazılmış kodun istisnalarını yakalama veya farklı
dillerdeki polimorfizmin avantajlarını kullanma gibi konuları kapsamaktadır.
•Dil entegrasyonu sayesinde Araç adında soyut bir sınıf geliştirmek için C++,
Araç'tan türetilen bir Otomobil sınıfı geliştirmek için VB.NET ve yine Araç’tan
türetilen Ucak sınıfını geliştirmek için C# kullanılabilir.
83
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: Giriş
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi uygulama yürütme için ortak çalışma zamanı
sağlayan bir ortamdır?
a) CLS
b) CLR
c) MSIL
d) IL
e) CTS
84
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: Giriş
I. ASP.NET uygulamaları
II. CLR
III. Framework sınıf kütüphanesi
IV. Windows form uygulamaları
6. Yukarıdakilerden hangisi ya da hangileri .NET Framework'ü oluşturur?
a) I ve II
b) II ve III
c) III ve IV
d) II ve IV
e) I ve IV
I. CLR
II. FCL
III. Microsoft Yayınlanmış Web Hizmetleri
IV. IIS’te dağıtılan uygulamalar
7. Yukarıdakilerden hangisi ya da hangileri .NET Framework'ün
bileşenlerindendir?
a) I, II ve III
b) I ve II
c) I, II ve IV
d) III ve IV
e) I, II, III ve IV
85
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.NET: Giriş
Cevap Anahtarı
1.b, 2.a, 3.a, 4.c, 5.e, 6.b, 7.e, 8.d, 9.e, 10.d
86
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.NET: Giriş
YARARLANILAN KAYNAKLAR
MacDonald, M. (2010). Beginning ASP. NET 4 in C# 2010. Apress.
Price, M. J. (2020). C# 9 and. NET 5–Modern Cross-Platform Development-: Build
intelligent apps, websites, and services with Blazor, ASP. NET Core, and
Entity Framework Core using Visual Studio Code (5. Baskı). Packt Publishing
Ltd.
Ravalcaba, Z. (2004). Build your own ASP. Net Website Using C# and VB. NET.
Spaanjaars, I. (2012). Beginning ASP. NET 4.5: in C# and VB. John Wiley & Sons.
Shepherd, G. (2010). Microsoft ASP. NET 4 Step by Step. Pearson Education.
Thai, T., & Lam, H. (2003). NET framework Essentials (2. Baskı). O'Reilly Media, Inc.
.NET Revolution : An Overview of the .Net Framework Versions (2019). 1 Ocak
2022 tarihinde https://www.clariontech.com/blog/the-.net-revolution-an-
overview-of-the-.net-framework-versions adresinden erişildi.
87
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET:CSHARP
• Değişkenler
• Operatörler
İÇİNDEKİLER
• Diziler İNTERNET
• Kontrol Yapıları
• Döngüler PROGRAMCILIĞI II
• Metotlar Dr. Öğr. Üyesi Anıl
• Nesneye Yönelik
Programlama UTKU
5
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: CSharp
Değişkenler Sabitler
Aritmetik Operatörler
İlişkisel Operatörler
Mantıksal Operatörler
Operatörler
Bitsel Operatörler
Atama Operatörleri
Diziler
Operatörlerde İşlem
ASP.NET:CSHARP
Önceliği
If Koşul İfadeleri
Kontrol Yapıları
Switch İfadesi
While Döngüsü
Do-While Döngüsü
Döngüler
For Döngüsü
Kalıtım
Nesne Oluşturma
Çok Biçimlilik
89
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: CSharp
GİRİŞ
C# (C Sharp), Microsoft tarafından geliştirilen bir programlama dilidir. Nesne
yönelimli bir programlama dili olan C#, .NET'ten tam olarak yararlanır. C#, C ve
C++'dan türetilmiş basit, modern nesne yönelimli ve güvenli bir programlama
dilidir. C#, Visual Basic'in yüksek üretkenliği ile C++'ın ham gücünü birleştirmeyi
amaçlar.
Visual C#.NET, görsel Visual C# .NET, Microsoft'un C# geliştirme aracıdır. Etkileşimli bir geliştirme
tasarım yardımcıları, ortamı, pencereler ve Web uygulamaları oluşturmak için görsel tasarım
derleyici ve hata yardımcıları, derleyici ve hata ayıklayıcı içerir. Visual C# .NET, Visual Basic .NET,
ayıklayıcı içerir. Visual C++ .NET ve Jscript komut dosyası dilini de içeren Visual Studio .NET
ürününün bir parçasıdır. Bu dillerin tümü, ortak bir yürütme motoru ve geniş bir
sınıf kitaplığı içeren Microsoft .NET Framework'e erişim sağlar. C#'ın modern
tasarımı, en yaygın C++ programlama hatalarını ortadan kaldırır. C#, aşağıdakileri
sağlayarak geleneksel C/C++ programcısını güçlendirir:
90
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: CSharp
DEĞİŞKENLER
C#’ta değişken, belirli bir veri türüne ait veri değerini içeren yapılardır. Her
değişkenin boyutunu, değişkende saklanabilecek değer aralığını ve değişkene
uygulanabilecek işlemler kümesini belirleyen bir türü vardır. C#'taki temel
değişken türleri int, double, char, string ve bool’dur.
int, tamsayı değerleri depolamak için kullanılan bir değişken ifadesidir (123,
-123 gibi). double, ondalıklı sayıları depolamak için kullanılan bir değişken
C#’ta değişken, belirli
bir veri türüne ait veri ifadesidir (1.23, -1.23 gibi). char, 'a' veya 'B' gibi tekil karakterlerin depolanmasını
değerini içeren sağlar. Karakter değerlerinin tek tırnak içinde yazılması gereklidir. String,
yapılardır. "Merhaba Dünya" gibi metinlerin depolanmasını sağlar. string ifadeler çift tırnak
içinde yazılır. bool değerlerin true veya false olmak üzere iki farklı durumda
depolanmasını sağlar.
Örnek
•int sayi=1500;
•double ondalikli_sayi= 5.43;
•string kelime="Merhaba C#";
•char karakter ='a';
91
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: CSharp
Sabitler
Sabitler, mevcut değerlerinin üzerine yazmak istemediğimiz değişkenleri
ifade etmek için kullanılır. Sabitleri tanımlamak için const anahtar sözcüğü
kullanılır. const anahtar sözcüğü, bir değişkenin her zaman aynı değeri saklaması
istenildiğinde kullanışlıdır. Örneğin, sabit olarak adlandırılan pi sayısını depolamak
Sabitler, mevcut için “const double pi=3,14;” ifadesi kullanılabilir.
değerlerinin üzerine
yazmak istemediğimiz OPERATÖRLER
değişkenleri ifade
Operatörler, derleyiciye belirli matematiksel veya mantıksal işlemleri
etmek için kullanılır.
gerçekleştirmesini söyleyen sembollerdir. C#’ta aritmetik operatörler, ilişkisel
operatörler, mantıksal operatörler, bitsel operatörler, atama operatörleri gibi
operatörler bulunmaktadır.
Aritmetik Operatörler
Aritmetik operatörler Tablo 5.1’de görüldüğü gibi toplama, çıkarma,
çarpma ve bölme gibi temel aritmetik hesaplamalar için kullanılır.
Tablo 5.1. Matematik ve Atama Operatörleri
İlişkisel Operatörler
İlişkisel operatörler, iki işlenen değerinin eşit olup olmadığını belirlemek gibi
iki değişken arasındaki ilişkiyi kontrol etmek için kullanılmaktadır. İlişkisel
operatörler, yalnızca değişkenler arasındaki ilişki doğru olduğunda true değerini
döndürür. Aksi takdirde false döndürür. Örneğin, a = 10, b = 20 tamsayı
değişkenleri için (a >= b) ilişkisel operatörü uygulanırsa, a değişkeni b
değişkeninden daha küçük bir değer içerdiği için false sonucu döndürür. Tablo
5.2’de ilişkisel operatörler görülmektedir.
Tablo 5.2. İlişkisel Operatörler
Mantıksal Operatörler
Mantıksal operatörler, AND, OR ve NOT gibi iki değişken arasında mantıksal
işlem gerçekleştirmek için kullanılır. Mantıksal operatörler her zaman Boole
ifadeleriyle (true veya false) çalışır ve Boolean değer döndürür. Mantıksal
ifadelerde işlenenler yalnızca Boolean değerleri içermelidir. Aksi takdirde
mantıksal operatörler hata verecektir. Tablo 5.3’te mantıksal operatörler
görülmektedir.
Tablo 5.3. Mantıksal Operatörler
Bitsel Operatörler
Bitsel operatörler, bitler üzerinde çalışır ve bit bit işlem gerçekleştirir.
Boolean ve tamsayı veriler üzerinde bit düzeyinde işlemler gerçekleştirilebilir. &,
|, ^ ve ~ operatörleri için doğruluk tablosu Tablo 5.4’te görülmektedir.
Tablo 5.4. Bitsel Operatörler
Atama Operatörleri
Atama operatörleri, bir değişkene yeni bir değer atamak için kullanılır ve bu
operatörler yalnızca bir değişkenle çalışır. Tablo 5.5’te atama operatörleri
görülmektedir.
Tablo 5.5. Atama Operatörleri
•x = 7 + 3 * 2;
•İşleminin sonucunda x'e 13 değeri atanır. * operatörü +'dan daha
yüksek önceliğe sahiptir. Bu nedenle ilk değerlendirme 3*2 için
yapılır ve ardından elde edilen sonuca 7 eklenir.
94
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: CSharp
DİZİLER
Diziler, aynı türdeki öğeleri sabit boyutlu ve sıralı bir şekilde depolayan
veri yapılarıdır. Dizide bulunan öğelerin veri türleri char, int, double gibi herhangi
bir geçerli veri türü olabilir. Dizinin uzunluğu, dizide bulunan öğelerin sayısını ifade
eder. C#'da diziler için bellek tahsisi dinamik olarak yapılır. Diziler bir tür nesnedir.
Bu nedenle önceden tanımlanmış işlevleri kullanarak boyutlarını bulmak kolaydır.
Dizideki değişkenler sıralanmıştır ve her birinin 0'dan başlayan bir indeksi vardır.
C#’ta diziler hakkında bilinmesi gereken önemli noktalar şunlardır:
Diziler, aynı türdeki
öğeleri sabit boyutlu ve C#'da tüm diziler için bellek tahsis dinamik olarak yapılır.
sıralı bir şekilde Diziler C#'ta nesne olarak ifade edildiği için uzunlukları öğe sayıları
depolayan veri
kullanarak belirlenebilir.
yapılarıdır.
Bir dizi değişkeni, veri türünden sonra [] operatörü kullanılarak değişken
tanımlamasında olduğu gibi tanımlanabilir.
Dizideki değişkenlerin 0'dan başlayan bir indeksi vardır.
Diziler, System.Array türünde bir nesnedir.
Sayısal dizilerin varsayılan değerleri sırasıyla sıfır olacak şekilde
ayarlanmıştır.
Dizi öğeleri, herhangi bir türde olabilir.
Dizi türleri, Array soyut temel türünden türetilen referans türleridir. Bu
türler IEnumerable'ı uygular ve bunun için C# içindeki tüm dizilerde
foreach döngüsü kullanır.
Şekil 5.1’de, dizide elemanların indekslerine göre depolanması
görülmektedir.
Dizilerin Başlatılması
C#'da bir dizi bildirmek için “veri_türü [] dizi_adı;” sözdizimi kullanılır. Veri
türü, dizideki öğelerin türünü belirtmek için kullanılır. dizi_adı dizinin adını belirtir.
Köşeli parantez ( [ ] ) operatörü ise bir dizi tanımlaması yapıldığını belirtir.
Dizilerin Tanımlanması
Bir dizinin tanımlanması, dizinin bellekte başlatılmasını sağlamaz. Dizi
değişkeni başlatıldığında, diziye değer atanabilir. Dizi bir referans türüdür. Bu
nedenle dizinin bir örneğini oluşturmak için new anahtar sözcüğünün kullanılması
95
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: CSharp
gerekir. Örneğin, double[] dizi = new double [10];. Bu örnekte new ifadesi,
belirlenen boyuta göre diziye bellekte yer ayıracaktır.
Örnek
•double[] dizi = new double[10];
•dizi[0] = 1500.0;
•int [] dizi_2 = new int[5] { 15, 34, 23, 47, 6};
Örnek 5.2’de sunulan örnekte, ilk for döngüsü kullanılarak diziye 10 adet
eleman atanmıştır. Döngünün 10 defa çalışması için for döngüsündeki i değeri,
0’dan başlatılmış ve i değeri 9 oluncaya kadar döngünün devam etmesi
sağlanmıştır. Bu sayede dizideki tüm elemanlara i değerinin 100 fazlası atanmıştır.
96
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: CSharp
İkinci for döngüsünde ise dizideki elemanların indeks numaralarına göre sıralı bir
şekilde ekrana yazdırılması sağlanmıştır.
97
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: CSharp
Örnek 5. 4’te görüldüğü gibi, 4 satır ve 2 sütundan oluşan çok boyutlu bir
dizi tanımlanmıştır. Dizinin elemanlarını yazdırmak için iç içe for döngüsü
kullanılmıştır. İlk for döngüsü 4 defa çalışacak ve diziye 4 tane satır oluşturacaktır.
İkinci for döngüsü ise her bir satır için 2 defa çalışacak ve satırlardaki elemanları
yazdıracaktır.
KONTROL YAPILARI
Bilgisayar programı, bir programlama dili kullanılarak yazılan, bilgisayarın
yürütebileceği veya yorumlayabileceği talimatlar dizisidir. Koşullu ifadeler ise
belirli koşulların karşılanması durumunda, bilgisayara vereceği kararları söyleyen
programlama yapılarıdır. Belirtilen koşulların doğru veya yanlış olması durumunda
bu kararlar verilmektedir. Söz dizimi yapısı, programlama diline göre farklılık
gösterse de tüm programlama dillerinde koşullu ifade sözdizimi vardır.
C#’ta, akış kontrolü için
Koşullu ifadeler programlama ve yazılım mühendisliği alanında hayati
if-else ve switch-case
yapıları kullanılır. öneme sahiptir. C#’ta if, else if ve else koşullu ifadelerinin yanı sıra switch case gibi
deyimlerde bulunmaktadır. Kod akışı, bir if ifadesi kullanılarak kontrol edilir. Bu
ifadeler değişkenleri değerlendirir ve doğru veya yanlış döndürür. Sonuca bağlı
olarak, kod akışı kontrol if ifadesinin parantezlerinin içine girer veya dışından
devam eder.
98
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: CSharp
if Koşul İfadeleri
if koşul ifadesi, söz dizimi olarak açık ve kapalı parantezler içine
karşılaştırılması veya kontrol edilmesi amaçlanan koşul ya da koşulların yazıldığı
bir yapıya sahiptir. if koşul ifadesi, parantez içindeki koşulun (veya koşulların)
doğru mu yanlış mı olduğunu karşılaştırır. Doğru ise, if kod bloğu yürütülür.
Yanlışsa, yürütme kontrol edilerek bir sonraki bloğa geçer. if, boolean koşulun
İf koşul ifadesi bir şartın değerine dayalı olarak yürütülecek bir ifade seçer. Örnek 5.5’te, giriş karakterinin
gerçekleşme durumunu küçük harf, büyük harf veya sayı olup olmadığını kontrol eden bir if yapısı
kontrol etmek için görülmektedir.
kullanılır.
public class if_kosul_ifadesi
{
static void Main (String()args)
{
Console.Write("Bir karekter giriniz: ");
char c = (char)Console.Read();
if (Char.IsUpper(c))
Console.WriteLine("Karakter büyük harftir.");
else if (Char.IsLower(c))
Console.WriteLine("Karakter küçük harftir.");
else if (Char.IsDigit(c))
Console.WriteLine("Karakter bir rakamdır."); }
else
Console.WriteLine("Karakter, harf ya da sayı değildir.");
}
}
99
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: CSharp
int sayi = 0;
if (sayi > 2 || sayi < 1)
{
Console.WriteLine("Sayınız 2’den büyük veya 1’den küçüktür. ");
if (sayi == 0)
Console.WriteLine("Sayınız 0’a eşittir. ");
}
else
Console.WriteLine("Lütfen bir sayı giriniz.");
switch İfadesi
switch, koşullu ifadenin başka bir deyimidir. Kodları geleneksel if, else if ve
else koşullu ifadelerinden daha anlaşılabilir ve okunabilir hale getirir. switch
Belirli şartlar için eylem ifadelerinde, her blok bir break anahtar sözcüğü ile sonlandırılır. switch içindeki
tanımlama işlemlerinde koşullar case ile ifade edilir.
Switch yapısından
faydalanılabilir. Bir switch deyimi, switch ifadesinin sonunda, isteğe bağlı bir varsayılan
duruma sahip olabilir. Varsayılan durum, durumların hiçbiri doğru olmadığında bir
görevi gerçekleştirmek için kullanılabilir. Varsayılan durumda break anahtar
sözcüğünün kullanılması gerekmez. Break deyimine ulaşıldığında, switch sona erer
ve kontrol akışı switch deyimini izleyen bir sonraki satıra atlar. Her case ifadesinin
break anahtar kelimesi içermesi gerekmez. Herhangi bir break ile karşılaşılmazsa,
kontrol akışı break ile karşılaşana kadar diğer case ifadelerini işlemeye devam
eder.
100
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: CSharp
DÖNGÜLER
Döngüler, belirli bir koşula bağlı olarak, bir komut veya komut dizisinin
istenilen sayıda yürütülmesini sağlar. Döngüler içinde ifadeleri yürütmek için koşul
ifadesinin sonucunun doğru olması gereklidir.
Döngüler, giriş kontrollü dönüler ve çıkış kontrollü döngüler olmak üzere
temel olarak iki kategoriye ayrılır. Giriş kontrollü döngüler, döngü gövdesinin
başlangıcında test edilecek koşulun bulunduğu döngülerdir. while döngüsü ve for
döngüsü giriş kontrollü döngülerdir. Çıkış kontrollü döngüler, döngü gövdesinin
sonunda test koşulunun bulunduğu döngülerdir. Çıkış kontrollü döngülerde,
döngü gövdesinin sonunda test koşulu mevcut olduğundan, döngü gövdesi en az
bir kez değerlendirilecektir. do-while döngüsü çıkış kontrollü döngülere örnektir.
101
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: CSharp
int i = 0;
while (true)
{
Console.WriteLine("i = {0}", i);
i++;
if (i > 10)
break;
}
}
}
102
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: CSharp
do-while Döngüsü
do deyimi, belirtilen bir ifade false olarak değerlendirilene kadar bir deyimi
veya bir deyim bloğunu tekrar tekrar yürütür. Aşağıdaki örnekte do-while
döngüsü, y değişkeni 5'ten küçük olduğu sürece çalışır. Do-while yapısı bir süreç
sembolü ve bir koşuldan oluşur. İlk olarak, blok içindeki kod çalıştırılır ve ardından
koşul değerlendirilir. Koşul doğruysa, blok içindeki kod yeniden yürütülür. Bu
işlem, koşul yanlış olana kadar tekrarlanır. Örnek 5.10’da, x’in değeri 5’ten küçük
olduğu sürece do döngüsü içinde x’in değeri 1 arttırılacaktır.
do-while döngüsü,
koşul yanlış olsa bile public class do-while_Dongusu
başlangıçta her zaman {
en az bir yineleme public static void Main ()
gerçekleştirmesi {
dışında, while int x = 0;
döngüsüyle aynı şekilde
do
çalışır.
{
Console.WriteLine(x);
x++;
}
while (x < 5);
}
}
for Döngüsü
for döngüsü, kodun tekrar tekrar yürütülmesini sağlayan, yinelemeyi
belirtmek için kullanılan bir kontrol akışı ifadesidir. for döngüsü, belirtilen bir ifade
yanlış olarak değerlendirilinceye kadar bir ifadeyi veya bir ifade bloğunu tekrar
tekrar yürütür. for döngüsü, diziler üzerinde yineleme yapmak ve sıralı işleme için
kullanışlıdır. for döngüsündeki kontrol akışı aşağıdaki gibi ifade edilebilir:
Başlatma adımı ilk önce ve yalnızca bir kez yürütülür. Bu adım, herhangi
for döngüsü, belirtilen bir döngü kontrol değişkeninin bildirilmesine ve başlatılmasına izin verir.
koşul false dönene Daha sonra koşul değerlendirilir. Doğruysa, döngünün gövdesi yürütülür.
kadar yürütülür. Yanlış ise, döngünün gövdesi çalışmaz ve kontrol akışı, for döngüsünden
hemen sonraki bir sonraki ifadeye atlar.
for döngüsünün gövdesi yürütüldükten sonra, kontrol akışı artış ifadesine
geri döner. Bu ifade, herhangi bir döngü kontrol değişkeninin
güncellenmesine izin verir. Bu ifade, koşuldan sonra bir noktalı virgül
göründüğü sürece boş bırakılabilir.
103
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: CSharp
Koleksiyon bir dizi veya liste olabilir. Dizide bulunan her eleman için
yürütülür. foreach ifadesi, bir dizideki veya bir nesne koleksiyonundaki her öğe
için bir grup gömülü ifadeyi tekrarlar.
foreach döngüsünün deyimlerinin parantezler içine alınması gerekir. Bir
döngü sayacı değişkeni tanımlamak ve başlatmak yerine, dizinin türüyle aynı türde
bir değişken bildirimi yapılır. Ardından in ifadesi gelir ve ardından dizi adı gelir.
Döngü gövdesinde, bir dizi öğesi kullanmak yerine oluşturulan döngü değişkeni
kullanılabilir. Örnek 5.12’de, deneme adı verilen dizi içindeki elemanların ekrana
yazdırılması amaçlanmıştır. foreach döngüsü, deneme dizisindeki her bir eleman
için ekrana yazdırma işlemi yapacaktır. Bu döngü dizinin eleman sayısı kadar tekrar
edecektir. for döngüsü ve foreach döngüsü arasındaki farklar aşağıdaki gibi
sıralanabilir:
104
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: CSharp
for döngüsü, verilen koşul yanlış olana kadar bir deyimi veya bir deyim
bloğunu yürütür. foreach döngüsü, dizide bulunan her eleman için bir
ifade veya bir ifade bloğu yürütür ve minimum veya maksimum limiti
tanımlamaya gerek yoktur.
for döngüsünde, dizi hem ileri hem de geri yönde yinelenir. Örneğin 0'dan
9'a ve 9'dan 0'a kadar. Ancak foreach döngüsünde, bir dizi geriye doğru
Sonsuz döngülerde,
değil, yalnızca ileri yönde yinelenir.
döngünün bir çıkış
koşulu olsa bile, hangi Değişken bildirimi açısından, foreach döngüsünün beş değişken bildirimi
nedenle olursa olsun bu varken for döngüsünün yalnızca üç değişken bildirimi vardır.
koşula ulaşılmaz. Bu foreach döngüsü diziyi kopyalar ve bu kopyayı işlem için yeni diziye koyar.
sebeple döngü aynı Sonsuz döngü, hiçbir zaman sona ermeyen veya bitmeyen ve süresiz olarak
kodu tekrar tekrar yinelenen bir döngüdür. Döngü koşulların hiçbir zaman yanlış olmadığı, döngünün
yürütür.
sonsuza kadar devam ettiği yapılardır. Diğer bir deyişle sonsuz döngü, test
koşulunun yanlış olarak değerlendirilmediği ve onu sonlandırmak için harici bir
kuvvet kullanılana kadar döngünün sonsuza kadar devam ettiği bir yapıdır. Sonsuz
döngüler, kod akışını olumsuz etkileyebilecek, kaçınılması gereken yapılardır.
METOTLAR
Metotlar (fonksiyonlar), belirli eylemleri gerçekleştirmek için kullanılır.
Metotlar, yalnızca çağrıldığında çalışan kod bloklarıdır. Bu sayede karmaşık bir
sorunu daha küçük parçalara bölerek, programın kolay anlaşılır ve yeniden
kullanılabilir bir hale getirilmesi sağlanır. Metotlar Örnek 5.13’te görüldüğü gibi
geri dönüş tipi, metot adı ve metot gövdesi alanlarına sahiptir.
using System;
namespace Method {
class Program {
// Metot tanımlanması
public int En_Buyuk_Eleman(int sayi1, int sayi2)
{
int result;
if (sayi1 > sayi2)
sonuc = sayi1;
else
sonuc = sayi2;
return sonuc;
}
static void Main(string[] args) {
int a = 10;
int b = 20;
int en_buyuk;
en_buyuk = En_Buyuk_Eleman (a, b);
Console.WriteLine("En büyük eleman : {0}", en_buyuk);
}
}
105
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: CSharp
Geri dönüş tipi, bir yöntemin ne tür bir değer döndürdüğünü belirtir.
Örneğin, bir metodun integer geri dönüş türüne sahip olması o metodun integer
değer döndüreceğini ifade eder. Yöntem bir değer döndürmezse, dönüş türü
geçersizdir. Metot adı, bir programdaki belirli bir metodu çağırmak için kullanılan
bir tanımlayıcıdır. Metodun gövdesi, bazı görevleri gerçekleştirmek için kullanılan
programlama ifadelerini içerir. Metot gövdesi, küme parantezleri { } içine alınır.
Örnek 5.13’te en büyük elemanın bulunmasıyla ilgili bir metot örneği
görülmektedir. En büyük elemanı bulma metodu, Main metot içinden
çağrılmaktadır. Metot, sayi1 ve sayi2 olmak üzere iki parametre almaktadır. Main
Kurucu, nesne metodunda a=10 ve b=20 şeklinde iki sayı metoda parametre olarak
oluşturma sırasında gönderilmiştir.
otomatik olarak
çağrılan özel bir NESNEYE YÖNELİK PROGRAMLAMA
yöntemdir. Genel
olarak yeni nesnenin Nesne Yönelimli Programlama (Object Oriented Programming-OOP),
veri üyelerini başlatmak kavramları nesneler olarak temsil eden, veri alanları ve ilişkili metotlara sahip bir
için kullanılır. programlama mantığıdır. Genellikle sınıf örnekleri olan nesneler, birbirleriyle
etkileşim kurmak için kullanılır. C#'taki tüm kod ve veriler bir sınıfa dâhil
edilmelidir. Bir sınıfın dışında bir değişken tanımlanamaz ve bir sınıfta olmayan
herhangi bir kod yazılamaz.
class Aile
{
string adi;
string soyadi;
public Aile (string adi, string soyadi)
{
this.adi = adi;
this.soyadi = soyadi;
}
}
Örnek 5.14. Sınıf örneği
106
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: CSharp
Örnek
•Araç, motorlu veya motorsuz her türlü hava, kara ve deniz taşıtını
ifade etmek için kullanılan bir kavramdır. Bu araçların da
hızlanma, durma, direksiyon gibi ortak davranışları ve ortak
özellikleri vardır. Bu özelliklere sahip bütün nesneler için araç bir
sınıf olarak düşünülebilir. Otomobil, uçak ve gemi araç sınıfından
türetilmiş alt sınıflardır.
Kalıtım
C#'ta kalıtım, bir nesnenin üst nesnesinin tüm özelliklerini ve davranışlarını
otomatik olarak elde ettiği bir süreçtir. Bu şekilde, başka bir sınıfta tanımlanan
öznitelikler ve davranışlar yeniden kullanabilir, genişletilebilir veya değiştirilebilir.
Kalıtım, nesneye yönelik programlamanın önemli bir bileşenidir. Bir sınıfın
başka bir sınıfın özelliklerini (alanlarını ve yöntemlerini) devralmasına izin veren
mekanizmadır. Kalıtımın temel kavramları süper sınıf, alt sınıf ve yeniden
kullanılabilirliktir.
Süper sınıf: Özellikleri miras alınan sınıf, süper sınıf (temel sınıf veya üst
sınıf) olarak bilinir.
Alt sınıf: Diğer sınıfı miras alan sınıf, alt sınıf (türetilmiş sınıf veya
genişletilmiş sınıf) olarak bilinir. Alt sınıf, üst sınıf alanlarına ve
Kalıtım, nesne yönelimli yöntemlerine ek olarak kendi alanlarını ve yöntemlerini ekleyebilir.
programlamanın temel
Yeniden kullanılabilirlik: Kalıtım, yeniden kullanılabilirlik kavramını
kavramlarından biridir
ve özellikleri bir sınıftan destekler. Yeni bir sınıf oluşturmak istendiğinde ve istenilen kodun bir
(temel) başka bir (alt)
sınıfa miras almak için
kullanılır.
107
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: CSharp
kısmını içeren bir sınıf zaten varsa, yeni sınıf mevcut sınıftan türetilebilir.
Bunu yaparak, mevcut sınıfın alanları ve yöntemleri yeniden kullanılabilir.
Bir sınıftan miras almak için “:” sembolü kullanılmaktadır. Örnek 5.15’te
görülen örnekte, Dikdortgen sınıfı (alt) Sekil sınıfından (üst öğe) alanları ve
metotları devralmaktadır.
108
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.NET: CSharp
Örnek
çeşitli sınıf yapıları örnek olarak verilebilir. Kredi üst sınıfından
türetilmiş ihtiyaç kredisi, konut kredisi ya da taşıt kredisi gibi
seçenekler alt sınıftır.
Nesne Oluşturma
Sınıf, bir nesne için şablon tanımlar. Bir sınıf, kendisine ait olan nesnelerin
içeriğini (değişkenler, metotlar) tanımlar. Nesneler, sınıfların örnekleridir. Nesneler
kendi sınıflarının davranışlarına sahiptir. Nesne, programların gerçek bileşenidir.
Sınıf ise örneklerin nasıl oluşturulduğunu ve nasıl davrandıklarını belirtir.
Örnek 5.16’da, Otomobil isimli bir sınıf oluşturulmuştur. Bu sınıf nesneler
oluşturmak için kullanılabilir.
class Otomobil
{
string renk = "mavi";
static void Main(string[] args)
{
Otomobil oto = new Otomobil();
Console.WriteLine(oto.renk);
}
}
109
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.NET: CSharp
Kapsülleme
Kapsülleme, verilerin tek bir birim altında toplanması olarak tanımlanır.
Kodu ve manipüle ettiği verileri birbirine bağlayan bir mekanizmadır. Kapsülleme,
verilere bu kalkanın dışındaki kodun erişmesini engelleyen koruyucu bir kalkandır.
Kapsüllemede, bir sınıfın değişkenleri veya verileri diğer herhangi bir sınıftan
gizlenir ve yalnızca bildirildikleri kendi sınıfının herhangi bir üye işlevi aracılığıyla
erişilebilir. Kapsüllemede, bir sınıftaki veriler diğer sınıflardan gizlenir, bu nedenle
veri gizleme olarak da bilinir.
Çok Biçimlilik
Çok biçimlilik (polimorfizm), bir sınıfa aynı ada sahip birden çok
uygulamaya sahip olma yeteneği sağlar. C#'da statik (çalışma zamanı çok
biçimliliği) ve dinamik (çalışma zamanı çok biçimliliği) olmak üzere iki tür çok
biçimlilik vardır. Statik ok biçimliliğe, metot aşırı yüklemesi örnek olarak verilebilir.
Aşırı yüklemede, metot/fonksiyon aynı ada ancak farklı imzalara sahiptir. Hangi
metodun çağrılacağına derleme zamanında karar verildiği için derleme zamanı
polimorfizmi olarak da bilinir. Dinamik ok biçimlilikte, yöntem adı ve yöntem
imzası (parametre sayısı ve parametre türü) aynı olmalıdır. Derleyici, işlevselliği
geçersiz kılmak için kullanılabilen yöntemin farkında olmaz, bu nedenle derleyici
derleme zamanında bir hata vermez. Derleyici, çalışma zamanında hangi yöntemin
çağrılacağına karar verir ve herhangi bir yöntem bulunamazsa bir hata atar.
110
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET: CSharp
• GİRİŞ
• C#, C ve C++'dan türetilmiş basit, modern nesne yönelimli ve güvenli bir
programlama dilidir.
• Visual C# .NET, Microsoft'un C# geliştirme aracıdır. Etkileşimli bir geliştirme
ortamı, pencereler ve Web uygulamaları oluşturmak için görsel tasarım
yardımcıları, derleyici ve hata ayıklayıcı içerir.
Özet
•DEĞİŞKENLER
•C#’ta değişken, belirli bir veri türüne ait veri değerini içeren yapılardır. Her
değişkenin boyutunu, değişkende saklanabilecek değer aralığını ve değişkene
uygulanabilecek işlemler kümesini belirleyen bir türü vardır. C#'taki temel
değişken türleri int, double, char, string ve bool’dur.
•OPERATÖRLER
•Operatörler, derleyiciye belirli matematiksel veya mantıksal işlemleri
gerçekleştirmesini söyleyen sembollerdir. C#’ta aritmetik operatörler,
ilişkisel operatörler, mantıksal operatörler, bitsel operatörler, atama
operatörleri gibi operatörler bulunmaktadır.
•DİZİLER
•Diziler, aynı türdeki öğeleri sabit boyutlu ve sıralı bir şekilde depolayan veri
yapılarıdır.
•Dizide bulunan öğelerin veri türleri char, int, double gibi herhangi bir geçerli
veri türü olabilir.
•Dizinin uzunluğu, dizide bulunan öğelerin sayısını ifade eder.
•Dizideki değişkenler sıralanmıştır ve her birinin 0'dan başlayan bir indeksi
vardır.
•Çok boyutlu diziler, dizi elemanlarını depolamak için birden fazla satır
içermektedir. Her satır uzunluğu aynı sayıda eleman içerdiği için C# dilinde
dikdörtgen dizi olarak da bilinir. Çok boyutlu diziler, 2 veya daha fazla
boyutta olabilir.
•KONTROL YAPILARI
•Koşullu ifadeler, belirli koşulların karşılanması şartıyla bilgisayara belirli
eylemleri gerçekleştirmesini söyleyen programlama dillerinin özellikleridir.
•Koşullu ifadeler, bilgisayara bazı koşullar verildiğinde vereceği karar
konusunda talimat vermek için çeşitli programlama dilleri aracılığıyla
kullanılır.
•if Koşul İfadeleri
•if koşul ifadesi, söz dizimi olarak açık ve kapalı parantezler içine
karşılaştırılması veya kontrol edilmesi amaçlanan şartların yazıldığı bir yapıya
sahiptir.
•switch İfadesi
•switch ifadelerinde, her blok bir break anahtar sözcüğü ile sonlandırılır.
switch içindeki ifadeler case ile ifade edilir.
•switch ifadesi, kontrolü gövdesindeki case ifadelerinden birine ileterek
birden çok seçimi ve numaralandırmayı işleyen bir kontrol ifadesidir.
•DÖNGÜLER
•while Döngüsü
•while döngüsü, belirtilen koşul false döndürene kadar bir kod bloğunu art
arda yürütmek için kullanılır.
•while döngüsü, while anahtar kelimesiyle başlar ve parantez içinde true veya
false döndüren bir boole koşullu ifade içerir.
•Belirtilen koşullu ifade false döndürene kadar kod bloğunu yürütür.
•do-while Döngüsü
111
Atatürk Üniversitesi Açıköğretim Fakültesi 24
ASP.NET: CSharp
•do deyimi, belirtilen bir ifade false olarak değerlendirilene kadar tekrar
tekrar parantezler içine alınmış bir deyimi veya bir deyim bloğunu yürütür.
•do while yapısı bir süreç sembolü ve bir koşuldan oluşur.
Özet (devamı) •İlk olarak, blok içindeki kod çalıştırılır ve ardından koşul değerlendirilir.
•Koşul doğruysa, blok içindeki kod yeniden yürütülür.
•Bu işlem, koşul yanlış olana kadar tekrarlanır.
•for Döngüsü
•for döngüsü, belirtilen bir ifade yanlış olarak değerlendirilinceye kadar bir
ifadeyi veya bir ifade bloğunu tekrar tekrar yürütür.
•for döngüsü, diziler üzerinde yineleme yapmak ve sıralı işleme için
kullanışlıdır.
•foreach Döngüsü
•foreach döngüsü, bir dizi veya listenin öğeleri üzerinde yineleme yapmak için
kullanılır. Dizide bulunan her eleman için yürütülür.
•METOTLAR
•Metotlar (fonksiyonlar), belirli eylemleri gerçekleştirmek için kullanılır.
•Metotlar, yalnızca çağrıldığında çalışan kod bloklarıdır.
•Metotlar geri dönüş tipi, metot adı ve metot gövdesi alanlarına sahiptir.
•Nesneye Yönelik Programlama
•Nesne yönelimli programlama, kavramları nesneler olarak temsil eden, veri
alanları ve ilişkili metotlara sahip bir programlama mantığıdır.
•Sınıflar, sınıfın bir nesnesi oluşturulduğunda yürütülen kuruculara
(constructors) ve sınıfın bir nesnesi yok edildiğinde yürütülen bir yıkıcıya
(destructor) sahiptir.
•Kalıtım
•C#'ta kalıtım, bir nesnenin üst nesnesinin tüm özelliklerini ve davranışlarını
otomatik olarak elde ettiği bir süreçtir.
•Bu şekilde, başka bir sınıfta tanımlanan öznitelikler ve davranışlar yeniden
kullanabilir, genişletilebilir veya değiştirilebilir.
•Soyut Sınıflar ve Metotlar
•Veri soyutlama, belirli ayrıntıları gizleme ve kullanıcıya yalnızca temel
bilgileri gösterme işlemidir.
•Kapsülleme
•Kapsülleme, verilerin tek bir birim altında toplanması olarak tanımlanır.
Kodu ve manipüle ettiği verileri birbirine bağlayan bir mekanizmadır.
•Polymorphism
•Polimorfizm (çok biçimlilik), bir sınıfa aynı ada sahip birden çok uygulamaya
sahip olma yeteneği sağlar.
112
Atatürk Üniversitesi Açıköğretim Fakültesi 25
ASP.NET: CSharp
DEĞERLENDİRME SORULARI
1. Döngüdeki komutların koşul sağlanmasa da en az bir defa çalıştırılmasının
istendiği durumlarda aşağıdaki döngülerden hangisi kullanılır?
a) Do-While
b) For
c) Switch-Case
d) Foreach
e) If
2. Kalıtım vasıtasıyla türetilen bir sınıfta, temel sınıfta var olan bir metodu
yeniden tanımlamak için aşağıdaki kelimelerden hangisi kullanılmalıdır?
a) abstract
b) main
c) class
d) new
e) public
113
Atatürk Üniversitesi Açıköğretim Fakültesi 26
ASP.NET: CSharp
int not=80;
if (not>70)
{ Console.WriteLine("Başarılı-"); }
else {
Console.WriteLine("Başarısız"); }
114
Atatürk Üniversitesi Açıköğretim Fakültesi 27
ASP.NET: CSharp
Cevap Anahtarı
1.a, 2d., 3.e, 4.c, 5.b, 6.b, 7.a, 8.c, 9.c, 10.d
115
Atatürk Üniversitesi Açıköğretim Fakültesi 28
ASP.NET: CSharp
YARARLANILAN KAYNAKLAR
Dallanma ifadeleri ve döngüler. 11 Ocak 2022 tarihinde
http://programming-incsharp.blogspot.com/2014/04/branching-and-looping.html
adresinden erişildi.
C#’ta Döngüler. 13 Ocak 2022 tarihinde
https://www.geeksforgeeks.org/loops-in-c-sharp/ adresinden erişildi.
C#’ta Döngüler. 15 Ocak 2022 tarihinde
https://www.tutorialspoint.com/csharp/csharp_loops.htm adresinden erişildi.
C#’ta Kalıtım. 17 Ocak 2022 tarihinde
https://www.geeksforgeeks.org/c-sharp-inheritance/ adresinden erişildi.
Nakov, S. & Kolev, V. (2013). Fundamentals of Computer Programming with C#:
The Bulgarian C# Book. Faber Publishing.
Posadas, M. (2016). Mastering C# and. NET Framework. Packt Publishing Ltd.
Price, M. J. (2020). C# 9 and. NET 5–Modern Cross-Platform Development-: Build
intelligent apps, websites, and services with Blazor, ASP. NET Core, and
Entity Framework Core using Visual Studio Code. Packt Publishing Ltd.
Ravalcaba, Z. (2004). Build your own ASP. Net Website Using C# and VB. NET.
Taher, R. (2019). Hands-On Object-Oriented Programming with C#: Build
maintainable software with reusable code using C. Packt Publishing Ltd.
116
Atatürk Üniversitesi Açıköğretim Fakültesi 29
ASP.NET: MVC
• ASP.Net Formlar
• IIS
İÇİNDEKİLER
• IIS öğrenebilecek,
• ASP.Net Formlar ve MVC
arasındaki farkları bilecek,
• ASP.Net MVC çatısını
kavrayabilecek,
• ASP.Net MVC ile web uygulaması
geliştirebileceksiniz.
ÜNİTE
6
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.Net:MVC
ASP.NET MVC
ASP.NET
Layout Partial
View View
Veri Taşıma
118
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.Net:MVC
GİRİŞ
ASP, 1996 yılında yayınlanmış ve 2002 yılına kadar kullanımına devam
ASP.Net, Microsoft edilmiştir. 2002 yılında ise yerini ASP.Net’e bırakmıştır (Active Server Pages, 2022).
firmasının geliştirmiş Bu bölümde, ASP.Net ile birlikte yeni bir web uygulamaları geliştirme
olduğu bir web
platformu olan ASP.Net web formlar tanıtılmıştır. Bu platformun bir önceki klasik
geliştirme
platformudur. ASP platformuna göre en önemli farkı code behind teknolojisi yani sunucu tarafı
kodların, arayüz geliştirmek için yazılan HTML, CSS, JavaScript kodlarından farklı
bir sayfada yazılabilmesidir. Bununla birlikte klasik ASP teknolojisinde olduğu gibi
arayüz içerisinde de sunucu taraflı kodlar yazılabilmektedir. Bu tekniğe satır içi
kodlama denilmektedir.
ASP.Net Web Formlar, Windows Forms Application ile masaüstü uygulama
geliştirebilen herkesin, web ortamında da rahat bir şekilde uygulama geliştirmesi
için tasarlanmıştır. Her iki proje tipi de textbox, label gibi kontrollerin sürükle-bırak
ile oluşturabildiği ve olay tabanlı programlamaya imkan sağlayan proje tipleridir.
Masaüstü uygulamalardan farklı olarak web uygulamalarında arayüzlerin HTML,
CSS ve JavaScript ile kodlanması gerekmektedir.
ASP.Net Web Forms ile birçok proje geliştirilmiştir ve günümüzde halen
kullanılmaya devam edilmektedir. Her ne kadar yoğun bir şekilde kullanılmış olsa
da, modern uygulama geliştirmenin gerisinde kalmaktan kurtulamamıştır. Bu
nedenle Microsoft firması, web form uygulamalarına alternatif olarak ASP.Net
çatısı altında yeni bir platform olan MVC (Model-View-Controller) yapısını
geliştirmiştir.
MVC ile geliştirilen uygulamalarda kodların ayrı parçalar halinde yazılması
ile kod yazma, hata ayıklama, test etme gibi yazılım geliştirme süreçlerinde
kolaylıklar sağlanmıştır. Bu nedenlerden dolayı günümüzde ASP.Net kullanılarak
yeni bir web uygulaması geliştirme işleminde MVC daha çok tercih edilmektedir.
Code Behind
Arayüz Kodları (Sunucu Taraflı
HTML, CSS, JS Kodlar)
C#, VB
119
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.Net:MVC
120
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.Net:MVC
Örnek 6.3. Code Behind Tekniği ile Geliştirildiğinde .aspx Sayfası İçeriği
121
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.Net:MVC
altında _default isimli bir sınıf ve bu sınıf içerisinde de daha önce yazdığımız
btnMsg_Click metodunun bulunduğu görülmektedir. Bu noktada adı geçen isim
uzayı ve sınıfı sayfa direktifinden hatırlayınız. Arayüz ve Code Behind sayfaları
bağlantısı bu direktif ile sağlanmaktadır.
Örnek 6.3.’de görülen dosyanın uzantısı .aspx iken, sunucu taraflı kodların
yazıldığı dosyanın uzantısının .aspx.cs olduğu görülmektedir. Burada belirtilen cs,
C# (C Sharp)’ın kısaltmasıdır.
Görüldüğü üzere sunucu taraflı kodların yazılabilmesi için Code Behind
tekniği kullanımı, iş mantığı ve arayüz geliştirme mantığını birbirinden ayırarak
daha temiz bir geliştirme yapılmasına olanak sağlamaktadır.
122
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.Net:MVC
WebForms MVC
Olay Tabanlı Programlama Evet Hayır
Code Behind Evet Hayır
Sunucu Kontrolleri Evet Hayır
ViewState Evet Hayır
Daha Temiz Kod Hayır Evet
Kolay Test Edilebilir Uygulama Hayır Evet
Model-View-Controller Ayrımı Hayır Evet
Kolay Hata Ayıklama Hayır Evet
MVC Routing
mekanizması ile
kullanıcının
anlayabileceği URL
yapıları oluşturmak
mümkündür. Bu yapılar
aynı zamanda arama
motoru optimizasyonu
için de oldukça
kullanışlıdır. Şekil 6.1. ASP.Net MVC Core Çalışma Mantığı (Dospinescu ve Donu, 2020)
1- Kullanıcı, web tarayıcısı aracılığı ile bir URL girişi yaparak sunucuya istekte
bulunur.
2- IIS tarafından karşılanan bu istek, MVC’nin Routing mekanizmasına iletilir.
3- Routing mekanizması, URL ve Controller’lar arasındaki eşleştirmeye
bakarak uygun Controller’ı arar. Controller bulunursa içindeki yapılan
isteğe uygun metod çağırılır.
123
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.Net:MVC
124
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.Net:MVC
namespace MvcWebApp.Controllers
{
public class OgrenciController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
125
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.Net:MVC
Portlar, veri alış Uygulamayı derleyip çalıştırılmak için F5 kısayolu kullanılabilir. Uygulama
verişinin yapıldığı çalıştırıldığında web tarayıcısı açılarak Şekil 6.3’deki ekran gelmektedir.
kapılardır.
MVC Routing
Routing işlemleri, Routing kelimesi, rotalama anlamına gelmektedir. Bu sistem ile adres
startup class’ı içerisinde satırına yazılan adreslerle yapılan isteklerin, oluşturulan rotalar aracılığı ile
yapılmaktadır controller’lara, oradan da action metod’lara iletilmesi sağlanır. Böylece erişilen
metodun geri döndürdüğü View kullanıcılara iletilmektedir. Routing mekanizması,
kullanıcılar tarafından anlaşılabilen adresleme imkanı sağlamaktadır. Bununla
birlikte arama motorları optimizasyonu için de önemli bir rol oynamaktadır.
126
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.Net:MVC
app.UseEndpoints(endpoints =>
{
Bir metod geriye View endpoints.MapControllerRoute(
name: "default",
döndürüyorsa mutlaka pattern: "{controller=Home}/{action=Index}/{id?}");
dönüşü karşılayan bir });
View eklenmelidir.
Örnek 6.6. Rotalama İşlemlerinin Yapıldığı Startup.cs Dosyası İçindeki Configure Metodu
ASP.Net MVC’de rotalama işlemleri, Örnek 6.6’da görülen proje içerisinde
bulunan Startup class’ı içerisinde yapılmaktadır.
Configure metodu içerisinde “EndPoints” kavramı ile rotalama işlemlerinin
yapıldığı görülmektedir. Rotaya eklenen endpoint adı “default”, pattern’i yani rota
deseni “{controller=Home}/{action=Index}/{id?}” olduğu görülmektedir. Bu desen,
sunucu adından sonra “/” işareti eklenerek controller adı yazılacağı, ardından yine
“/” işareti eklenerek action adı yazılacağını göstermektedir. Varsayılan
controller=Home, varsayılan action ise Index olarak belirtilmiştir.
Rota deseninin sonunda görülen “id” ifadesi ise opsiyoneldir. Bu durum,
yanında bulunan soru işaretinden anlaşılmaktadır.
Bu bilgilerden yola çıkılarak eklenen OgrenciController içindeki Index action
metoduna erişmek için adres satırına localhost:50029/Ogrenci/Index yazılması
gerektiği sonucuna varılmaktadır. Bu noktada Index, rotalama tanımlamasına göre
varsayılan action ismi olduğundan yalnızca localhost:50029/Ogrenci yazılarak da
aynı sayfaya ulaşılabilir.
Adres satırına localhost:50029/Ogrenci yazılarak istek yapıldığında Index
metodu ile ilişkili bir View bulunmadığından hata mesajı içeren ekran ile
karşılaşılmaktadır.
View Kavramı
ASP.Net MVC uygulamalarında verileri göstermek ve kullanıcılar ile
etkileşime geçmek için kullanılan yapılara View adı verilmektedir. View’ler, Razor
adı verilen işaretleme dili içeren HTML şablonlarıdır.
Bir view içerisinde C#
kodu yazmak için @ View dosyalarının uzantısı .cshtml’dir. View’ler, dosya uzantısından da
işareti kullanılır. anlaşılacağı üzere, Razor yapısında C# programlama dili ile HTML işaretleme dilinin
birleşiminden oluşmaktadır (Smith ve Brock, 2021).
Controller içerisinde bulunan ve View sonucu döndüren action metodlar için
View tanımlamaları yapılabilmektedir. Action metodun hazırladığı veriler, View
içerisinde gösterilerek kullanıcıya ulaştırılmaktadır.
Proje dosya yapısı incelendiğinde, proje içerisinde “Views” ismi verilen
klasör bulunmaktadır. Projeye ait tüm View’ler bu klasör içerisinde controller
isimleri ile sistematik olarak tutulmaktadır. Örneğin Home klasörü içerisinde
127
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.Net:MVC
128
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.Net:MVC
Örnek
•<body>
• <h1>Öğrenci Listesi</h1>
•</body>
Varsayılan layout _Layout.cshtml doyası açıldığında içeriğinde HTML kodları ile birlikte bazı C#
dosyası, Views->Shared kodları olduğu görülmektedir.
klasörü içerisinde yer
alan _Layout.cshtml’dir. Layout sayfalarında önemli detaylardan birisi de “@RenderBody()”
metodunun çağırılmasıdır. Metod ile bu Layout sayfasını kullanan View’ların
içeriklerinin sayfanın bu noktasında gösterileceği bildirilmektedir.
Uygulamaya Layout kullanan bir View eklenmek istendiğinde, aşağıdaki
adımlar takip edilir.
1- View eklenmek istenen metoda sağ tıklanarak Add View seçilir.
2- Razor View seçilir
3- Açılan pencereden “Use a layout page” seçilerek “Add” butonuna tıklanır.
Burada herhangi bir layout adı belirtilmezse varsayılan layout olan Views->Shared
klasörü içindeki _Layout.cshtml dosyası kullanılır.
129
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.Net:MVC
MODEL Kavramı
Modeller, bellekte verilerin temsil edilebilmeleri için yazılan sınıflardır. .Net
çatısı altında önceden tanımlanmış değer tipi ve referans tipi veri tipleri
Uygulama içerisinde bulunmakla birlikte, bu veri tipleri her zaman ihtiyacı karşılamamaktadır. Örneğin
kullanılan verilerin metinsel bir veri bellekte string tipi ile temsil edilebilirken, sayısal veriler byte, int,
bellekte temsil
double, float gibi önceden tanımlanmış veri tipleri ile temsil edilmektedirler.
edilebilmesi için Model
sınıfları kullanılır. Önceden tanımlanmış veri tipleri uygulama geliştirilme esnasında sıkça
kullanılsa da, yeni veri tipi tanımlama ihtiyacı da ortaya çıkmaktadır. Bu noktada
model kavramından yararlanılmaktadır.
Örneğin bellekte bir öğrenci temsil edebilmek için .Net çatısı altında
önceden tanımlanmış bir veri tipi bulunmamaktadır. Bu durumda yeni bir veri tipi
oluşturma ihtiyacı ortaya çıkmaktadır.
C# dilinde veri tipi oluşturmanın birden fazla yöntemi bulunmaktadır.
Bunlardan en sık kullanılan yöntem yeni bir class tanımlamaktır. Class’lar kullanıcı
tanımlı bir veri tipi olup aynı zamanda referans tipidir.
Model klasörüne yeni bir class eklemek için Model klasörüne sağ tıklanarak
açılan menüden, Add->Class seçeneği seçilmelidir.
Açılan pencerede class isimlendirmesi yapılmalıdır. Yeni eklenen class’a
Model eklemek için Ogrenci ismi veriniz. Class dosyalarının uzantısı .cs’dir.
Models klasörüne sağ
Class ekleme işlemi tamamlandıktan sonra, bir öğrenciyi bellekte temsil
tıklanarak, Add->Class
edebilmek için gerekli alanların tanımlaması class içerisinde yapılmalıdır. Örnek
seçeneği seçilir.
6.9’ da ad, soyad ve sınıf alanlarının tanımlaması property olarak yapılmıştır.
130
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.Net:MVC
<h1> @ViewData["SayfaBaslik"]</h1>
131
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.Net:MVC
<h1> @ViewBag.Baslik</h1>
Örnek 6.13. ViewBag ile Controllerden Taşınan Veriye View İçerisinde Erişmek
Örnek 6.13. incelendiğinde, Örnek 6.12’de oluşturulan ViewBag’in View
içerisinde nasıl erişileceği görülmektedir.
132
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.Net:MVC
<h1> @TempData[“GeciciVeri”]</h1>
133
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.Net:MVC
134
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.Net:MVC
Bireysel Etkinlik
Dikkat etmeniz gerekenler;
• Model class'ı içindeki alanların doğru belirlenmesi,
Örn. Araba class'ı için, marka,model,renk vb.
• Oluşturulacak listenin yazılan model class'ı tipinde
olması,
• ViewModel ile veri taşıma işlemi yapılması,
• Aynı taşıma işlemini ViewBag ile de deneyiniz.
135
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.Net:MVC
•Bu bölümde ASP.Net MVC konusu ele alınmıştır. ASP.Net, Microsoft firması
tarafından geliştirilen bir web uygulaması geliştirme çatısıdır. Uygulama
geliştime çatılar, bir platformda uygulama geliştirebilmek için gerekli olan
kütüphaneleri, editörleri, programlama dillerini sunan yazılımlar bütünüdür.
Bu çatılar sayesinde istenilen platformda daha hızlı uygulama geliştirmek
mümkündür.
•ASP.Net öncesinde ASP (Active Server Pages) ile kullanılmaktaydı ve hem
Özet
sunucu hem de istemci taraflı kodlar aynı sayfa içerisine yazılmaktaydı.
ASP.Net geliştirilmesi ile birlikte bu kodlar birbirinden ayrılarak daha düzenli
bir kod yazım ortamı oluşturulmuştur. ASP.Net ilk lanse edildiği dönemde,
web uygulamaları geliştirmek için Web Form ortamını tanıtmıştır.
•Web Form uygulamaları, windows form uygulamalarına benzer olarak olay
tabanlı web uygulaması geliştirmeye olanak sağlayan web uygulaması
geliştirme ortamıdır. Bu ortam sayesinde sunucu taraflı kodlar,
"code behind" ismi verilen teknikle arayüzü oluşturan istemci kodlarından
ayrıştırılmıştır. Uygulamayı temel anlamda iki bölüme ayıran bu yöntem ile
bir çok başarılı web uygulaması geliştirilmiştir ancak uygulama geliştirilirken
alınan bu performans, uygulamanın çalışması esnasında bazı sınırlılıklardan
dolayı alınanamıştır. Örnek olarak web form uygulamalarında sayfa
durumlarının, sayfanın kaynak kodunda saklanması, oluşturulan kontrollerin
sunucu kontrolleri olarak oluşturulmasından kaynaklı sunucunun render
açısında iş yükün artması gibi sebepler gösterilebilir.
•Web Form uygulamalarının sınrasında, MVC tekniği ile uygulama geliştirme
platformu sunulmuştur. MVC, Model View Controller kelimelerinin baş
harflerinden oluşmaktadır ve bir uygulama geliştirme desenidir. Microsoft bu
deseni kendi ürettiği ASP.Net çatısına uyarlayarak yazılım geliştiricilere
sunmuştur.
•ASP.Net MVC adını verdiği bu yeni geliştirme ortamı, yazılım geliştiricilere
kodları çok daha iyi ayrıştırarak,test edilebilir, hata ayıklamasının daha kolay
yapıldığı kodlar üreterek uygulama geliştirme imkanı sunmuştur.
Günümüzde bir çok web uygulamasının bu yöntem ile geliştirildiği
görülmektedir.
•Bu yapı içerisinde Controller'lar, kullanıcıdan gelen istekleri karşılayarak
gerekli işlemleri içlerinde bulundurduğu action metod adı verilen metodlarla
gerçekleştirmekte ve kullanıcıya View'lar aracılığı ile sonuçları
göstermektedir. Bu işlemler sırasında verileri gösterirken gerektiğinde model
katmanını da kullanmaktadır.
•Model katmanında, uygulama içerisindeki verilerin bellekte temsil
edilebilmesi için gerekli class'larbulunmaktadır.
•View'ler ise kullanıcıya işlenen verilerin gösterildiği katman olarak
tanımlanmaktadır. View'ler içerisinde istemci taraflı HTML, CSS, JavaScript
gibi kodlarla birlikte aynı zamanda sunucu taraflı kodlar da yazılabilmektedir.
Bu kodların yazılabilmesi ve okunabilmesi Razor adı verilen yazım kuralları ile
sağlanmaktadır.
•Kullanıcıya her sayfada gösterilmek istenen verileri için Layout View adı
verilen kavram kullanılmaktadır. Örneğin uygulamanın gezinme menüsü,
layout içerisinde kodlanarak her sayfada aynı şekilde gösterilebilir. Bunun
getirdiği kolaylık ise, bir değişiklik yapılması gerektiğinde tek yerde yapılarak
bu değişikliğin her sayfaya yansıtılmasıdır.
•Controller katmanı sunucu taraflı çalışan bir katman olduğundan,
veritabanları ya da diğer kaynaklardan elde ettiği verileri kullanıcıya
göstermek için View’lere taşıyabilir. Controller’dan View’lere veri taşımak
için, ViewData, ViewBag, TempData ve ViewModel yöntemleri kullanılabilir.
136
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.Net:MVC
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi ASP.Net uygulamalarının çalıştırılabilmesi için
gerekli olan sunucudur?
a) MVC
b) IIS
c) Web Forms
d) Windows Forms Application
e) ViewData
137
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.Net:MVC
Cevap Anahtarı
1.b, 2.c, 3.d, 4.a, 5.c, 6.a, 7.e, 8.a, 9.a, 10.a
138
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.Net:MVC
YARARLANILAN KAYNAKLAR
Active Server Pages (2022). 10 Ocak 2022 tarihinde
https://en.wikipedia.org/wiki/Active_Server_Pages adresinden erişildi.
ASP.Net MVC – TempData (2022). 15 Ocak 2022 tarihinde
https://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc
adresinden erişildi.
ASP.Net MVC – ViewData (2022). 15 Ocak 2022 tarihinde
https://www.tutorialsteacher.com/mvc/viewdata-in-asp.net-mvc
adresinden erişildi.
Choudhary, K. (2019). Difference Between MVC And Web Forms . 12 Ocak 2022
tarihinde https://www.c-sharpcorner.com/article/difference-between-mvc-
and-web-forms/ adresinden erişildi.
Directives for ASP.Net Web Pages (2022). 10 Ocak 2022 tarihinde
https://docs.microsoft.com/en-us/previous-
versions/aspnet/t8syafc7(v=vs.100) adresinden erişildi.
Dospinescu,O., Donu, B.A. (2020). Model View Controller – A Comparative .NET
Versus Java Analysis. Innovation Management and Education Excellence
through Vision.
Rosencrance, L., Bigelow, J.S. (2019). Internet Information Services (IIS). 11 Ocak
2022 tarihinde
https://www.techtarget.com/searchwindowsserver/definition/IIS
adresinden erişildi.
Smith, S., Brock, D. (2021). Views in ASP.Net Core MVC. 15 Ocak 2022 tarihinde
https://docs.microsoft.com/en-
us/aspnet/core/mvc/views/overview?view=aspnetcore-6.0 adresinden
erişildi.
139
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET: VERİ TABANI
oluşturabilecek,
• Entity Framework kavramlarını
açıklayabilecek,
• MVC veri tabanı uygulaması
geliştirebileceksiniz.
ÜNİTE
7
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: Veri Tabanı
141
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: Veri Tabanı
GİRİŞ
Web uygulamalarının geçmişi incelendiğince, web 1.0 sürümünde
kullanıcılar web sayfalarını görüntüleyebilirken, etkileşime geçememekteydiler. Bu
alanda kullanılan teknolojilerin gelişmesine paralel olarak, kullanıcı etkileşimlerine
olanak sağlayan web 2.0 sürümünde, kullanıcılar web sitelerine kayıt olabilmekte,
kendi içeriklerini ekleyebilmekte ve hatta diğer kullanıcılarla da etkileşime
geçebilmektedirler. Günümüzde web 2.0 ile birlikte web 3.0’ da sanal gerçeklik
teknolojisi ile birlikte kullanılmaktadır.
Kullanıcı etkileşimi ile birlikte ortaya çıkan verilerin saklanması ve işlenmesi
ihtiyacı için web uygulamalarının barındırıldığı sunucularda bu verilerin sistematik
bir şekilde saklanması ve istenilen zamanda da erişebilmesi gerekmektedir.
Bilgisayar sistemlerinde verilerin kalıcı olarak saklandığı birimlere sabit disk
denilmektedir. Sabit disklerde tutulan veriler, dosyalar oluşturularak
tutulmaktadır. Her dosyanın bir uzantısı bulunmaktadır. Örneğin Word programı
ile oluşturulan dosyalar .docx uzantısına sahipken, fotoğraf dosyaları .jpg, .png gibi
uzantılara sahip olmaktadır.
Kullanıcılardan web uygulaması aracılığı ile alınan veriler, bir metin
dosyasında saklanabilecek nitelikte bile olsa, bu şekilde yapılan veri kayıt
işleminden sonra bu verilere ulaşmak, analizler yapmak oldukça zor olmaktadır.
Bu nedenlerden dolayı verilerin sistematik olarak tablolar içerisinde
saklanabilmesi için veri tabanı sistemleri kullanılmaktadır. Bu sistemler sadece
web uygulamalarında değil, masaüstü, mobil uygulamalar gibi diğer
uygulamalarda da sürekli olarak kullanılmaktadır.
Günümüzde web uygulamalarından gelen verileri saklayabilecek birçok veri
tabanı sistemi bulunmaktadır. Bunlardan bazıları, MS-SQL, Oracle, SqLite, MySQL
gibi sistemlerdir. Bu bölümde, ASP.Net MVC uygulaması ile birlikte kullanılacak
olan MS-SQL veri tabanı sistemi incelenecektir.
MS-SQL, Microsoft firmasının geliştirdiği bir veri tabanı sistemidir. Verileri
içinde oluşturulan ilişkili tablolar aracılığı ile sistematik olarak saklayabilmektedir.
Bir ASP.Net MVC uygulamasının veri tabanı ile haberleşebilmesi için veri
erişim teknolojilerinden faydalanılmaktadır. Microsoft firmasının bu alanda
geliştirdiği ve günümüzde sıkça yazılımcılar tarafından tercih edilen teknoloji,
Entity Framework teknolojisidir.
Entity Framework ile neredeyse her uygulamada yapılan işlemler olan CRUD
(Create, Read, Update ve Delete) işlemleri az sayıda satır kod yazarak
gerçekleştirilebilmektedir. Bu işlemlerin hızlı yapılabiliyor olması, uygulama
geliştirme süreçlerine de büyük katkı sağlamaktadır.
Bu bölümde, bir ASP.Net MVC uygulaması ile kullanıcıdan alınan verilerin
MS-SQL veri tabanında okuma, yazma, değiştirme ve silme işlemleri
gerçekleştirilecektir. ASP.Net MVC uygulaması ve MS-SQL veri tabanı arasındaki
bağlantı ve diğer işlemler ise, Entity Framework kullanılarak yapılacaktır.
142
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: Veri Tabanı
Tablo yapıları
Veri tabanlarında veriler, tablo adı verilen yapılar içerisinde tutulmaktadır.
Tablolar, satır ve sütunlardan oluşan yapılardır. Saklanacak verilerin niteliğine
Veritabanı göre tablolar içinde sütunlar oluşturularak her veri bir satırda saklanmaktadır.
tablolarındaki her bir
kayıt entity (varlık) OgrenciId Ad Soyad Numara
olarak isimlendirilir. 1 Ahmet Yılmaz 123
2 Mehmet Demir 789
Şekil 7.1. Öğrenci Bilgilerinin Tutulduğu Veri Tabanı Tablosu
143
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: Veri Tabanı
Veri tabanına tablo Açılan diyalog penceresinde “Database name:” alanına oluşturulmak
eklemek için Tables istenen veri tabanı ismi yazıldıktan sonra altta bulunan “OK” butonuna
klasörüne sağ tıklanarak tıklandığında yeni veri tabanı oluşturulmaktadır.
açılan menüden “New-
>Table..” komutu
seçilmelidir.
144
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.NET: Veri Tabanı
145
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.NET: Veri Tabanı
146
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: Veri Tabanı
147
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: Veri Tabanı
[Table("tblOgrenciler")]
public partial class Ogrenci
{
[Column("OgrenciAd",TypeName ="varchar")]
[MaxLength(25)]
[Required]
public string OgrenciAdi { get; set; }
public string Soyad { get; set; }
public int Numara { get; set; }
}
Fluent Api
Entity Framework code first ile oluşturulacak tabloların ve alanlarının
özelliklerinin belirlenebilmesi için kullanılan bir diğer teknik ise Fluent Api ‘dir.
Fluent Api kullanılarak yapılan özelleştirmelerde, zincirleme metodlardan
faydalanılmaktadır. Bu metodlar “DbContext” sınıfından türetilerek oluşturulan
“Context” sınıfında, “OnModelCreating“ metodu override edilerek
kullanılmaktadır.
OnModelCreating metodu, veri tabanında bulunan tablolar oluşturulurken
çalışan bir metottur ve DbContext sınıfı içerisinde yer almaktadır. Her uygulamada
farklı veri tabanı ve tabloları olabileceğinden dolayı override edilerek kullanılması
gerekmektedir.
148
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: Veri Tabanı
149
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: Veri Tabanı
Veri tabanı için gerekli olan tüm kodlar, programlama dili ile
oluşturulmaktadır. SQL konusuna hakim programcılar için bu teknik
kullanışlı olmayabilir.
Veri tabanında yapılacak her değişiklik için önce kodlarda değişiklik
yapılarak, update-dataabse komutu ile veri tabanına yansıtılmalıdır.
Entity Framework Core Database First Yaklaşımı
Entity Framework Entity Framework ile önce veri tabanı oluşturulup, veri tabanı işlemleri için
Database First ile önce
gerekli olan kodların daha sonra oluşturulduğu yaklaşıma Database First yaklaşımı
veri tabanı
oluşturulmaktadır. Veri denilmektedir. Bu yaklaşımda veri tabanı oluşturulduktan sonra Package Manager
tabanı işlemleri için Console’da Scaffold-DbContext komutu çalıştırılmalıdır.
gerekli olan kodlar
Scaffold-DbContext "Server=.\MSSQLSERVER2014;Database=OkulYonetimDB;Trusted_Connection=True;"
Entity Framework Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
tarafından oluşuturulur.
Örnek 7.3. Scaffold-DbContext Komutu
150
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: Veri Tabanı
151
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: Veri Tabanı
152
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: Veri Tabanı
Entity Framework
kütüphanesinin
kullanılabilmesi için
EntityFrameworkCore. Şekil 7.6. Gerekli olan Entity Framework Paketleri
SqlServer ve
EntityFrameworkCore.
Tools
paketleri projeye dahil
edilmelidir.
153
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: Veri Tabanı
Eklenen controller
sınıfında Entity
Framework ile veri
işlemlerinin yapılabilmesi
için Model ve
DataContext sınıflarının
seçilmesi gerekmektedir.
154
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: Veri Tabanı
Index View’i incelendiğinde “Create New” adında bir link ve hemen altında
öğrenci listesi olduğu görülmektedir. Bu noktada veri tabanında bir
öğrenci bulunmadığından liste boş olarak gelmektedir. Index View kodları
incelendiğinde Controller’dan ViewModel tekniği ile bir liste taşındığı ve
listenin “foreach” döngüsü ile görüntülendiği görülmektedir. Bu noktada
veri tabanına kayıt eklenmediğinden liste boş olarak görüntülenmektedir.
10- “Create New” linki ile yeni kayıt oluşturmak için “Create” isimli view’den
yeni öğrenci eklenerek kaydedildiğinde, veri tabanından okunan kayıtlar
Index View’inde gösterilmektedir.
View’ler içerisinde
bulunan formlardan
post edilen veriler,
controller sınıfındaki
[HttpPost] attribute’i ile Şekil 7.12. Create View’i ile Kayıt Eklendikten Sonra Güncellenen Liste
işaretlenmiş ilgili metod 11- Listede bulunan “Edit | Details | Delete” linkleri ile de güncelleme,
tarafından karşılanır. detayları gösterme ve silme işlemlerini yapan View’lere bağlantılar
verilmiştir.
12- View’lerde bulunan tüm bağlantılar İngilizce olarak görüntülenmektedir.
Bu bağlantılar, ilgili View’lerin kaynak kodlarından Türkçeleştirilebilir.
Örnek 7.7.’de Index View’inde bulunan ilgili kodlar gösterilmiştir.
13- Create View’i kaynak kodları incelendiğinde bir HTML form etiketi
içerisinde input etiketleri ile veri girişi için alanlar tanımlandığı
155
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: Veri Tabanı
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult>
Create([Bind("OgrenciId,Ad,Soyad,Numara")] TblOgrenciler
tblOgrenciler)
{
if (ModelState.IsValid)
{
context.Add(tblOgrenciler);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(tblOgrenciler);
}
Create metoduna gelen verilerde herhangi bir sorun yoksa veri tabanına
kayıt işlemi yapılarak Index metoduna dönüş sağlanmaktadır. Index
metodu da, Index isimli View’e dönüş sağladığından, başarılı bir ekleme
işleminin ardından RedirectToAction() metodu ile kayıtlı öğrenci listesi
kullanıcıya gösterilmektedir.
Bireysel Etkinlik
156
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: Veri Tabanı
•Bu bölümde entity framework veri erişim kütüphanesi kullanılarak temel veri
tabanı işlemlerinin yapıldığı bir ASP.Net MVC uygulaması geliştirilmiştir.
•Bilgisayar ortamlarında verilerin sistematik olarak saklanması için veri
tabanları kullanılmaktadır.
•Günümüzde birçok veri tabanı yönetim sistemi bulunmakla birlikte, en sık
kullanılan sistemlerden birisi Microsoft SQL veri tabanı yönetim sistemidir.
•Geliştirilen nerdeyse her uygulamada veri tabanı ihtiyacı bulunmaktadır. Veri
Özet
tabanlarındaki verilere ulaşmak için, veri erişim teknolojilerine ihtiyaç
duyulmaktadır. Microsoft firması tarafından geliştirilen veri erişim
teknlojileri çatısına ADO.Net ismi verilmektedir.
•Entity Framework, Microsoft tarafından geliştirilen açık kaynaklı bir veri
erişim kütüphanelerinden bir tanesidir. Bu kütüphane ile, bağlanılacak veri
tabanı sistemi farketmeksizin veri erişim kodları geliştirilebilmektedir. Bunun
avantajı, uygulamanın kullandığı veri tabanı sonradan değiştirilse bile,
uygulama kodlarında yapılacak değişikliklerin en az seviyede olmasıdır.
•Entity framework ile veri işlemlerinin yapılabilmesi için temel anlamda 2
yaklaşım bulunmaktadır. Bu yaklaşımlardan birincisi code-first yaklaşımıdır.
Code first yaklaşımında veri tabanı oluşturulmadan önce model sınıfları ve
veri işlemlerinin yapılabilmesi için DbContext sınıfından türetilmiş bir context
sınıfı yazılmaktadır. Bu sınıfın yazılmasının ardından, veri tabanı ve içindeki
tablolar otomatik olarak Entity framework tarafından oluşturulmaktadır.
•Code First yaklaşımı ile oluşturulacak olan tablolar ve alanların
özelleştirilebilmesi için iki tane yaklaşım bulunmaktadır. Bunlardan birincisi
Data Annotation Attribute'leri ile gerçekleştirilen yaklaşımdır. Bu yaklaşımda
tablo veya alanların özelliştirilmesi, model sınıflarına yazılan Attribute'ler ile
gerçekleştirilmektedir. Diğer bir yaklaşım ise Fluent Api tekniğidir. Fluent Api
ile tabloların ve metodların özelleştirilmesi için yazılan Context sınıfında
OnModelCreating() metodu override edileren zincirleme metodlar
kullanılmaktadır. Her iki teknik de tabloların ve alanların özelliklerini
belirlemek için kullanılmaktadır.
•Entity framework kütüphanesinin ikinci temel yaklaşımı ise Database First
yaklaşımıdır. Adından da anlaşılacağı üzere, geleneksel yazılım geliştirme
modeline daha yakın olan bu yaklaşımda öncelikle veri tabanı
oluşturulmaktadır. Projede kullanılacak olan model ve DbContext sınıfları ise
bu veri tabanı yapısına göre yine Entity Framework tarafından
oluşturulmaktadır.
•Biribirlerinin tam tersi şekilde çalışan bu iki yaklaşımlardan birisi ile veri
tabanı işlemleri yapılan proje geliştirilebilmektedir. Yazılımcılar, kendi
geliştirme alışkanlıklarına göre yaklaşımlardan birisini seçebilmektedirler.
•Entity Framework kütüphanesinin bir MVC projesinde kullanılabilmesi için
NuGet Package Manager aracılığı ile projeye dahil edilmesi gerekmektedir.
•Asp.Net MVC proje yapısında, veri tabanında yapılacak olan CRUD
işlemlerinin hızlı bir şekilde yapılabilmesi için geliştirilmiş olan şablonlar
bulunmaktadır.
•Bu şablonlar controller sınıfları ekleme sırasında seçilerek, entity framework
ile veri işlemlerinin yapılması sağlanabilmektedir. Temel veri işlemlerinin
yapılabilmesi için şablonlar aracılığı ile CRUD işlemlerinin View’leri de
otomatik olarak oluşturulmaktadır. View’ler ile birlikte controller içerisinde
bulunan metodlar ile veri işlemleri yapacak kodlar da oluşturulmaktadır.
•Bu yöntem temel veri işlemleri için geliştiricilere büyük kolaylıklar
sağlamaktadır.
•Oluşturulan kodlar üstünde sonradan değişiklikler yapmak da mümkün
olduğundan aynı zamanda esnek bir sistemdir.
157
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: Veri Tabanı
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi CRUD kısaltmasının açılımıdır?
a) Create-Route-Update-Delete
b) Creative-Read-Update-Delete
c) Create-Read-Update-Delete
d) Create-Read-Updated-Deleted
e) Create-Read-Update-Display
158
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: Veri Tabanı
8. Entity Framework ile kayıt bulma işlemi için aşağıdaki metodlardan hangisi
kullanılır?
a) SaveChanges
b) Find
c) Add
d) View
e) Remove
10. Entity Framework Code First yaklaşımında zincirleme metodlar ile alan
özelliklerini belirlemede kullanılan teknik aşağıdakilerden hangisidir?
a) Code first
b) Database first
c) Data Annotations
d) Fluent Api
e) Scaffold-DbContext
Cevap Anahtarı
1.c, 2.a, 3.d, 4.c, 5.b, 6.c, 7.b, 8.b, 9.b, 10.d
159
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: Veri Tabanı
YARARLANILAN KAYNAKLAR
Narang, R. (2018). Database management systems. PHI Learning Pvt. Ltd.
Hughes, A. (2019). Microsoft SQL Server. 3 Şubat 2022 tarihinde
https://searchdatamanagement.techtarget.com/definition/SQL-Server
adresinden erişildi.
Smith, J. P. (2021). Entity Framework core in action. Simon and Schuster.
Anbazhagan, P. (2017). Mastering entity framework core 2.0 : Dive into entities,
relationships, querying, performance optimization, and more, to learn
efficient data-driven development. Packt Publishing, Limited.
Galloway, J., Haack, P., Wilson, B., & Allen, K. S. (2012). Professional asp. net mvc
4. John Wiley & Sons, Incorporated.
160
Atatürk Üniversitesi Açıköğretim Fakültesi 21
PHP DİLİNE GİRİŞ
• Giriş
• PHP Destekli Web sunucusu
İÇİNDEKİLER
Kurulumu İNTERNET
• PHP Dilinin Yapısı
• Değişkenler PROGRAMCILIĞI II
• Matematik ve Atama
Operatörleri
Dr. Öğr. Üyesi Halil
• Diziler ERSOY
• Kontrol Yapıları
• If ve Switch Komutları
• For Döngüsü
• Foearch Döngüsü
• While Döngüsü
• Do-While Döngüsü
yazılımları kurabileceksiniz,
• PHP ile değişkenler ve diziler
üzerinde işlem yapabileceksiniz,
• PHP'de kontrol yapıları ile
program akışını
değiştirebileceksiniz.
ÜNİTE
8
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP Diline Giriş
Web Sayfası
XAMPP Paketi
Değişkenler
karşılaştırma operatörleri
Diziler
İf Komutu
Switch Komutu
For Döngüsü
Kontrol Yapıları
Foreach Döngüsü
While Döngüsü
Do-While Döngüsü
162
Atatürk Üniversitesi Açıköğretim Fakültesi 2
PHP Diline Giriş
GİRİŞ
Web sayfaları HTML dili, CSS ve Javascript gibi istemci (kullanıcı) taraflı diller
ile geliştirilmekte ve tarayıcılar tarafından görüntülenmektedir. Bu şekilde
yaratılmış web sayfalarını oluşturan kodlar, tüm istekte bulunan istemcilere aynı
şekilde gönderilir. İstemcinin kullandığı cihaz ve tarayıcı özelliklerine göre tasarım
ve içerik değişik biçimlerde görülebilir.
Kullanıcılara farklı içerik sunabilmek için daha karmaşık işlemlerin yapılması
gerektiği durumlarda (örneğin veri tabanından bilgi sunulması, kullanıcıdan bilgi
alınması ve işlenmesi, vb.) sunucu taraflı diller ile web sayfalarını oluşturan
kodların ve içeriğin sunucu üzerinde istemciye gönderilmeden önce değişik
biçimlerde oluşturulması mümkün olmaktadır. Örneğin bir kütüphanenin web
sayfasında arama yapan farklı kişiler için farklı sonuçların ekrana yazılabilmesi için,
sunucu tarafında çalışan diller ile arama sonucuna göre farklı sayfa içeriğinin
oluşturulup istemciye gönderilmesi gerekir. Sunucu üzerinde çalışan bu dillere
sunucu taraflı diller denmektedir.
PHP en popüler sunucu taraflı dillerden bir tanesidir. PHP, 1997 yılında
Rasmus Lerdorf tarafından “Personal Home Page” (Kişisel Web Sayfası) adı ile
geliştirilmiş, sonrasında Zeev Surask ve And Gutmans tarafından güncellenerek
2000 yılında “PHP: Hypertext Preprocessor” adıyla anılmaya devam etmiştir. Ocak
2022 itibariyle 8.1. sürümü yayınlanmaktadır. Ücretsiz olarak kullanılabilmesi,
farklı birçok web sunucusu tarafından desteklenmesi ve son sürümleri ile nesne
tabanlı programlamaya destek vermesi nedeniyle yaygın biçimde kullanılmaktadır.
Bu bölümde öncelikle PHP dilinin çalışması için gerekli olan web sunucusu
kurulumu anlatılacak, ardından PHP dilinin özellikleri örnekler verilerek
açıklanacaktır. Örneklerin okuyucu tarafından çalıştırılması ve farklı alıştırmaların
yapılabilmesi için önerilen web sunucusunun kişisel bilgisayara kurulması
gerekmektedir.
163
Atatürk Üniversitesi Açıköğretim Fakültesi 3
PHP Diline Giriş
Sitede Türkçe dil desteği mevcuttur. Windows için ilgili paketin (sürüm
8.1.1) boyutu 168 MB’tır. İndirme tamamlandıktan sonra kurulum dosyasını
yönetici yetkisi ile çalıştırınız. Kurulum adımları sırasında kurulum klasörü
XAMPP paketi sorulacaktır. Öneri olarak gelen “C:\xampp” klasörü seçilebilir, ancak eğer farklı bir
kurulumu bitince, C: sürücü ya da klasör seçmek isterseniz bu adımda müdahale etmelisiniz. Onay
sürücünde verdikten sonra paket kuruluma başlayacak ve birkaç dakika sonra kurulum
C:\xampp\htdocs
tamamlanacaktır. Kurulum sırasında Apache web sunucunuzun bilgisayarınızın
adında bir klasör
oluşmalıdır. Bu klasör güvenlik duvarını aşarak dış dünyaya bağlantı kurmasına izin vermek isteyip
web sunucumuzun ana istemediğiniz soracaktır; bu soruya evet demenizi tavsiye ederiz. Bu sayede web
dizinidir. sunucunuz çalışırken dışarıdan gelecek bağlantı taleplerine cevap verecektir.
Kurulum tamamlandığında Şekil 8.2’deki gibi bir pencere ile sona erecektir:
164
Atatürk Üniversitesi Açıköğretim Fakültesi 4
PHP Diline Giriş
Yukarıdaki Şekil 8.3’te, mavi renkli yazı ile verilen uyarıya dikkat ediniz.
Kontrol paneli uygulamasını yönetici olarak çalıştırmazsanız bu uyarıyı almaya
devam edeceksiniz, daha önemlisi XAMPP paketindeki farklı servisleri çalıştırmaya
kalktığınızda hata mesajları alabilirsiniz. Kontrol panelinin bu durumda ise kapatıp,
uygulamayı sağ tıklatıp “Yönetici olarak çalıştır” seçeneğini seçiniz (Şekil 8.4).
165
Atatürk Üniversitesi Açıköğretim Fakültesi 5
PHP Diline Giriş
Bu ve bir sonraki bölümde sadece PHP dili ile ilgili konular ele alınacağından,
sadece Apache uygulamasının çalışması yeterlidir. Eğer PHP ile veri tabanı
Kontrol panelini uygulamaları geliştirmek isterseniz bu ekrandaki MySQL’i çalıştırmanız
kapatmak çalışan gerekecektir.
servisleri kapatmaz,
servisleri kapatmak için XAMPP’i sadece PHP öğrenme için kullanacaksanız, PHP kodlarınızı
kontrol panelini açıp çalıştırmadan önce bu paneli açıp Apache’yi başlatmalı, çalışmanız sona erdiğinde
“Stop” demelisiniz, durdurmalısınız. Başlatılan Apache servisini durdurmak için “Stop” düğmesine
ancak bilgisayarınız basmalısınız.
kapatırsanız servisler
kapanmış olacaktır. Eğer Apache servisinin bilgisayarı her açtığınızda otomatik başlamasını
isterseniz, Şekil 8.5’teki kontrol panelinde “Service” seçeneğini işaretleyiniz.
166
Atatürk Üniversitesi Açıköğretim Fakültesi 6
PHP Diline Giriş
167
Atatürk Üniversitesi Açıköğretim Fakültesi 7
PHP Diline Giriş
168
Atatürk Üniversitesi Açıköğretim Fakültesi 8
PHP Diline Giriş
169
Atatürk Üniversitesi Açıköğretim Fakültesi 9
PHP Diline Giriş
• Çıktı:
Merhaba PHPMerhaba 2022;
170
Atatürk Üniversitesi Açıköğretim Fakültesi 10
PHP Diline Giriş
Değişkenler
PHP’de değişkenlerin tanımlanmasına gerek yoktur, tanımlamak için ayrıca
bir komut da yoktur. Değişkenleri ilk kullanmak istediğimiz yerde ilk değerlerini
atayarak Örnek 8.3’teki gibi kullanabiliriz. Değişkenler adlandırılırken şu kurallara
uyulmalıdır:
171
Atatürk Üniversitesi Açıköğretim Fakültesi 11
PHP Diline Giriş
172
Atatürk Üniversitesi Açıköğretim Fakültesi 12
PHP Diline Giriş
-= $a -= $b $a = $a – $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
.= $a .= $b $a = $a . $b (String birleştirme)
Diziler
Birden fazla değeri hafızada tutmak için kullanılan diziler, PHP’de oldukça
esnek kullanım yapılarına sahiptir. Örnek 8.5’teki kodda 3 farklı dizi tanımlaması
yapılmıştır.
$dizi1 = array (10,20,30); 102030
$dizi2 = [10,20,30]; 102030
$dizi3 = [10,"yirmi",30.2];
echo $dizi1[0] . $dizi1[1] . $dizi1[2]; 10yirmi30.2
echo "<br/>";
echo $dizi2[0] . $dizi2[1] . $dizi2[2];
echo "<br/>";
echo $dizi3[0] . $dizi3[1] . $dizi3[2];
Örnek 8.5 Dizi Tanımlamaları
173
Atatürk Üniversitesi Açıköğretim Fakültesi 13
PHP Diline Giriş
Eğer dizi anahtarlı biçimde tanımlandıysa, yeni eleman yeni anahtar ile
birlikte Örnek 8.9’daki gibi eklenebilir.
$diziX=["genislik" => 20,"yukseklik"=> 40];
print_r($diziX);
$diziX["derinlik"]=60; // YENİ ELEMAN
print_r($diziX);
Array ( [genislik] => 20 [yukseklik] => 40 )
Array ( [genislik] => 20 [yukseklik] => 40 [derinlik] => 60 )
Örnek 8.9 Diziye Yeni Anahtar ve Değer Ekleme
Diziyi Sıralamak
Dizileri sort() ya da rsort() fonksiyonları ile küçükten büyüğe (A-Z) ya da
büyükten küçüğe (Z-A) Örnek 8.11’deki gibi sıralayabilirsiniz.
$dizi=[5,2,7,1]; Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 7 )
sort($dizi);
print_r($dizi);
Örnek 8.11 Dizi Sıralama Komutları ve Çıktı
174
Atatürk Üniversitesi Açıköğretim Fakültesi 14
PHP Diline Giriş
KONTROL YAPILARI
Programın akışını etkileyen kontrol (akış) komutları if ve switch gibi karar
yapılarından ve for, do-while ve while gibi döngülerden oluşmaktadır.
If Komutu
Programın akışını mantıksal ifadelerin sonucuna göre değiştiren komuttur.
“If” komutu istenirse tek başına, istenirse if-else (Örnek 8.13) ya da if-elseif
(Örnek 8.14) şeklinde kullanılabilir.
$a=10; 10 değeri,
$b=20; 20'den daha
if($a>$b) büyük
echo "$a değeri, $b'den daha büyüktür";
değildir
else
echo "$a değeri, $b'den daha büyük değildir";
Örnek 8.13 if-else Komutu
Örnek 8.14’te if’in koşulu doğru değilse, elseif komutunun koşulu kontrol
edilecektir. Elseif koşulu da doğru değilse, else komutunun altındaki blok
çalıştırılacaktır. Elseif komutu, if yapısı içerisinde birden fazla kullanılabilir, else
komutu ise, gerekirse, sadece bir defa ve en sonda yer almalıdır.
175
Atatürk Üniversitesi Açıköğretim Fakültesi 15
PHP Diline Giriş
Switch Komutu
Switch komutu, bir değişkenin değerini özel değerler ile karşılaştırıp, eşitlik
durumunda programın akışını değiştirir (Örnek 8.15).
$renk = "mavi";
switch ($renk) {
case "mavi":
echo "Sevdiğiniz renk mavidir";
break;
case "blue":
echo " Sevdiğiniz renk kırmızıdır";
break;
176
Atatürk Üniversitesi Açıköğretim Fakültesi 16
PHP Diline Giriş
case "green":
echo " Sevdiğiniz renk yeşildir";
break;
default:
echo " Sevdiğiniz renk mavi, kırmızı veya yeşil değil";
}
Sevdiğiniz renk mavidir
For Döngüsü
For döngüsü, belirli sayıda tekrar etmesi istenilen komutların bir sayaç
değişkeni değeri kontrol edilerek çalıştırılmasını sağlar (Örnek 8.16).
a=0
for($a=0; $a<5;$a++){ a=1
echo "a=$a</br>"; a=2
}
a=3
a=4
Örnek 8.16 For Döngüsü Örneği
For döngüsünde, tekrar For döngüsü eleman sayısı bilinen diziler ile sıklıkla kullanılır. Döngünün
edilecek komut birden
sayaç değişkeni aynı zamanda Örnek 8.17’deki gibi dizinin indisi olarak
fazla ise komutlar blok
parantez içinde kullanılabilir.
yazılmalıdır $dizi=[5,10,15,20,25];
for($a=0; $a<5;$a++){
echo "Dizinin " . $a+1 . ". elemanı = $dizi[$a]</br>";
}
Dizinin 1. elemanı = 5
Dizinin 2. elemanı = 10
Dizinin 3. elemanı = 15
Dizinin 4. elemanı = 20
Dizinin 5. elemanı = 25
Foreach Döngüsü
Dizilerin eleman sayıları bilinmediğinde ya da değişkenlik gösterdiğinde,
sayaç kontrollü for döngüsü kullanmak zor olabilir. Bunu yerine kaç eleman olursa
olsun, dizinin her elemanı için tekrar işlemini yapan foreach döngüsü Örnek
8.18’deki gibi kullanılabilir.
177
Atatürk Üniversitesi Açıköğretim Fakültesi 17
PHP Diline Giriş
İndis yerine anahtar kullanılan dizilerde, foreach döngüsü ile her elemanın
hem anahtarına hem de değerine Örnek 8.19’daki gibi ulaşılabilir.
$dizi=["genislik" => 200, genislik = 200
"yukseklik" => 300, yukseklik = 300
"derinlik" => 400]; derinlik = 400
foreach($dizi as $anahtar => $deger){
echo "$anahtar = $deger</br>";
}
Örnek 8.19 Foreach Döngüsü ve Anahtarlı Diziler
While Döngüsü
Döngüdeki tekrarın başlaması veya tekrar sayısı eğer bir koşula bağlı ise
while döngüsü kullanılabilir. Örnek 8.20’deki while döngüsünde koşul ($a < 4)
sonucu doğru olduğu sürece döngü tekrar etmeye devam eder.
$a=0; a=0
while ($a < 4){ a=1
echo "a = $a</br>"; a=2
$a++;
a=3
}
Örnek 8.20 While Döngüsü Örneğini
Do While Döngüsü
While ve Do-While
Do-While döngüsünde, tekrar için gerekli koşul kontrolü, tekrar edecek
döngülerinde, koşul
ifadesinin değeri hep komutların biz kez çalıştırılmasından sonra yazılır. Koşul doğru ise komutlar tekrar
doğru olursa, döngü çalıştırılır (Örnek 8.21).
sonsuz tekrara girer! do{ a=0
echo "a = $a</br>"; a=5
$a+=5; a = 10
}while ($a < 20);
a = 15
Örnek 8.21 Do-While Döngüsü Örneğini
Bireysel Etkinlik
178
Atatürk Üniversitesi Açıköğretim Fakültesi 18
PHP Diline Giriş
179
Atatürk Üniversitesi Açıköğretim Fakültesi 19
PHP Diline Giriş
Özet (devamı)
•For Döngüsü: Tekrar edilmesi istenen komutların tekrar sayısını, bir sayaç
değişkeninin ilk ve son değerine göre ayarlandığı döngüdür. Dizilerin
elemanlarına erişim için sıklıkla kullanılır. Sayaç istenilen bir değerden
başlatılabilir ve üst değer ulaşması için birer birer ya da farklı büyüklükte
artırılabilir.
•Foreach Döngüsü: Bir dizinin tüm elemanlarına erişim sağlayana kadar
komutların tekar edilmesini sağlar. Eleman sayısı belirsiz dizilerde daha çok
tercih edilir. Eğer dizi elemanları anahtar da içeriyorsa hem anahtara hem de
değere erişim mümkündür.
•While Döngüsü: Tekrar edilecek komutların bir koşulun sonucuna göre
tekrar edilmesini sağlar. Koşul döngü başında yer aldığı için koşul yanlış ise
komutlar hiç çalıştırılmadan döngü terk edilebilir. Eğer sonuç sürekli doğru
sonucunu üretirse, döngü sonsuz döngüye girebilir.
•Do-While Döngüsü: Tekrar durumunun koşula bağlı olduğu başka bir döngü
yapısıdır. Ancak koşul, döngü komutlarının sonunda yer alır. Bu nedenler
komutlar koşuldan bağımsız olarak en az bir kez çalıştırılır, sonraki tekrarlar
ise koşula bağlıdır. Koşul sürekli doğru olursa yine sonsuz döngü riski vardır.
180
Atatürk Üniversitesi Açıköğretim Fakültesi 20
PHP Diline Giriş
DEĞERLENDİRME SORULARI
1. PHP’nin çalışması için aşağıdaki ikililerden hangisi gereklidir?
a) Tarayıcı ve Web Sunucusu
b) Web Sunucu ve Veri Tabanı
c) Veri Tabanı ve PHP Yorumlayıcısı
d) PHP yorumlayıcısı ve Web Sunucusu
e) Web Sunucusu ve Metin Editörü
181
Atatürk Üniversitesi Açıköğretim Fakültesi 21
PHP Diline Giriş
Cevap Anahtarı
1.d, 2.b, 3.a, 4.e, 5c., 6.b, 7.e, 8.c, 9.d, 10.a
182
Atatürk Üniversitesi Açıköğretim Fakültesi 22
PHP Diline Giriş
YARARLANILAN KAYNAKLAR
PHP Group. (2022, 1 11). PHP Kılavuzu. PHP: Hypertext Preprocessor:
https://www.php.net/manual/tr/ adresinden alındı
Şahin, Y. L. (2016). PHP'ye Giriş. M. Fırat içinde, İnternet Tabanlı Programlama (s.
303). Eskişehir: Anadolu Üniversitesi. https://ets.anadolu.edu.tr/
storage/nfs/WTK210U/ebook/WTK210U-17V1S1-8-0-1-SV1-ebook.pdf
adresinden alındı
W3 Schools. (2022, 1 11). PHP Tutorial. W3Schools Online Web Tutorials:
https://www.w3schools.com/php/default.asp adresinden alındı
183
Atatürk Üniversitesi Açıköğretim Fakültesi 23
PHP’DE İLERİ KONULAR
• Giriş
• Dış dosyaların Dahil Edilmesi
İÇİNDEKİLER
• Fonksiyonlar İNTERNET
• HTML Formları ile Çalışma
• $_POST, $_GET ve PROGRAMCILIĞI II
$_REQUEST Değişkenleri
• Sunucu Değişkenleri ve Dr. Öğr. Üyesi Halil
Yönlendirme
• Oturum Yönetimi ERSOY
• Çerez Kullanımı
çağırabilecek,
• Dış dosyaları sayfalara dahil
edebilecek,
• Form'ları PHP ile işleyebilecek,
• Sayfa yönlendirme veya
sonlandırma yapabilecek,
• Oturum bilgilerini
yönetebilecek,
• Çerezleri kullanabileceksiniz.
ÜNİTE
9
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP’de İleri Konular
Fonksiyonlar
$_SESSION Değişkeni
$_COOKIE Değişkeni
185
Atatürk Üniversitesi Açıköğretim Fakültesi 2
PHP’de İleri Konular
GİRİŞ
Bir önceki bölümde, PHP’e giriş yapmış ve programlama dillerine göre
oldukça esnek olduğundan bahsetmiştik. Özellikle değişkenler, diziler ve veri
türleri konusunda ihtiyaca göre oldukça fazla sayıda otomatik tür dönüşümleri ve
yardımcı hazır fonksiyonları mevcuttur.
Bu bölümde PHP dilini güçlü kılan kendine özgü öne çıkmış özellikler ele
alınmıştır. Bu kapsamda PHP komutlarının farklı dosyalar içerisine yazılıp istenilen
diğer sayfalara dahil edilmesi, fonksiyon tanımlama ve çağırma, form
elemanlarından gelen bilgilerin karşılanması ve işlenmesi ile farklı yerlerde
kullanılabilecek global değişkenler, oturum ve çerezlerin yönetimi ve kullanımları
anlatılmıştır.
Modüler program yazabilmek için çok kullanılan komutların farklı
dosyalarda saklanması ve gerektiğinde istenilen yere dahil edilmesi PHP’de
mümkündür. Bunun için bu bölümde require ve include komutları ele alınmıştır.
Fonksiyon tanımlama ve kullanma hemen hemen bütün programlama
dillerinde önemli bir konudur. PHP’de fonksiyon tanımlamaları ve kullanımı bu
Require ile include bölümde ele alınmıştır.
arasındaki fark, Kullanıcıların veri girmesine izin veren HTML elemanı olan form ve form
eklenecek dosya etiketleri, girilen verinin işlenmesi için yine sunucu taraflı dillerle yazılmış sayfalara
bulunamadığında
ihtiyaç duyar. PHP’de bunun için $_GET, $_POST ve $_REQUEST global
require komutunun
hata vermesi ve değişkenleri kullanılır. HTML sayfasındaki formdan gelen bilgiler, sunucu tarafında
çalışmayı bu değişkenler içerisinde tutulur ve farklı amaçlarla kullanılır.
durdurmasıdır, include Web sitelerinin kullanıcılar hakkında bazı bilgileri tutmak ve hatırlamak için
komutunun ise sadece
iki yolu vardır: Oturum değişkenleri kullanmak ya da çerezleri kullanmak. PHP ile
uyarı vermesi ancak
çalışmaya devam oturum değişkenlerine $_SESSION global değişkeni ile, çerezlere ise $_COOKIE
etmesidir. global değişkeni ile erişilebilir. Ayrıca web sunucusu ve sayfa hakkında detaylı
bilgilere kodlar içerisinden ulaşmak için $_SERVER global değişkeni kullanılır. Bu
global değişkenlerde bu bölümün konusu olacaktır.
186
Atatürk Üniversitesi Açıköğretim Fakültesi 3
PHP’de İleri Konular
sayfa1.php <?php
require "sabitler.php";
// YA DA include "sabitler.php";
?>
<html>
<head>
<?php
echo "<title>".BASLIK."</title>";
?>
</head>
<body>
<?php
echo "<a href='".ADRES."'>".ADRES."</a>";
?>
</body>
</html>
FONKSİYONLAR
Tüm programlama dillerinde olduğu gibi PHP’de de kodları anlamlı parçalar
Fonksiyonlar halinde bölmek ve gerektiğinde tekrar kullanmak için fonksiyon tanımlanabilir.
tanımlandıkları sırada Fonksiyonların tanımlanması aşağıdaki kalıba göre yapılır:
değil, çağırıldıkları
function fonksiyonAdi(parametreler){
sırada çalışırlar. komutlar;
return geriDönüşDeğeri;
}
Fonksiyon adı, değişken isimlendirme kurallarına uygun yapılır. İstenirse hiç
parametre kullanılmayabilir veya birden fazla değişken ya da dizi parametre olarak
kullanılabilir. Fonksiyon içerisinde istenirse yeni değişken veya diziler
tanımlanabilir. Fonksiyon sonunda isteğe bağlı olarak geri dönüş değeri return
kelimesi ile birlikte kullanılabilir.
Fonksiyon bir kez tanımlanır ancak birden fazla çağrılabilir. Çağırma
sırasında sadece fonksiyonun adı ve parametreleri yazılmalıdır. Fonksiyonun geri
dönüş değeri olup olmadığına göre çağırma satırı değişebilir.
187
Atatürk Üniversitesi Açıköğretim Fakültesi 4
PHP’de İleri Konular
188
Atatürk Üniversitesi Açıköğretim Fakültesi 5
PHP’de İleri Konular
Bunun için tanımlama satırında, Örnek 9.4’teki gibi, parametre adlarının önüne &
sembolü eklenmelidir.
function karesiniAl(&$sayi){ Fonksiyon öncesi a=3
$sayi *= $sayi; Fonksiyon içi sonuç=9
echo "Fonksiyon içi sonuç=$sayi<br>"; Fonksiyon sonrası a=9
return $sayi;
}
$a=3;
echo "Fonksiyon öncesi a=$a <br>";
karesiniAl($a) . "<br>";
echo "Fonksiyon sonrası a=$a <br>";
Örnek 9.4 Parametrede Adres ile Değer Gönderimi
189
Atatürk Üniversitesi Açıköğretim Fakültesi 6
PHP’de İleri Konular
Örnek 9.6’daki örnekte formun metodu get olduğu için Örnek 9.7’deki
hedef dosyanın görüntülendiği tarayıcının adres satırında Şekil 9.2’teki ifade yer
alacaktır:
Şekil 9.2 Get metodu ile gidilen formun hedef sayfasında oluşan adres satırı
190
Atatürk Üniversitesi Açıköğretim Fakültesi 7
PHP’de İleri Konular
Hedef dosyaya gelen form bilgilerinin hepsine foreach döngüsü ile ulaşmak
mümkündür. Örnek 9.8’deki örnekte, formun metodu post olarak belirlenmiştir.
Bu durumda hedef dosyada $_POST global değişkeni kullanılır. Bu metotta adres
satırında gelen bilgilerin yazılmadığına dikkat ediniz.
<?php
echo "Tüm POST değişkenleri<br>";
Metot ne olursa olsun, foreach($_POST as $anahtar =>$deger){
$_REQUEST global echo $anahtar."=".$deger."<br>";
değişkeni ile aynı }
?>
sayıdaki form bilgisine
ulaşabilirsiniz.
Örnek 9.8 Post Metodu ile gönderilmiş Bilgilerin $_POST Değişkeni İle Yazdırılması
if(empty($_POST["abone"]))
echo "Abone bilgileri BOŞ";
else
191
Atatürk Üniversitesi Açıköğretim Fakültesi 8
PHP’de İleri Konular
Fonksiyon Örnek
filter_var(); if(filter_var($_POST["eposta"],
FILTER_VALIDATE_EMAIL)
echo "Eposta adresi doğru biçimdedir";
if(filter_var($_POST["url"],
FILTER_VALIDATE_URL)
echo "URL adresi doğru biçimdedir";
if(filter_var($_POST["sayi"],
FILTER_VALIDATE_INT)
echo "Sayı doğru biçimdedir";
is_numeric()* if(is_numeric(($_POST["sayi"]))
echo "Değer sayısal biçimdedir";
is_string()* if(is_string(($_POST["ad"]))
echo "Ad alani sting türündedir";
preg_match() if(preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]
{2}$/', $_POST["btarihi"]))
echo $_POST["btarihi"]." doğru biçimde
girilmiş.";
* Bu fonksiyonlar sadece tür kontrolü yapar, değer kontrolü yapmaz.
Tablo 9.2’de örnekleri verilen filter_var() komutu ile is_numeric() ve
is_string() fonksiyonlarına benzer başka fonksiyonlar da mevcuttur. Bunun için
https://www.php.net/manual/tr/ref.var.php ve https://www.w3schools.
com/php/php_ref_filter.asp adresindeki komutlar incelenebilir. Tablo 9.daki son
satırda bulunan preg_match komutu ise, bir metnin belirli bir desende olup
olmadığını kontrol eder. Örneğin tarih girdisi için “2022-02-25” gibi dizilmiş rakam
ve tire sembolleri isteniyorsa, örnekteki gibi kontrol sağlanabilir. Bu şekilde
metinlerin desen kontrolü için preg_match komutuna ve desen oluşturmak için
“düzenli ifadeler” (regular pressions)” konusunda Avcı’nın (2013) “PHP ile regular
expression” sayfasına bakabilirsiniz.
192
Atatürk Üniversitesi Açıköğretim Fakültesi 9
PHP’de İleri Konular
sıkıntı çıkarabilir. Bunlardan dolayı Tablo 9.3’teki üç fonksiyon ile girdi içeriğindeki
olası riskli karakterler yok edilebilir.
Tablo 9.3 Riskli Karakterlerin Silinmesi ya da Dönüştürülmesi için Hazır Fonksiyonlar
193
Atatürk Üniversitesi Açıköğretim Fakültesi 10
PHP’de İleri Konular
194
Atatürk Üniversitesi Açıköğretim Fakültesi 11
PHP’de İleri Konular
195
Atatürk Üniversitesi Açıköğretim Fakültesi 12
PHP’de İleri Konular
196
Atatürk Üniversitesi Açıköğretim Fakültesi 13
PHP’de İleri Konular
197
Atatürk Üniversitesi Açıköğretim Fakültesi 14
PHP’de İleri Konular
else
echo "Çerezleri görüntülemek için sayfayı yenileyin";
?><br />
</body>
</html>
ÇEREZLER ve $_COOKIE ÇEREZLER ve $_COOKIE
ÇEREZ bilgileri eklendi. ÇEREZ bilgileri eklendi.
Çerezleri görüntülemek için Sayfa yeniden
dilTercihi1=TR
sayfayı yenileyin yüklendiğinde dilTercihi2=EN
Örnek 9.13 Çerez Değişkeni Eklemek ve Kullanmak
Bireysel Etkinlik
198
Atatürk Üniversitesi Açıköğretim Fakültesi 15
PHP’de İleri Konular
199
Atatürk Üniversitesi Açıköğretim Fakültesi 16
PHP’de İleri Konular
200
Atatürk Üniversitesi Açıköğretim Fakültesi 17
PHP’de İleri Konular
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi harici bir PHP dosyasını mevcut sayfaya eklemek
için kullanılır?
a) require
b) define
c) isset
d) request
e) header
201
Atatürk Üniversitesi Açıköğretim Fakültesi 18
PHP’de İleri Konular
Cevap Anahtarı
1.a, 2.e, 3.c, 4.b, 5.d, 6.c, 7.e, 8.b, 9.a, 10.b
202
Atatürk Üniversitesi Açıköğretim Fakültesi 19
PHP’de İleri Konular
YARARLANILAN KAYNAKLAR
Avcı, M. (2013, 8 11). PHP ile regular expression. 1 18, 2022 tarihinde PHP
Serüvenleri: https://www.phpr.org/php-ile-regular-expression-
regex/#more-2386 adresinden alındı
HP Group. (2022, 1 11). PHP Kılavuzu. PHP: Hypertext Preprocessor:
https://www.php.net/manual/tr/ adresinden alındı
Şahin, Y. L. (2016). PHP'ye Giriş. M. Fırat içinde, İnternet Tabanlı Programlama (s.
303). Eskişehir: Anadolu Üniversitesi. https://ets.anadolu.edu.tr/
storage/nfs/WTK210U/ebook/WTK210U-17V1S1-8-0-1-SV1-ebook.pdf
adresinden alındı
W3 Schools. (2022, 1 11). PHP Tutorial. W3Schools Online Web Tutorials:
https://www.w3schools.com/php/default.asp adresinden alındı
203
Atatürk Üniversitesi Açıköğretim Fakültesi 20
PHP: VERİ TABANI
10
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP: Veri Tabanı
Veri İşleme
(Transaction)
MySQL Tablosu
Oluşturma
MySQL Tablosundan
Veri Alma
MySQL Tablosundan
Veri Silme
GİRİŞ
Php, dinamik web sayfaları oluşturmak için kullanılabilen, sunucu tarafında,
html'ye gömülü bir betik dilidir. Çoğu işletim sistemi ve web sunucusu için
mevcuttur. Php, açık kaynak kodlu olanlar da dâhil olmak üzere en yaygın olan
20'den fazla veri tabanını destekler. Bu veri tabanları arasında günümüzde
kullanılan ve pek çok yaygın web sitelerinin bel kemiği olan mysql, postgresql ve
oracle gibi ilişkisel veri tabanı sistemleri de vardır.
internette faydalandığımız hizmetlerin çoğu bir web sunucusu üzerinde
çalışan veri tabanı uygulamaları tarafından sağlanmaktadır. Web tabanlı e-posta,
çevrimiçi alışveriş, forumlar ve ilan panoları, kurumsal web siteleri, spor ve haber
portallarının tümü veri tabanına dayalıdır. Modern bir web sitesi oluşturmak için
PHP'de programlama bir veri tabanı uygulamasının geliştirilmesi gerekir.
sunucu tarafında
yapılır, yorumlanır ve Bu ünitede uygulamalar oluşturmak için web ve veri tabanlarını bir araya
çıktısı HTML olarak bir getirmenin oldukça popüler, kolay ve düşük maliyetli bir yolu anlatılacaktır. Bu
tarayıcıda görüntülenir. çözümlerde kullanılan en popüler veri tabanı yönetim sistemi, üreticisi mysql ab
tarafından açık kaynak lisansı altında dağıtılan, çok hızlı ve kullanımı kolay bir
sistem olan mysql'dir. Apache web sunucusu (burada anlatılan php kodları diğer
web sunucularıyla da çalışsa da, bu ünitede apache'yi varsayıyoruz) ve mysql gibi
bir web sunucusuyla, bir web veri tabanı uygulaması geliştirmek için ihtiyacınız
olan şeylerin çoğuna sahip olursunuz.
Bu ünitede php'den veri tabanlarına nasıl erişileceği, nasıl veri getirileceği,
nasıl saklanacağı ve nasıl silineceği üzerinde durulacaktır. İlişkisel veri tabanı
kavramına değinilecek ve veri tabanına özgü sayısız uzantı yerine herhangi bir veri
tabanına erişmek için aynı işlevlerin kullanılmasını sağlayan yerleşik php veri
nesneleri (pdo) sistemi öğretilecektir.
unutmayınız. Diğer taraftan, uygulamanız herhangi bir tür genel olmayan SQL
kullanıyorsa, sorgularınızı bir veri tabanından diğerine dönüştürmek gerektiğinde
önemli işler yapmanız gerekir. Bu ünitede veri tabanı erişimine yönelik her iki
yaklaşıma da kısaca değineceğiz ve ardından PHP aracılığıyla veri tabanının
içeriğini yönetmek için bazı SQL komutlarını öğreneceğiz.
SQL Komutları
INSERT INTO kitaplar VALUES (null, 4, 'Ben, ROBOT', '0-553-29438-5', 1950, 1)
Tablo 10.2’deki SQL komutu da tabloya yeni bir satır ekler, fakat bu sefer
alan isimlerini de kullanır.
Tablo 10.2. SQL Alan İsimleri ile Satır Ekleme Komutu Örneği
SQL Komutları
INSERT INTO kitaplar (yazar_no, baslik, ISBN, yayin_yili, mevcut) VALUES (4, 'Ben,
ROBOT', '0-553-29438-5', 1950, 1)
1979’da yayınlanan bütün kitapları eğer varsa silmek için Tablo 10.3’deki
SQL komutu kullanılır.
Tablo 10.3. SQL Kayıt Silme Komutu Örneği
SQL Komutları
DELETE FROM kitaplar WHERE yayin_yili = 1979
Kökler adlı kitabın yayın yılını 1983 olarak değiştirmek için Tablo 10.4’deki
SQL komutu kullanılır.
Tablo 10.4. SQL Kayıt Güncelleme Komutu Örneği
SQL Komutları
SQL’de en yaygın
kullanılan komutlar, UPDATE kitaplar SET yayin_yili = 1983 WHERE baslik = 'Kökler'
SELECT, INSERT, Yalnızca 80’li yıllarda yayınlanan kitapları bulmak için Tablo 10.5’deki SQL
UPDATE ve DELETE komutu kullanılır.
komutlarıdır.
Tablo 10.5. SQL Kayıt Filtreleme Komutu Örneği
SQL Komutları
SELECT * FROM kitaplar
WHERE yayin_yili > 1979 AND yayin_yili < 1990
Tablo 10.6’da görüldüğü gibi belirli alanları listelemek mümkündür.
Tablo 10.6. SQL Belirli Alanlar Listeleme Komutu Örneği
SQL Komutları
SELECT baslik, yayin_yili FROM kitaplar
WHERE yayin_yili > 1979 AND yayin_yili < 1990
Birden fazla tabloyu birleştiren sorgular oluşturabilirsiniz. Örneğin;
yazar_no ve adi alanlarına sahip olan yazarlar adında bir tablo olduğunu
düşünelim. Tablo 10.7’de görüldüğü gibi, kitaplar adlı tabloyla yazarlar adlı
tabloyu birleştirerek kitapları kimin yazdığını listeleyebiliriz.
SQL Komutları
SELECT yazarlar.adi, kitaplar.baslik FROM kitaplar, yazarlar
WHERE yazarlar.yazar_no = kitaplar.yazar_no
Yukarıdaki sorguyu, Tablo 10.8’de gösterildiği gibi takma isimler (alias)
kullanarak da yapabilirsiniz.
Tablo 10.8. SQL Çoklu Tablolarda Takma İsim Kullanma Komutu Örneği
SQL Komutları
SELECT y.adi, k.baslik FROM kitaplar k, yazarlar y
WHERE y.yazar_no = k.yazar_no
php.ini Dosyası
extension=php_pdo.dll
extension=php_pdo_mysql.dll
Bağlantı Oluşturma
PDO için gereken ilk şey, söz konusu veri tabanıyla bağlantı kurmanız ve bu
bağlantıyı, Tablo 10.10’daki program kodunda olduğu gibi bir bağlantı
değişkeninde tutmanızdır.
Tablo 10.10. PDO Bağlantı Değişkeni Oluşturma
PHP Komutları
$vt = new PDO ($dsn, $kullanici, $sifre);
$dsn; veri kaynağı adını temsil eder, diğer iki parametre veri kaynağında
Kullanıcı kodu ve Şifre
parametrelerine yetki sahibi bir kullanıcı kodu ve şifresi olarak atanmalıdır. Örneğin bir MySQL
değişken atanması, bağlantısı için Tablo 10.11’deki kodu yazarsınız.
sonraki aşamalarda Tablo 10.11. PDO-MySQL Bağlantısı Oluşturma Örneği
tekrar kullanılması
açısından fayda sağlar. PHP Komutları
$vt= new PDO("mysql:host=localhost;vtadi=kutuphane", "deneme", "abc123");
PHP Komutları
$vt->query("UPDATE kitaplar SET yazar_no = 4 WHERE yayin_yili = 1982");
Yukarıdaki kod sadece kitaplar tablosunu günceller ve sorguyu bitirir. Hazır
deyimler (prepared statements) kullanmıyorsanız, PDO aracılığıyla veri tabanına
genellikle sonuç döndürmeyen basit SQL komutlarını (UPDATE, DELETE, INSERT)
bu şekilde gönderebilirsiniz.
PHP Komutları
$deyim = $vt->prepare( "SELECT * FROM kitaplar");
$deyim->execute();
$deyim = null;
Hazır deyimin diğer bir özelliğini gösteren örnek de Tablo 10.14’de
verilmiştir.
Tablo 10.14. PDO ve Hazır Deyimler İkinci Örneği
PHP Komutları
$deyim = $vt->prepare("INSERT INTO kitaplar (yazar_no, baslik, ISBN,
yayin_yili)"
. "VALUES (:yazar_no, :baslik, :ISBN, :yayin_yili)");
$deyim->execute(array(
'yazar_no' => 4,
'baslik' => "Kuruluş",
'ISBN' => "0-553-80371-9",
'yayin_yili' => 1951)
);
Ancak bu sadece daha iyi anlaşılması için yapılmıştır; yer tutucu adları size
anlamlı gelen her şey olabilir. $deyim->execute() komutunu çalıştırarak yer
tutucularını bu sorguda kullanmak istediğimiz gerçek verilerle değiştiririz. Hazır
$deyim ve $vt deyimlerin avantajlarından biri, aynı SQL komutunu çalıştırabilmeniz ve her
değişkenleri, programcı seferinde diziden farklı değerler geçirebilmenizdir. Aynı hazır deyimi herhangi bir
tanımlı isimlerdir. isimlendirme yapmadan, yer tutucu isimler yerine sadece “?” ile yazarak da
Değişkenlere isim tanımlayabilirsiniz. Önceki kodun Tablo 10.15’deki varyasyonuna bakalım:
verme kurallarına
uygun şekilde istenilen Tablo 10.15. PDO ve Hazır Deyimleri “?” ile Kullanım Örneği
isim verilebilir. PHP Komutları
$deyim = $vt->prepare("INSERT INTO kitaplar (yazar_no, baslik, ISBN,
yayin_yili)"
. "VALUES (?,?,?,?)");
PHP Komutları
try {
$vt = new PDO("mysql:host=localhost;vtadi=banka_sistemi", "ahmetcan",
"abc123"); // Bağlantı başarılı
}
catch (Exception $error) {
die("Bağlantı hatası: " . $error->getMessage());
}
try {
$vt ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$ vt ->beginTransaction();
$ vt ->exec("INSERT INTO hesaplar (hesap_no, miktar) VALUES (23, '5000')" );
$ vt ->exec("INSERT INTO hesaplar (hesap_no, miktar) VALUES (27, '-5000')" );
$ vt ->commit();
}
catch (Exception $error) {
$ vt ->rollback();
echo "Veri işleme yapılamadı: " . $error->getMessage();
}
Veri İşlemeyi desteklemeyen bir veri tabanında commit() veya rollback()'i
çağırırsanız, yöntemler DB_ERROR hatası döndürür.
PHP ve MySQL
PHP ile bağlantı yapmanın iki çeşidi olduğunu bu ünitenin başında
belirtmiştik. Bunlardan birincisi PDO (PHP Data Objects) bağlantı çeşidi, diğeri ise
veri tabanına özgü bir eklenti kullanmak idi. MySQL veri tabanına özgü
eklentimiz mysqli() fonksiyonudur. Bu noktada dikkat edilmesi gereken unsur;
mysqli() fonksiyonunun sadece MySQL veri tabanına bağlantı sağlayabildiği,
PDO’nun ise esnek yapıya sahip olup çoğu yaygın veri tabanına bağlanabildiği
ancak performans olarak mysqli() fonksiyonunun gerisinde kalabildiğidir. Bu
bağlantı çeşitlerinden hangisini kullanacağınıza karar vermek size kalmış bir
seçimdir. Bu ünite kapsamında bundan sonra MySQL – PHP bağlantılarında
mysqli() fonksiyonunun kullanımı tercih edilecektir.
Başka bir PHP fonksiyonu olan close() kullanılarak istendiği zaman MySQL
veri tabanıyla bağlantı kesilebilir. Söz dizimi Tablo 10.19’daki gibidir.
PHP betiğinde close() Tablo 10.19. close() Fonksiyonunun Kullanımı
fonksiyonu
kullanılmazsa, betik PHP Komutları
çalışması sonlandığında $mysqli -> close();
bağlantı otomatik
Tablo 10.20’deki HTML kodlarına gömülü PHP program kodu; mysqli()
olarak yok edilir.
fonksiyonunu kullanarak MySQL veri tabanına bağlantı sağlar ve kapatır.
Tablo 10.20. PHP Kodu ile MySQL Veri Tabanına Bağlantı Örneği
HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Sunucusuna Bağlantı</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$mysqli = new mysqli($host, $kullanici, $sifre);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$mysqli->close();
?>
</body>
</html>
PHP Komutları
$mysqli->query($sql, $sonucmodu)
mysqli() fonksiyonu
mysql_query() mysqli->query() fonksiyonunun parametreleri Tablo 10.22’de açıklanmıştır.
fonksiyonun Tablo 10.22. $mysqli->query() Fonksiyonunun Parametreleri
geliştirilmiş halidir.
mysqli ile mysql Sıra Parametre Durum Açıklama
kelimelerindeki fark
olan “i” harfi, İngilizce MySQL’de veri tabanı oluşturmak için
1 $sql Zorunlu
“improved” yani SQL sorgusuna ihtiyaç olacaktır.
“geliştirilmiş”
MYSQLI_USE_RESULT (sorgulama
kelimesinin baş harfini
temsil etmektedir. sonucundaki tüm sonuçları
döndürmez) veya
2 $sonucmodu İsteğe bağlı MYSQLI_STORE_RESULT (sorgulama
sonucundaki tüm sonuçları döndürür)
sabitleri verilir. Varsayılan olarak
MYSQLI_STORE_RESULT kullanılır.
HTML-PHP Entegrasyonu
<html>
<head><title>MySQL Veri Tabanı Oluşturma</title></head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$mysqli = new mysqli($host, $kullanici, $sifre);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
Bireysel Etkinlik
• php_mysql_vtsil.php adında bir dosya oluşturarak yukarıdaki kodu
içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"EGITIM veri tabanı silindi." mesajlarını aldığınızdan emin olunuz.
Tablo 10.27. mysqli_select_db() Fonksiyonu ile Mevcut Bir Veri Tabanını Seçme
HTML-PHP Entegrasyonu
<html>
<head>
<title> MySQL Veri Tabanı Seçme</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$baglanti = mysqli_connect($host, $kullanici, $sifre);
if(! $baglanti ) {
die('Bağlantı hatası: ' . mysqli_error($baglanti));
}
echo 'Bağlantı kuruldu.<br />';
mysqli_close($baglanti);
?>
</body>
</html>
Bireysel Etkinlik
MySQL’de oluşturulan
tabloları listelemek için
SHOW TABLES;
Şekil 10.3. MySQL Veri Tabanı Seçme Sonuç Ekranı
komutu kullanılır.
MySQL Tablosu Oluşturma
SQL komutlarında “CREATE TABLE <TABLO_ADI> (<ALAN_ADI,
ALAN_TÜRÜ>)” yapısı, yeni bir tablo oluşturmak için kullanılır. Oluşturulacak olan
tablo ismiyle aynı isimde başka bir tablonun mevcut olmamasına dikkat
edilmelidir. Bu komutun detaylı açıklamaları için https://dev.mysql.com web/doc
web adresini ziyaret ediniz.
PHP Komutları
<html>
<head>
<title> MySQL Tablosu Oluşturma</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$mysqli->close();
?>
</body>
</html>
Burada, birkaç öğenin açıklanması gerekmektedir:
Alana NULL değerinin girilmesini engellemek için “NOT NULL” kullanılır. Bu
nedenle, bir kullanıcı NULL değerine sahip bir kayıt oluşturmaya çalışırsa,
MySQL bir hata verir.
AUTO_INCREMENT niteliği, MySQL'e bir sonraki uygun numarayı
MySQL’de oluşturulan
tabloların detayını eğitim_no alanına eklemesini söyler.
listelemek için; Anahtar Kelime PRIMARY KEY, bir sütunu birincil anahtar olarak
DESCRIBE tanımlamak için kullanılır. Birincil anahtarı tanımlamak için virgülle
<TABLO_ADI>; komutu ayrılmış birden çok sütun kullanılabilir.
kullanılır.
HTML-PHP Entegrasyonu
<html>
<head><title> MySQL Tablo Silme</title></head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$mysqli->close();
?>
</body>
</html>
Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre
kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"egitim_tbl tablosu silindi." mesajlarını aldığınızdan emin olunuz.
HTML-PHP Entegrasyonu
<html>
<head><title>MySQL Veri Tabanına Veri Ekleme</title></head>
<body>
<?php
if(isset($_POST['ekle'])) {
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$egitim_baslik = addslashes ($_POST['egitim_baslik']);
$egitim_veren = addslashes ($_POST['egitim_veren']);
$kayit_tarihi = $_POST['kayit_tarihi'];
$sql = "INSERT INTO egitim_tbl ".
" (egitim_baslik, egitim_veren, kayit_tarihi) ".
"VALUES ('$egitim_baslik','$egitim_veren','$kayit_tarihi')";
if ($mysqli->query($sql)) {
printf("Kayıt başarı ile eklendi.<br />");
}
if ($mysqli->errno) {
printf("Tabloya kayıt eklenemedi: %s<br />", $mysqli->error);
}
$mysqli->close();
} else {
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
<tr>
<td width = "250">Kurs Başlığı</td>
<td><input name = "egitim_baslik" type = "text" id =
"egitim_baslik"></td>
</tr>
addslashes(): Özel <tr>
karakterlerin önüne <td width = "250">Eğitmen Adı</td>
ters bölüm ( \ ) <td><input name = "egitim_veren" type = "text" id =
yerleştirir. Sebebi, SQL "egitim_veren"></td>
enjeksiyonunu ve </tr>
PHP’deki olası karakter <tr>
hatalarını <td width = "250">Kayıt Tarihi [ yyyy-mm-dd ]</td>
engellemektir. <td><input name = "kayit_tarihi" type = "text" id = "kayit_tarihi"></td>
</tr>
<tr>
<td width = "250"> </td>
<td></td>
</tr>
<tr>
<td width = "250"> </td>
<td><input name = "ekle" type = "submit" id = "ekle" value = "Kurs
Ekle"></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
Tablo 10.30’daki örnekte; egitim_no alanını SQL sorgusuna eklemedik,
çünkü bu alan MySQL tarafından otomatik verilecektir.
Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda Kurs Başlığı, Eğitmen Adı
ve Kayıt Tarihi alanlarını doldurarak "Kurs Ekle" düğmesini
tıklayınız.
• Sonuç ekranında "Bağlantı kuruldu." ve "Kayıt başarı ile eklendi."
mesajlarını aldığınızdan emin olunuz.
HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Tablosundan Veri Alma</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$sql = "SELECT egitim_no, egitim_baslik, egitim_veren, kayit_tarihi FROM
egitim_tbl";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
printf("No: %s, Başlık: %s, Eğitmen: %s, Tarih: %d <br />",
$row["egitim_no"],
$row["egitim_baslik"],
$row["egitim_veren"],
$row["kayit_tarihi"]);
}
} else {
printf('Kayıt bulunamadı.<br />');
}
mysqli_free_result($result);
$mysqli->close();
?>
</body>
</html>
Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve No,
Başlık, Eğitmen ve Tarih başlıkları ile birlikte kayıtlı olan verilerin
ekrana geldiğinden emin olunuz.
Bir veya daha fazla alan aynı sorguda güncellenebilir.
WHERE cümlesi kullanılarak herhangi bir koşul belirtilerek kısmi veri
güncellemesi yapılabilir.
Tek seferde bir tablodaki birden fazla kayıt güncellenebilir.
MySQL veri tabanında, bir tabloda nasıl veri güncelleneceğini gösteren
örnek bir PHP program kodu Tablo 10.32’de verilmiştir.
Tablo 10.32. MySQL VTYS’de Veri Güncelleme
HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Tablosunda Veri Güncelleme</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
printf("No: %s, Başlık: %s, Eğitmen: %s, Tarih: %d <br />",
$row["egitim_no"],
$row["egitim_baslik"],
$row["egitim_veren"],
$row["kayit_tarihi"]);
}
} else {
printf('Kayıt bulunamadı.<br />');
}
mysqli_free_result($result);
$mysqli->close();
?>
</body>
</html>
Bireysel Etkinlik
• php_mysql_veriguncelle.php adında bir dosya oluşturarak
yukarıdaki kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu.",
"egitim_tbl tablosu güncellendi." ve No, Başlık, Eğitmen ve Tarih
başlıkları ile birlikte kayıtlı olan verilerin ekrana geldiğinden emin
olunuz.
WHERE cümlesini kullanarak herhangi bir koşul belirtilebilir.
WHERE cümlesi belirtilmezse, verilen MySQL tablosundaki tüm kayıtlar
silinir.
Tek seferde tablodaki birden fazla kayıt silinebilir.
MySQL veri tabanında, bir tablodan nasıl veri silineceğini gösteren örnek bir
PHP program kodu Tablo 10.33’de verilmiştir.
Tablo 10.33. MySQL VTYS’de Veri Silme
HTML-PHP Entegrasyonu
<html>
<head>
<title> MySQL Tablosundan Veri Silme</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);
if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi PHP’nin bütün veri tabanı motorlarına
erişebilmesi için kullandığı kütüphanelerden biridir?
a) PDO()
b) mysqli()
c) sqlsrv_connect()
d) oci_connect()
e) pg_connect()
2. Aşağıdakilerden hangisi SQL söz dizimi olan Veri İşleme Dilinde kullanılan
eylem veya fiil kelimelerinden birini kapsar?
a) CREATE
b) DROP
c) UPDATE
d) ALTER
e) TRUNCATE
«Bazı ilişkisel veri tabanı sistemleri, bir dizi veri tabanı değişikliklerini aynı
anda kaydedilebildiği veya uygulanmadan geri alınabildiği özelliğe
sahiptir.»
4. Yukarıda bahsedilen veri tabanı özelliği aşağıdakilerden hangisidir?
a) Veri Güncelleme (Update)
b) Veri İşleme (Transaction)
c) Veri Silme (Delete)
d) Veri Seçme (Select)
e) Veri Ekleme (Insert)
7. Aşağıdaki SQL Sorgularından hangisi EGITIM adında yeni bir veri tabanı
oluşturur?
a) DROP DATABASE EGITIM
b) USE EGITIM
c) CREATE DATABASE EGITIM
d) TRUNCATE DATABASE EGITIM
e) ALTER DATABASE EGITIM
Cevap Anahtarı
1.a, 2.c, 3.d, 4.b, 5.e, 6.a, 7.c, 8.c, 9.e, 10.b
YARARLANILAN KAYNAKLAR
Gilmore, W.J. (2010). Beginning PHP and MySQL (4.Baskı), New York: Apress
Tatroe K., MacIntryre P. ve Lerdorf R. (2013). Programming PHP – PHP
Programlama (3. Baskı). California: O’Reilly
Tutorialpoints. LEARN PHP:simply easy learning–PHP Öğrenin: basit kolay
öğrenim. 15.12.2021 tarihinde https://www.tutorialspoint.com/php/
adresinden erişildi.
W3 Schools. PHP Tutorial. 20.12.2021 tarihinde
https://www.w3schools.com/php/ adresinden erişildi.
11
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Python Programlama Diline Giriş
Microsoft
Windows İçin
Python Kurulum
Programlama
Dili macOS İçin
Kurulum
PYTHON PROGRAMLAMA DİLİNE GİRİŞ
Kurulum
Linux İçin
Kurulum
İlk Python
Programınız
Söz Dizimi
Sayı (Number)
Değişkenler
Metin (String)
Temel Bilgiler
Demet (Tuple)
Operatörler
Sözlük (Dictionary)
Karar Verme
Döngüler
GİRİŞ
Python, 1989 yılında Guido Van Rossum tarafından oluşturulmuş, sunucu
taraflı, açık kaynak kodlu, diğer programlama dillerine göre öğrenmesi daha kolay,
üst seviye bir bilgisayar programlama dilidir. Yapay zeka ve makine öğreniminde,
karar-destek sistemlerinde, modellemede (simülasyon), veri analizinde, görsel
programlamada, uygulama geliştirmede (guı, apı, dosya dizinleri okuma ve
Python kelimesini
[paytın] şeklinde oluşturma, blok zincir uygulamaları, ses ve video uygulamaları vb.), veri tabanı
telaffuz edebilirsiniz. uygulamalarında, web programlamada, bilgisayar oyunu geliştirmede, finans
işlemlerinde, tasarım programlarında, akademik çalışmalarda, astronomide, hatta
başka programlama dili oluşturmak gibi akla gelebilecek pek çok farklı alanda
kullanılabilmektedir. Ayrıca python ile kullanıma hazır paket programlar
geliştirilebilmektedir.
Python programlama dili, pek çok farklı işletim sistemi ve donanım üzerinde
çalışabilir. Gnu/linux, microsoft windows, mac os x, as/400, beos, morphos, ms-
dos, os/2, os/390, z/os, riscos, s60, solaris, vms, windows ce, hp-ux, ios ve android
gibi pek çok ortamda python uygulamaları geliştirilebilmektedir. Ayrıca herhangi
bir ortamda yazılan bir python programı, üzerinde hiçbir değişiklik yapılmadan
veya ufak değişikliklerle başka ortamlarda da çalıştırılabilir.
Python, ingilizce söz dizimine benzer yapıdadır. Programcılara diğer pek çok
programlama diline göre daha kısa programlama kodlarıyla yazım imkânı sağlar. C
ve c++ gibi dillerin aksine derleme (compile) yerine yorumlama (interpreter)
yoluyla çalışır ve bu sayede çok daha hızlı program üretilebilir. Python, hem
yöntemsel (procedural), hem nesne yönelimli (object-oriented), hem de
fonksiyonel (functional) özellikleri destekler.
2022 yılı, ocak ayı itibariyle en yeni ana sürümü python 3’tür. Ancak python
2 sürümünün de güvenlik problemleri dışında güncellenmemesine rağmen bu
tarih itibariyle yoğun olarak kullanıldığı gözlenmektedir.
ABC programlama dili,
basıc, pascal ve awk PYTHON PROGRAMLAMA DİLİ
programlama dilleri
yerine kullanılmak Python programlama dili, Amsterdam’daki Hollanda Bilimsel Araştırma
amacıyla oluşturulmuş, Örgütü’nün bir parçası olan Centrum Wiskunde & Informatica adlı enstitüde ABC
etkileşimli, Programlama dilinin alternatifi olarak tasarlanmıştır. Python’ın 1.0 versiyonu Ocak
yapılandırılmış, üst 1994 kullanıma sunulmuş, ara sürümlerden sonra Ekim 2000 yılında 2.0
düzey ve genel amaçlı versiyonuna geçilmiştir. Aralık 2008 yılında önceki sürümleriyle tam uyumlu
bir programlama diliydi
olmayan 3.0 versiyonu piyasaya sürülmüştür. Aralık 2021 itibariyle Python’ın resmi
ve aynı zamanda
web sitesi olan python.org’da 3.10 versiyonu kullanıcıların erişimine açılmıştır.
entegre geliştirme
ortamıydı. Tablo 11.1. Python Sürüm Bilgileri
Bilgisayar programcılığı ile ilgili kullanıcı odaklı popüler bir soru cevap sitesi
olan stack overflow’dan alınan istatiksel verilere göre programlamaya yönelimde
python, şekil 11.2’de gösterildiği gibi ilk sırada yer almaktadır.
Bireysel Etkinlik
sürüngenlerinden biri sayılan piton yılanına karşılık gelir.
Ancak Python programla dilinin ismi bu hayvana ithafen
verilmemiştir. Bu dilin yaratıcısı olan Guido Van Rossum'un
bu ismi neden verdiğini siz araştırınız.
KURULUM
Python programlamasını öğrenebilmek için yazılımın kurulabileceği işletim
sistemine sahip bir bilgisayara ihtiyaç vardır. Bu bilgisayarın genel olarak minimum
aşağıdaki özelliklerde olması önerilmektedir:
Şekil 11.5. Python 3.10 64 Bit Windows 10 İşletim Sistemine 4 Adımda Kurulumu
Python programlama
dilinin kullanıldığı
dosyalar, uzantısı py
olacak şekilde
Şekil 11.9. IDLE Ekranında İlk Program Komutu: Merhaba Dünya
oluşturulur.
Komut yazıldıktan sonra üç adımlık bir döngü oluşur:
Şekil 11.11. Boş Betim Dosyasına Python Dili İle “Merhaba Dünya” Yazma
Şekil 11.12. IDLE İle Açılan Boş Sayfaya Bir İsim Verip Kaydetme
Şekil 11.13. Python Dili İle Betim Dosyasından Ekrana “Merhaba Dünya” Yazma
TEMEL BİLGİLER
Python programlama dilinin temel komutlarına geçmeden bilinmesi
gereken bazı temel özelliklerden bahsetmekte fayda olacaktır.
Örnek
Söz Dizimi
Python kodu çalıştırmanın etkileşimli ara yüz (komut satırı) ve betimleme
ara yüzü olmak üzere iki metodu olduğunu daha önce öğrenmiştik. Bunlardan
birincisi Python komut satırına direk kod yazıp yürütmek, diğeri de “.py” dosya
uzantılı dosyanın içine kod yazıp Windows veya Linux komut satırında Python
yorumlayıcısıyla çalıştırmak idi.
Girinti, bir kod satırının başındaki boşlukları ifade eder. Diğer programlama
dillerinde kodların yazıldığı girintiler programcıya kolaylık sağlamak ve
okunabilirliğini artırmak için kullanılır. Python programlama dilinde ise girinti çok
önemlidir. Python, bir kod bloğunu belirtmek için girinti kullanır. Tablo 11.13’de
görüldüğü gibi girinti verilmeyen ilk program kodu hata ile sonuçlanmış, sonraki
girintili sonuç ise program sonucunu ekrana hatasız basmıştır.
print (sayac)
print (mesafe)
print (ad)
Veri Türleri
Bellekte saklanan veri farklı türlerde olabilir. Örneğin, bir kişinin yaşı sayısal
bir değer olarak kaydedilir fakat adresi alfanümerik (hem karakter, hem sayı, hem
de bazı noktalama işaretleri) olarak saklanır. Python, işlem tanımlamak veya
depolamak için kullanılan çeşitli standart veri türlerine sahiptir. Bu veri türleri ve
örnekleri Tablo 11.11’de verilmişti.
Python, 5 standart veri türüne sahiptir:
• Sayı (Number)
• Metin (String)
• Liste (List)
• Demet (Tuple)
• Sözlük (Dictionary)
Sayı (Number)
Sayı (number) veri türü, sayısal değerleri depolar. Bir nesneye sayısal değer
atandığı anda sayı türünde bir değişken oluşturulmuş olur. Bazı sayısal değişken
atama örnekleri Tablo 11.18’de gösterilmiştir.
Tablo 11.18. Sayı Türünde Değişken Oluşturma
c = 1024.0
(𝟐𝟐𝟏𝟏𝟏𝟏 =1024 olduğu
için)
//= Operatörler üzerinde tabana yuvarlama c //= a ve
bölüm (floor division) işlemi gerçekleştirir ve c = c // a aynıdır.
sol işlenene değer atar. c = 102.0
(1024.0 / 10
=102.4 tabana
yuvarlanır ve
sonuç 102.0 olur)
Tablo 11.27. Python’da, d = true ve e = false Değerleri için Mantıksal Operatörler
Python programlama dili, sıfır olmayan veya boş olmayan tüm değerleri
TRUE (DOĞRU), sıfır olan veya boş olan tüm değerleri FALSE (YANLIŞ) olarak kabul
eder. Python, aşağıdaki türde karar verme ifadelerini destekler:
• if yapısı; bir “if” ifadesi, onu takip eden bir veya daha fazla ifadenin olduğu
bir doğru/yanlış ifadesinden (boolean expression) oluşur. if ifadesinin bazı
kullanım örnekleri Tablo 11.28’de verilmiştir.
• if .. else yapısı; bir “if” ifadesini, ifade FALSE (YANLIŞ) olduğu durumlarda
isteğe bağlı bir “else” ifadesi izleyebilir. İf .. else yapısının bazı kullanım
örnekleri Tablo 11.29’da verilmiştir.
Tablo 11.29. Python’da if .. else Kullanımı
• İç içe ifadeler; bir “if” veya “else if” ifadesi, başka bir “if” veya “else if”
ifadesi veya ifadeleri içinde kullanılabilir. İç içe ifadelerin bazı kullanım
örnekleri Tablo 11.30’da verilmiştir.
Tablo 11.30. Python’da if .. else İçinde Başka if .. else Kullanımı
Döngüler
Genel olarak, ifadeler sırayla yürütülür. Bir fonksiyonda, önce ilk ifade
yürütülür, ardından ikincisi, üçüncüsü, .. şeklinde devam eder. Bir kod bloğunu
tekrar tekrar çalıştırmanız gereken durumlar olabilir. Döngüler, bir ifadeyi veya
ifade grubunu birden çok yürütmemize izin verirler. Şekil 11.15’deki şema bir
döngü yapısını göstermektedir.
• İç içe geçmiş döngüler; Bir veya daha fazla döngü herhangi bir while veya
for döngüsü içinde kullanılabilir. İç içe geçmiş döngü örneği Tablo 11.33’de
verilmiştir.
Tablo 11.33. Python’da For Döngüsünün İç İçe Kullanımı
DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi Python programlama dilinin özelliklerinden
değildir?
a) Pek çok farklı işletim sistemi ve donanım üzerinde çalışabilir.
b) Derleme yerine yorumlama yoluyla çalışır.
c) Yöntemsel, nesne yönelimli ve fonksiyonel özellikleri destekler.
d) Dennis Ritchie tarafından 1989 yılında oluşturulmuştur.
e) İngilizce söz dizimine benzer yapıdadır.
I. MacOS
II. Linux
III. Microsoft Windows
IV. Android
V. OS/2
2. Python programlama dili yukarıdaki işletim sistemlerinin hangisinde
çalışabilir?
a) I, II, V
b) I, II, III, IV
c) I, III, IV, V
d) II, III, IV, V
e) I, II, III, IV, V
5. Python programlama dilinin kurulum ile birlikte gelen etkileşimli ara yüzü
aşağıdakilerden hangisidir?
a) IDLE
b) NETBEANS
c) ECLIPSE
d) VISUAL STUDIO
e) PYCHARM
Cevap Anahtarı
1.d, 2.e, 3.b, 4.b, 5.a, 6.c, 7.d, 8.a, 9.e, 10.c
YARARLANILAN KAYNAKLAR
Luts M. (2011). Programming Python (4. Baskı). California: O’Reilly
Mayer, J. (2020). Python ONE-LINERS (1.Baskı), California: Starch Press
Tutorialpoints. LEARN PYTHON: simply easy learning–Python Öğrenin: basit kolay
öğrenim. 24.01.2022 tarihinde https://www.tutorialspoint.com/
python3/index.htm adresinden erişildi.
W3 Schools. PYTHON Tutorial. 20.01.2022 tarihinde
https://www.w3schools.com/python/ adresinden erişildi.
• Python ve Web
• Python ve IIS
İÇİNDEKİLER
etkileşimini,
• Internet Information Services
üzerine kurulumunu,
• Python ile web uygulaması
geliştirmeyi,
• Python'ın hazır mikro
çerçeveleri ile hızlı web
uygulamaları oluşturmayı
öğreneceksiniz.
ÜNİTE
12
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Python ile Web Programlama
Flask Nedir?
route() Dekoratörü
Python ve Flask
Değişken Dönüştürme
Benzersiz URL'ler
(Werkzeug)
url_for() Dekoratörü
Şablonlar (Templates)
GİRİŞ
Web geliştirmek için çok farklı programlama dilleri mevcuttur ve her geçen
gün daha fazlası eklenmektedir. Bu kadar çok programlama diline sahip olmamızın
ilk ve belki de en büyük nedeni, teknolojinin sürekli gelişmesidir. Daha fazla
teknoloji ortaya çıktıkça ve geliştikçe, bu teknolojiler için yazılım üretebilecek daha
fazla araca ihtiyaç duyulmaktadır. Diğer bir sebebi, her uygulama türünün farklı
türde donanım veya işletim sistemine ihtiyaç duyabilmesidir. Örneğin; mobil
uygulama geliştiricileri, Android uygulamaları yapmak için Java ve Kotlin'i veya iOS
uygulamaları yapmak için Swift'i kullanır. Diğer bir sebep ise her geliştiricinin
kendine uygun bir dil istemesidir. Örneğin; bazı geliştiriciler, süper hızlı ve
performanslı bir programlama dili isterken bazıları da haftalar değil birkaç gün
içinde uygulamalarını oluşturabilecekleri bir programlama dilini tercih ederler. Bu
noktada önemli olan, programlamaya başlarken yapılacak olan işin hangi dile
uygun olduğuna karar verilmesidir.
Python, PHP, C++, Ruby, Java ve C#, web uygulama geliştirmede en yaygın
kullanılan yüksek seviye programla dillerinden bazılarıdır. Chrome, Firefox, Opera
ve Microsoft Edge gibi yaygın internet tarayıcıları bu programlama dillerini direk
çalıştıramaz. Örneğin, Python sunucu taraflı çalışan bir programlama dilidir.
Netscape firmasının Python ile bir web uygulaması oluşturmak için bu dilin yanı sıra HTML (Hypertext
1995 yılında JavaScript’i Markup Language, Hiper Metin İşaretleme Dili), CSS (Cascading Style Sheets,
yaratırken asıl amaçları, Basamaklı Stil Şablonları) ve JavaScript gibi bütün tarayıcıların desteklediği ve
açık kaynak kodu ile istemci tarafında çalıştırılabilir olan dilleri de bilmek gerekir. HTML ve CSS bir
web geliştiriciliğini programlama dilinden çok bir işaretleme ve stil oluşturma dili olarak
yaygınlaştırmak nitelendirilmektedir. Tarayıcılar tarafından direk desteklen tek programlanabilir
istemeleriydi. dilin JavaScript olduğu söylenebilir. Bu nedenle Python geliştiricileri kendi web
uygulamalarını oluşturmak için Python ve JavaScript’in birlikte çalıştığı hazır
sistemleri kullanırlar. Bunlardan en yaygın olanları; Flask, Django, Web2py,
Tornado ve Bottle sayılabilir.
PYTHON VE WEB
Web üzerinde çalışan bir Python uygulaması geliştirmek için bazı temel
şartların oluşmuş olması gerekir. Bu şartları şu şekilde sıralayabiliriz.
IIS, ön değer olarak web sayfalarının fiziksel yolunu sistemin yüklü olduğu
sürücüdeki \intepub\wwwroot klasörü olarak tanımlar. Ancak yeni bir web sitesi
eklendiğinde sürücü üzerinde yapılandırılmış yeni veya mevcut bir klasör de
tanımlanabilir. Bu aşamada, öncelikle Windows başlat menüsünde cmd yazıp
açılan pencerede “Yönetici olarak çalıştır” seçimi yapalım ve komut satırına
geçelim. Şimdi web sitesi tanımlaması için Tablo 12.1’de gösterildiği gibi C:\
sürücüsü üzerinde Python klasörü içinde py_root adında bir klasör oluşturalım.
Tablo 12.1. Windows Komut Satırında py_root Klasörü Oluşturma
Gelen ekranda, sanal bir web klasörü oluşturmak için “Diğer Ad:” başlıklı
kutucuğa istenilen isim verilebilir, örneğin bu uygulama için py ismini verelim.
“Fiziksel Yol:” olarak da sürücü üzerinde açılmış olan yolu yazalım veya “[…]”
düğmesini tıklayarak yol seçimi yapalım. Şekil 12.3’de görüldüğü gibi bu uygulama
için “C:\Python\py_root” klasörü seçilmiştir.
Sanal web klasörü,
aslında var olmayan Şekil 12.4’de görüldüğü gibi, sanal klasör detay ekranında, yeni açılan py
fiziksel olarak başka bir klasörü tıklandığında, panelin sağ tarafında bu klasörle ilgili tanımlamaların olduğu
adresi gösteren dizindir. simgeler gelir.
İşleyici Eşleşmeleri ekranında kırmızı halka içine alınan Kod Eşleşmesi Ekle..
linkini tıklandığımızda ise Python programının exe dosyasını ve py uzantısını web
sunucusuna tanıtacağımız Şekil 12.6’ daki Kod Eşleşmesi Ekle ekranına ulaşırız.
Kod Eşleşmesi Ekle ekranında, istek yolu olarak Python programlama dilinin
uzantısı olan *.py tanımı yapalım. Çalıştırılabilir kutucuğuna Python programının
Uzantı, bir bilgisayar yüklendiği klasördeki Python.exe dosyası tanımlayalım ve %s %s parametrelerini
dosyasının hangi ekleyelim. Adı kutucuğuna da Python Interpreter diye tanıtıcı bir açıklama yazalım.
programa ait olduğunu Kod Eşleşmesi bilgileri girildikten sonra Tamam düğmesi tıkladığımızda Şekil
veya türünü belirten 12.7’deki onay ekranı gelir. Bu ekran onaylandığında artık Python kodları ile web
takıdır. sayfaları hazırlamaya başlayabiliriz.
XML Kodları
1. <?xml version="1.0" encoding="UTF-8"?>
2. <configuration>
web.config dosyasının 3. <system.webServer>
etkin olabilmesi için 4. <handlers>
applicationHost.config
5. <remove name="Python Interpreter" />
dosyasındaki “handler”
opsiyonunun 6. <add name="Python Interpreter" path="*.py" verb="*" modules="CgiModule"
scriptProcessor="C:\Python\Python310\python.exe %s %s" resourceType="File"
“overrideModeDefault”
requireAccess="Script" />
parametresi “Allow” 7. </handlers>
olmalıdır.
8 </system.webServer>
9. </configuration>
Python Komutları
1. print('Content-Type: text/html')
2. print('')
Çerçeve
Sunucu yapılar;
taraflı program; 3. print('<html>')
herhangi bir
bir web sitesinin 4. print('<body>')
programlama işletilen
sunucusundan dilinde
5. print('<h1>Merhaba Dünya!</h1>')
hızlı yazılım
koda dayanan
geliştirmeye türüdür.
imkân 6. print('</body>')
programlama
sağlayan hazır 7. print('</html>')
yapılardır.
localhost/py/merhaba_dunya.py dosyasının internet tarayıcısındaki çıktısı
Şekil 12.8’deki gibi olmalıdır.
PYTHON VE FLASK
Python programlama dili ile web üzerinde uygulama yapmak için genellikle
çerçeve yapı kullanılır. Flask konusuna geçmeden önce çerçeve yapı konusuna
değinmekte fayda olacaktır. Çerçeve yapı; herhangi bir programlama dilinde
üzerine program yazabileceğiniz hazır yapılar olarak tanımlanabilir. Bu yapı
sayesinde, oluşturulacak olan programa en baştan başlamak yerine hazır olan bir
seviyeden başlamak çok daha kolay olacaktır. Örneğin sıfırdan inşa etmek yerine
temeli uzman kişilerce atılmış ve hazır beton kullanılmış olan bir evi oluşturmak
çok daha kolaydır. Yazılım geliştirirken de bu yapı benzer bir amaca hizmet eder.
Geliştireceğiniz uygulamaya başlarken yazdığınız programı, uzman yazılımcılar ve
mühendisler tarafından oluşturulan sağlam bir temel üzerine inşa edeceğinizi
bilirsiniz.
Program oluştururken çerçeve yapı kullanmak zaman kazandırır. Her şeyi
sıfırdan yazmak gerekmez, bu nedenle hata yapma riski azalır. Bunun yanı sıra bu
yapı daha önceden uzman yazılımcılar tarafında test edildiği için güvenle
kullanılabilir. Diğer avantajları şöyle sıralayabiliriz:
Kodlama daha güvenlidir.
Daha basit test etme ve hata ayıklama imkânı verir.
Mikro çerçeveler; web Tekrar eden kodlar bulunmaz.
programlamada belirli Açık ve kolay uyarlanabilir bir yapısı vardır.
araçlar veya Kendi uygulamanıza odaklanmanıza imkân sağlar.
kütüphaneler İstenirse ekleme yapılıp genişletilebilir.
gerektirmeyen hazır Çerçeve yapılar, web sitesi geliştirirken kullanılır.
yapılardır.
• Flask
• Django
• AngularJS
• Rails
• Express
• Flutter
• Xamarin
• React Native
• NativeScript
• Ionic
Çerçeve yapılar; bilimsel çalışmalar ve veri bilimi gibi pek çok alanda
kullanılmaktadır.
Flask Nedir?
Flask, Python programlama dili ile yazılmış ücretsiz ve açık kaynak kodlu bir
web uygulama mikro çerçeve yapılı yazılımdır. Mikro çerçeve olarak
tanımlanmasının sebebi özel araçlara veya program kütüphanelerine ihtiyaç
duymamasındandır. Kendine has veri tabanı uygulama katmanı, doğrulama sayfası
veya ortak fonksiyon kullanımı sağlayan kütüphane dosyaları bulunmaz. Fakat pek
çok eklentiyi kendi yapısı dâhilindeymiş gibi destekleme özelliğine sahiptir.
Flask, 2004 yılında kurulan uluslararası bir Python meraklıları grubu olan
Pocoo’dan Armin Ronacher tarafından oluşturulmuştur. Flask, Ronacher’ın 2010
Flask Kurulumu
Flask, Python 3.6 ve daha yeni bir sürümünü destekler. Flask, iki farklı
şekilde kurulabilir. İlk olarak, açık kaynak kodunun bulunduğu
https://github.com/flask-api/flask-api sitesinden indirilip el ile kurulum yapılabilir.
Bu metot yeni başlayanlar için uygun değildir. İkinci olarak, Tablo 12.5’de
gösterilen şekilde, komut satırında “pip” komutu kullanılarak kurulum yapmaktır.
Tablo 12.5. pip Komutu İle flask Kurulumu
C:\Python\Python310\Scripts>
Kurulum başarı ile tamamlandığında bundan sonraki adım Internet
Information Services sunucusunda gerekli tanımlamaların yapılmasıdır. IIS
kurulduğunda Siteler başlığı altında Default Web Site otomatik olarak tanımlanır.
Bütün internet tarayıcıları bir web sitesini ziyaret ederken önce 80. protokol
Önceki bölümde mevcut yapının altında yeni bir uygulama açmış ve tarayıcı
ekranına “Merhaba Dünya!” yazan bir Python program kodunu çalıştırmıştık.
Şimdi bu yapı üzerinden devam edelim.
py_root klasörü içindeki web.config dosyasını herhangi bir metin editörü ile
açıp, Tablo 12.6’da verilen şekle dönüştürelim. Bu tanımlamalar, Windows
WSGI (Web Server
Internet Information Services web sunucusunun Python program komutlarını
Gateway Interface),
tanıması ve çalıştırması için yapılmaktadır.
Web Sunucusu Ağ
Geçidi Arabirimi; web Tablo 12.6. Yeni web.config Dosyasının İçeriği
sunucularının Python XML Kodları
programlama dilinde 1. <?xml version="1.0" encoding="UTF-8"?>
yazılmış web
2. <configuration>
uygulamalarına ve
3. <system.webServer>
çerçevelerine istek
iletmesini sağlayan bir 4. <handlers>
çağrı kuralıdır. 5. <add name="Python FastCGI"
6. path="*"
7. verb="*"
8. modules="FastCgiModule"
scriptProcessor="C:\Python\Python310\python.exe|C:\Python\Python310\lib\si
te-packages\wfastcgi.py"
9. resourceType="Unspecified"
10. requireAccess="Script" />
11. </handlers>
12. </system.webServer>
13. <appSettings>
14. <add key="WSGI_HANDLER" value="merhaba_dunya.app" /> <!--
{name_of_file}.{name_of_flask_app}-->
15. <add key="PYTHONPATH" value="C:\Python\py_root" />
16. <add key="WSGI_LOG" value="C:\Python\py_root\app.log" />
17. </appSettings>
18. </configuration>
C:\Python\Python310\Scripts>
Kurulum tamamlandıktan sonra Tablo 12.9’daki gibi wfastcgi-enable
komutuyla aktif hale getirilmesi gerekir.
Tablo 12.9. wfastcgi-enable Komutunun Çalıştırılması
C:\Python\Python310\Scripts>
Artık web sunucusu ile Python programlama dili arasında köprü
kurulduğuna göre bundan sonra Flask ile ilk uygulamamızı oluşturabiliriz.
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')
escape() Dekoratörü
escape() dekoratörü, internet üzerinden olası bir saldırıdan korunmak diğer
bir deyişle kaçmak için kullanılır. Bir HTML döndüğünde kullanıcının gönderdiği
değerlerin kontrolü otomatik olarak Jinja tarafından yapılır. Eğer kullanıcı
Jinja, Python
tarafından gönderilen veri, escape() süzgecinden geçtikten sonra
programlama dili için
<script>alert(“bad”)</script> sonucunu döndürürse, program çalıştırılmaz onun
oluşturulmuş bir
yerine gelen değer ekrana metin olarak basılır.
tasarım motorudur.
Tablo 12.9. escape() Dekoratörünün Kullanımı
Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4. @app.route("/py/<adi>")
5. def selamla(adi):
route() Dekoratörü
Web uygulaması geliştirilirken kullanıcılara yardımcı olmak için anlamlı web
linkleri kullanılır. Kullanıcılar hatırlayabilecekleri bir adresi genellikle daha sık
ziyaret ederler. Python, bu sebeple bir işlevi belirli bir adrese yönlendirmek için
route() dekoratörünü kullanır.
Tablo 12.10. route() Dekoratörünün Kullanımı
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'Ana Sayfa'
6. @app.route('/py/merhaba')
7. def hello():
8. return 'Merhaba Dünya!'
Bireysel Etkinlik
Değişken Dönüştürme
Adresin dinamik hale Bir web adresine değişken isim atanarak o adresin dinamik hale gelmesi
gelmesi; kullanıcıya sağlanabilir. Bunu yapmak için değişken isimler küçüktür (<) ve büyüktür(>)
içerik alışverişi ve karakterleri arasına yazılır. Değişken, istenilen veri türüne çevrilebilir. Python
etkileşim imkânları programlama dilindeki dönüştürülebilir veri türleri ve açıklamaları şunlardır:
sunulmasıdır. string: Bölüm (/) işareti olmayan her metni kabul eder
int: Pozitif tam sayıları kabul eder.
float: Pozitif ondalık sayıları kabul eder
path: String ile aynı fakat Bölüm (/) karakterini de kabul eder.
uuid: UUID string türünü kabul eder.
Aşağıda, Tablo 12.11’de verilen Python programı kullanılarak bazı veri türü
dönüşümlerine örnekler verilmiştir.
Tablo 12.11. Dinamik İsim Kullanımı
Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4.
5. @app.route('/py/kullanici/<kullanici_adi>')
6. def kullanici_profili_goster(kullanici_adi):
7. # Bu kullanici için profil göster
8. return f'Kullanıcı {escape(kullanici_adi)}'
9.
10. @app.route('/py/posta/<int:posta_no>')
11. def posta_goster(posta_no):
12 # posta_no tam sayi ise posta göster
13. return f'Posta {posta_no}'
14.
15. @app.route('/py/altyol/<path:altyol>')
16. def altyol_goster(altyol):
17. # /py/yol dan sonraki altyol’u göster
18. return f'Altyol {escape(altyol)}'
Örnek
•Tablo 12.11'de verilen Python program koduna internet
tarayıcısında http://localhost/py/kullanici/Guido van Rossum
Guido van Rossum, adresinden ulaşılırsa, profil_goster fonksiyonu çalışır ve ekrana
Python programlama aşağıdaki metni basar:
dilini geliştiren
Kullanıcı Guido van Rossum
yazılımcıdır.
Werkzeug; Python
programlama dilinde
oluşturulan URL'lerin
•Tablo 12.11'de verilen Python program koduna internet
Örnek
tarayıcısında http://localhost/py/altyol/Yenimahalle/ANKARA
adresinden ulaşılırsa, altyol_goster fonksiyonu çalışır ve ekrana
aşağıdaki metni basar (Yenimahalle'den sonra, / [bölüm] işaretinin
ekrana basıldığına dikkat ediniz).
Altyol Yenimahalle/ANKARA
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py/flask')
5. def merhaba_flask():
6. return 'Merhaba Flask'
7.
8. @app.route('/py/python/')
9. def merhaba_python():
10. return 'Merhaba Python'
11. if __name__ == '__main__':
12. app.run()
url_for() Dekoratörü
url_for() dekoratörü, özel fonksiyonlar için dinamik URL oluştururken
kullanılır. url_for dekoratörünün ilk parametresine özel fonksiyonun adı atanır.
Sonraki bir veya daha fazla parametreler ise, oluşturulan URL’nin diğer özelliklerini
tanımlamak için kullanılır.
Tablo 12.13. Dinamik İsim Kullanımı
Python Komutları
1. from flask import Flask, redirect, url_for
2. app = Flask(__name__)
3.
4. @app.route('/py/amir')
5. def merhaba_amir():
6. return 'Merhaba Amirim'
7.
8. @app.route('/py/misafir/<misafir>')
9. def merhaba_misafir(misafir):
10. return 'Misafir olarak hos geldin %s' % misafir
11.
12 @app.route('/py/kullanici/<adi>')
13. def merhaba_kullanici (adi):
14. if adi == 'amir':
15. return redirect(url_for('merhaba_amir'))
16. else:
17. return redirect(url_for('merhaba_misafir',misafir = adi))
18.
19. if __name__ == '__main__':
20. app.run(debug = True)
Python Komutları
1. <html>
2. <body>
3. <form action = "http://localhost/py/login" method = "POST">
4. <p>Kullanıcı Adı:</p>
5. <p><input type = "text" name = "adi" /></p>
6. <p><input type = "submit" value = "Gönder" /></p>
7. </form>
8. </body>
9. </html>
Python Komutları
1. from flask import Flask, redirect, url_for, request
2. app = Flask(__name__)
3.
4. @app.route('/py/basarili/post/<adi>')
5. def success_post(adi):
6. return 'Merhaba (POST) %s' % adi
7.
8. @app.route('/py/basarili/get/<adi>')
9. def success_get(adi):
10. return 'Merhaba (GET) %s' % adi
11.
12 @app.route('/py/login',methods = ['POST','GET'])
13. def login():
14. if request.method == 'POST':
15. kullanici = request.form['adi']
16. return redirect(url_for('success_post', adi = kullanici))
17. else:
yapın.
• C:\Python\py_root\login.html sayfasını herhangi bir internet
tarayıcısıyla açın.
• Kullanıcı Adı alanına flask yazın ve Gönder butonunu tıklayın.
• Gelen sonuç ekranında hangi metodun çalıştığını gözlemleyin.
Şablonlar (Templates)
Belirli bir URL'ye bağlı bir fonksiyonun çıktısını, HTML biçimine döndürmek
mümkündür. Örneğin, Şekil 12.16‘da merhaba () fonksiyonu ekrana <h1> etiketi
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py')
5. def selam_soyle():
6. return '<html><body><h1>Merhaba Dünya</h1></body></html>'
7.
8. if __name__ == '__main__':
9. app.run(debug = True)
Python Komutları
1. from flask import Flask, render_template
2. app = Flask(__name__)
3.
4. @app.route('/py/merhaba/<adi>')
5. def selam_soyle(adi):
6. return render_template('merhaba.html', isim = adi)
7.
8. if __name__ == '__main__':
9. app.run(debug = True)
DEĞERLENDİRME SORULARI
“Web programlamada belirli araçlar veya kütüphaneler gerektirmeyen
hazır yapılardır.”
1. Yukarıda tanımı yapılan kavram aşağıdakilerden hangisidir?
a) Uzantı
b) WSGI
c) Mikro çerçeve
d) Sanal web klasörü
e) FastCGI
Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')
7. def merhaba_dunya():
8. return 'Yeni Dizin Yapısından Merhaba Dünya!'
9. if __name__ == '__main__':
10. app.run()
Cevap Anahtarı
1.c, 2.e, 3.b, 4.d, 5.a, 6.d, 7.e, 8.a, 9.c, 10.b
YARARLANILAN KAYNAKLAR
Dosya Uzantısı 31.01.2022 tarihinde
https://tr.wikipedia.org/wiki/Dosya_uzant%C4%B1s%C4%B1 adresinden
erişildi.
FastCGI nedir? Avantaj ve Dezavantajları, 31.01.2022 tarihinde
https://www.sordum.net/12613/fastcgi-nedir-avantaj-ve-dezavantajlari/
adresinden erişildi.
LEARN FLASK web application framework 15.12.2021 tarihinde
https://www.tutorialspoint.com/flask/index.htm adresinden erişildi.
PYTHON 15.12.2021 tarihinde https://python.org adresinden erişildi.
Sunucu tarafı programlama nedir? 31.01.2022 tarihinde
https://www.codeturkiye.com/sunucu-tarafi-programlama-nedir/
adresinden erişildi.
• Giriş
• Web Servisleri Nasıl Çalışır?
İÇİNDEKİLER
çalıştığını anlayabilecek,
• Web servis çeşitlerini ve
avantajlarını öğrenebilecek,
• Yazılım ve XML arasında veri
iletişimini kavrayabilecek,
• SOAP, REST, UDDI protokollerini
öğrenebileceksiniz.
ÜNİTE
13
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Web Servisleri
Giriş
Web Servisleri
UDDI
295
Atatürk Üniversitesi Açıköğretim Fakültesi 2
Web Servisleri
GİRİŞ
Web servisler, HTTP (Hypertext Transfer Protocol) kullanarak hizmet
sağlayan yapıların bütününe verilen isimdir. Web servisler, istemci bilgisayar
(client) tarafından gönderilen istekleri (request) yorumlayarak gönderilen isteğe
göre istemciye yapısından bulundurduğu bilgileri aktarmaktadır. Web servisleri,
istemci - sunucu arasındaki veya sunucu - sunucu arasındaki iletişimi sağlamak için
standart bir veri alış verişi yapısıdır ve belirli bir görevi gerçekleştirmek için
tasarlanmış bir yazılım modülüdür. Web servisi farklı sunucu sistemlerinde koşan
uygulamaların birbirleri arasında veri paylaşımı gerçekleştirmek için kullanılan
Web Servis Avantajları; teknolojidir. Özellikle bulut bilişim teknolojilerinin yaygın olarak kullanılmaya
Haberleşen cihazlar, başlanması ile web servislerin de kullanım oranları artmıştır. Web servislerin
uygulamalar kullanılabilmesini sağlayan yapıya API (Application Programming Interface) denir.
birbirlerinden bağımsız Diğer ifade ile bir A uygulamasının, belli yetki kısıtları dâhilinde, B uygulaması
olsalar da iletişim
tarafından da kullanılması için API adı verilen yapılar kullanılır. Web servislerin
halindedirler.
kullanımı için TCP (Transmission Control Protocol) ve HTTP ‘nin çalışma yapısını
Platform bağımsızdır.
UNIX sistemindeki bir bilmek gerekmektedir.
uygulama .NET ile TCP, IP internet protokollerinden biridir. Bilgisayarlar arasında veri aktarımı
geliştirilmiş bir
yapılmasını sağlamak amacıyla yazılmış bir protokoldür. TCP’nin çalışması 3
uygulama ile kolaylıkla
iletişim kurabilir. adımda özetlenebilir:
Uygulamaların • Hedef ile bir bağlantı gerçekleştir.
fonksiyonları kullanıma • Veri paketini gerçekleştirilen bağlantı üzerinden transfer et.
açılabilir.
• Verinin transferi tamamlanınca bağlantıyı sonlandır.
Güvenli, pratik ve
esnektir. TCP ile çalışan HTTP, HTTPS, SMTP ve FTP gibi birçok protokol vardır. Web
servisleri de HTTP üzerinden çalışmaktadır. HTTP internet üzerinde kullanılan en
temel iletişim protokolüdür. Web sayfalarının görüntülenmesi HTTP sayesinde
gerçekleşir. İstemciler genellikle web tarayıcılar aracılığıyla sunucuya istek
gönderirler. Sunucu aldığı isteğe web sunucu programları aracılığıyla bir cevap
verirler. İstemcinin sunucuya gönderdiği istek (request) dört başlıktan oluşur.
1. Request Method: GET, POST, HEAD, PUT, DELETE, TRACE.
2. URL: Sunucudan talep edilen web sayfası veya servisin adresi.
3. Protokol: HTTP 1.1, HTTP 1.2 gibi
4. Host bilgisi: İstekte bulunulan sunucunun IP adresi veya alan adı (domain)
İstemci sunucuya kendisiyle ilgili bilgi de göndermek isteyebilir. Bu durumda
başlık (HEADER) alanı kullanılır. Örneğin; yetki gerektiren bir sayfaya girerken
başlık alanında kullanıcı adı ve kullanıcı şifresi veya yetkilendirme bilgileri
gönderilebilir. Başlığa gönderilen veriler anahtar-değer (key-value) eşleştirmesi
şeklindedir.
Sunucunun istemciye gönderdiği cevabın (response) yapısı da aşağıdaki
gibidir.
Protokol bilgisi (HTTP 1.1, HTTP 1.2 gibi)
Yanıtın statüsüyle ilgili bilgi içeren bir sayı (1xx, 2xx, 3xx, 4xx…)
Cevap içeriği ve cevaba dair diğer bilgiler gönderilebilir
296
Atatürk Üniversitesi Açıköğretim Fakültesi 3
Web Servisleri
İstemci
İnternet Sunucu
İstencinin Sunucudan Web Sayfası Talebi
Şekil 13.1. Web Servilerin Çalışma Şeması
Web servisleri istekleri, Uzaktan Yordam Çağrıları (Remote Procedure Call)
olarak bilinen yöntemlerle gerçekleştirilir. Uzaktan Yordam Çağrıları, ilgili web
servisinin barındırdığı yöntemlere yapılan çağrılardır. Örnek olarak, Nüfus ve
Vatandaşlık İşleri Genel Müdürlüğü (NVİ), gerçek kişilerin kimliklerinin
doğrulanması için diğer kurum ve kuruluşlara web servis hizmeti sağlar. Bu hizmet
sayesinde insanların gerçek kimlik doğrulama işlemleri gerçekleştirilir. Web servis
güvenliğini sağlamak için bilgi güvenliği standartları olan gizlilik, bütünlük,
kullanılabilirlik, kimlik doğrulama ve girdi doğrulama özelliklerinin sağlanması
gereklidir.
Günümüzde yaygın olarak kullanılan .Net, Java veya PHP gibi programlama
dilleri ön uç veya sunum katmanı dahil olmak üzere, web servisi ile iletişim kurma
297
Atatürk Üniversitesi Açıköğretim Fakültesi 4
Web Servisleri
yeteneğine sahiptir. Bir web servis tasarımının ana bileşeni, istemci ve sunucu
arasında oluşturulan iletişimdir. Web servislerinin iletişim dili XML'dir. XML
(Genişletilebilir Biçimlendirme Dili), HTML gibi betik dildir ve birçok programlama
dilleri tarafından da okunabilmektedir. Aslında uygulamalar birbirleriyle
konuşurken XML betik dilini kullanırlar, XML dili ile iletişim kurarlar. Bu, çeşitli
programlama dillerinde geliştirilen uygulamaların birbirleriyle konuşması için ortak
bir platform sağlar.
Web servisleri, uygulamalar arasında XML verilerini göndermek için SOAP
(Simple Object Access Protocol) mimarisini kullanırlar. Veriler normal HTTP
üzerinden gönderilir. Web servisinden uygulamaya gönderilen verilere SOAP
mesajı denir. SOAP mesajı bir XML dokümanıdır. Doküman XML ile yazıldığı için
web servisini çağıran istemci uygulaması herhangi bir programlama dilinde
yazılabilir.
Web tabanlı uygulamaları geliştirmek için çeşitli programlama platformları
kullanılır. Bazı uygulamalar Java, .Net, Angular JS veya Node.js ile geliştirilebilir. Bu
heterojen uygulamaların aralarında bir tür iletişime ihtiyaç vardır. Farklı yazılım
geliştirme dilleri kullanılarak oluşturulan bu uygulamalar arasında doğru iletişimi
Web Servis sağlamak ve veri transferini gerçekleştirmek zor olabilmektedir. Web servisleri
Platformlarında
farklı platformlar arasındaki iletişimi gerçekleştirmek için, programlama dilleri
Kullanılan Diğer
Standartlar üzerine kurulmuş birden fazla uygulamanın birbirleriyle iletişim kurma yeteneğine
DISCO, sunucuda sahip olmasını sağlayan ortak bir platform sağlar.
erişilebilir olan tüm Web Servisleri, web üzerinden HTTP ile hizmet veren program parçalarıdır.
web servislerinin
Bir kullanıcının HTTP üzerinden bir web servisi kullanmasına RPC (Remote
organizasyonunu
sağlar. Procedure Call) denir. HTTP üzerinden yapılan bu çağrımlara karşı SOAP XML
UDDI, web servisi çıktıları üretir.
bilgilerini tanımlama,
Veri transferi bu XML çıktıları ile yapıldığı için platform bağımsız bir yapısı
yayınlama ve bulma
vardır. Yani web servisi kullanmak istediğiniz program parçasının hangi dilde
işlemlerini tanımlayan
bir standarttır. yazıldığının pek bir önemi yoktur. Çünkü Web servisten alınan veri tipi XML'dir.
Bundan dolayı C# ile yazılmış bir Web Servis Java tarafından Java ile yazılan bir
Web Servis .Net teknolojileri tarafından kolayca kullanılabilir. Bu yazılımların
çalıştıkları platformların da pek önemi yoktur Unix üzerinde çalışan bir
uygulamayla Windows üzerinde çalışan bir uygulama aynı Web Servisi sorunsuzca
kullanabilirler.
Bir web servisten veri okuyup, veri almak istendiğinde bilgisayarda veri
transferinin gerçekleşmesi için bir port açılır ve bu porttan veri okunup, veri
gönderilir.
298
Atatürk Üniversitesi Açıköğretim Fakültesi 5
Web Servisleri
•Web servis genellikle farklı platformlar arasında belirlenen ortak bir biçim ile
Örnek
veri alışverişi yapmak için kullanılır. Örneğin; Çok kullanıcılı olan bir firmada
X diliyle geliştirilen muhasebe, varlık yönetimi vb. uygulama, kullanıcıların
isteği üzerine Y işletim sistemli cep telefonları üzerinden de kullanılmak
istenebilir. Platformların birbirleriyle iletişim kurabilmesi için ortak bir biçimi
kullanması gerekir. Bu durumda platformlar arası ortak bir biçimi kullanan
web servis yazılarak iletişim sağlanır.
SOAP
SOAP, HTTP üzerinden web hizmetlerine erişerek veri alış verişi yapan, XML
tabanlı bir protokoldür. Bütün uygulamalarda kullanılabilecek özelliklere sahiptir.
Başka bir deyişle SOAP, web servislerinin birbirleriyle nasıl konuştuğunun veya
onları çağıran istemci uygulamalarıyla nasıl iletişim kurulacağının bir tanımıdır.
SOAP, çeşitli programlama dilleri üzerine kurulu uygulamaların birbirleriyle
konuşabilen bir ara dil olarak geliştirilmiştir. Java, .Net veya PHP gibi farklı
programlama dilleri ile geliştirilmiş çok sayıda uygulama bulunmaktadır.
SOAP, HTTP üzerinden Uygulamalar arasında veri iletişimi, internet ortamında çok önemlidir. Ancak bu
web hizmetlerine heterojen uygulamalar arasındaki veri iletişimi çok karmaşıktır. Bu veri alışverişini
erişerek veri alış verişi gerçekleştirmek için geliştirilen yazılımlar da karmaşıktır. Bu karmaşıklıkla
yapan, XML tabanlı bir mücadele etmek için kullanılan yöntemlerden biri, uygulamalar arasında veri
protokoldür.
alışverişi için ara dil olarak XML kullanmaktır. Her programlama dili, XML
biçimlendirme dilini anlayabilir. Bu nedenle, veri alışverişi için temel ortam olarak
XML kullanılır. Ancak, veri alışverişi için tüm programlama dillerinde XML
kullanımına ilişkin standart bir belirtim yoktur. Bu standardı oluşturmak için SOAP
kullanılmaktadır. SOAP, HTTP üzerinden XML ile çalışmak üzere tasarlanmış ve
tüm uygulamalarda kullanılabilecek bir tür tanımlamalara sahiptir. SOAP, XML
verilerinin SOAP mesajları olarak aktarılmasına dayanan bağımsız bir mesajlaşma
protokolüdür. Her mesajın XML belgesi olarak bilinen bir özelliği vardır. XML
belgesinin yapısı belirli bir yapıya sahiptir ama içeriği farklıdır. Web servisleri ve
SOAP, standart web protokolü olan HTTP aracılığıyla gönderilir.
SOAP mesajının içeriği; SOAP belgesi <Zarf> öğesi olarak bilinen bir kök
öğeye sahiptir. Bu kök öğe, XML belgesindeki ilk öğedir. <Zarf> sırayla 2 bölüme
ayrılır, birinci bölüm başlık, ikinci bölüm ise gövdedir. Başlık, temel olarak XML
belgesine hangi istemciye gönderilmesi gerektiğini belirten yönlendirme verilerini
içerir. Gövde gerçek mesajı içerir. Şekil 2’de, SOAP aracılığıyla oluşturulan
iletişimin bir örneği verilmiştir.
299
Atatürk Üniversitesi Açıköğretim Fakültesi 6
Web Servisleri
<GetTutorialInfo>
</GetTutorialInfo>
İstemci
<Tutorialınfo>
<name>Web Servis</name> Sunucu
</Tutorialınfo>
Şekil 13.2. SOAP iletişimi
Web servisini çağıran istemci, web servisinin gerçekte nerede olduğunu
bilmelidir. Çünkü bir web servisi bulunamazsa kullanılamaz. İstemci uygulamasının
doğru web servisini çağırabilmesi için web servisinin gerçekte ne yaptığının
bilinmesi gerekir. Bu, Web hizmetleri açıklama dili olarak bilinen WSDL (Web
Services Description Language) kullanılarak yapılır. WSDL dosyası, temelde istemci
SOAP web standardı uygulamasına web servisinin ne iş yaptığını belirten XML tabanlı bir dosyadır.
olan W3C WSDL belgesini kullanarak, istemci uygulaması web servisinin nerede olduğunu ve
konsorsiyumu nasıl kullanılabileceğini anlayabilir. Ayrıca XML dönüşümü için XSL (Genişletilebilir
tarafından da tavsiye Stil Dili) kullanılmaktadır. XSLT (Genişletilebilir Stil Sayfası Dil Dönüşümü), XML
edilmektedir. belgelerini diğer XML belgelerine, metin belgelerine veya HTML belgelerine
dönüştürmek için kullanılan bir dildir. Aşağıda XLST örneği verilmiştir.
•<xsl:for-each select="catalog/cd">
Örnek
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
300
Atatürk Üniversitesi Açıköğretim Fakültesi 7
Web Servisleri
programlama dili ile geliştirilmiş bir uygulamayı çalıştırabilir. HTTP üzerinde çalışan
SOAP, tüm web uygulamaları tarafından kullanılan varsayılan bir protokol olan
HTTP ile çalışır. Bu nedenle, WWW (World Wide Web) üzerinde çalışmak üzere
WWW üzerinde çalışan SOAP üzerine kurulu web servislerini çalıştırmak için gerekli herhangi bir
web servisler için özelleştirmeye gerek yoktur. Şekil 3’te SOAP mimari şeması verilmiştir.
herhangi bir
özelleştirmeye gerek
yoktur. SOAP ZARF
SOAP BAŞLIK
BAŞLIK BLOK
BAŞLIK BLOK
SOAP BAŞLIK
MESAJ BLOK
301
Atatürk Üniversitesi Açıköğretim Fakültesi 8
Web Servisleri
•<xsd:complexType>
Örnek
•<xsd:sequence>
•<xsd:element name="Tutorial Name" type="string"/>
•<xsd:element name="Tutorial Description" type="string"/>
•</xsd:sequence>
•</xsd:complexType>
Çağrı ve cevap bilgilerini içeren Body öğesi, web servisi ile uygulama
arasında gönderilmesi gereken bilgileri içerir. Aşağıda, başlık bölümünde
tanımlanan karmaşık tür üzerinde çalışan SOAP web servisi örneği verilmiştir. Web
servisini çağıran uygulamaya gönderilen TutorialName ve TutorialDescription
yanıtı yer almaktadır.
•<soap:Body>
• <GetTutorialInfo>
Örnek
•<TutorialName>Web Servisleri</TutorialName>
•<TutorialDescription>Web Servis İle İlgili
Herşey</TutorialDescription>
• </GetTutorialInfo>
•</soap:Body>
302
Atatürk Üniversitesi Açıköğretim Fakültesi 9
Web Servisleri
303
Atatürk Üniversitesi Açıköğretim Fakültesi 10
Web Servisleri
304
Atatürk Üniversitesi Açıköğretim Fakültesi 11
Web Servisleri
Şekil 8’de ASP.NET projesine yeni web servis öğesini eklenme işlemi
gösterilmiştir. Proje ismini sağ tıklatarak yeni bir öğe eklenir ve Ekle > Yeni Öğe'yi
seçimi yapılarak Web Hizmeti ASMX'i açılabilir.
305
Atatürk Üniversitesi Açıköğretim Fakültesi 12
Web Servisleri
306
Atatürk Üniversitesi Açıköğretim Fakültesi 13
Web Servisleri
Bireysel Etkinlik
• C# programlama dili ile A ve B değişkenlerinin değerlerinin
toplamını gerçekleştiren topla() methodunun kodunu yazarak
yine topla SOAP web servisini yazınız.
• A= 5, B= 10 değişken değerleri kullanılacaktır.
REST REST
İstemci ile sunucu
arasındaki iletişimde REST (Representational State Transfer) ağ bağlantılı uygulamalar için
talep edilen verilerin tasarlanmış bir mimari yapıdır. REST, bir REST API oluşturulduğunda izlenen bir dizi
kayıtlarını saklamayan
kural aracılığıyla API'nin özelliklerini belirler. REST, herhangi bir veriyi (Örneğin
web servisi türdür.
REST, önceden resim, video, metin vb.), istemcinin getirebileceği, düzenleyebileceği veya
tanımlanmış bir dizi silebileceği bir kaynak olarak değerlendirir. REST, bir istemcinin belirli bir URL'ye
durum bilgisi olmayan erişerek ve bir istek göndererek uygun işlemi gerçekleştirebilmesini zorunlu kılar.
GET, POST, PUT ve Sunucu daha sonra bu isteğe uygun bir yanıt gönderir.
DELETE yöntemlerini
kullanan bir API tasarım REST istemciden gelen her isteğin, sunucunun anlaması için gerekli tüm
mimarisidir. bilgilere sahip olması gerektiği anlamına gelir. REST'in amacı, web servis sağlayan
kaynağın URL'ine istek göndererek kaynaktan istemcinin talep ettiği verinin
alınması JSON API yapısında olmaktadır. REST kullanmanın bir diğer avantajı ise
farklı arama türlerini işlemek ve farklı veri biçimlerini döndürerek esneklik
sağlamasıdır.
REST web servisi veri alışverişinde HTTP kullanır. İstemci tarafında servisi
çağırmak için herhangi bir objeye ihtiyaç yoktur. CSV, XML, JSON ve metin
mesajlaşma yapabilmektedir. Bu konuda SOAP’tan çok daha esnektir.
Geliştiricilerin erişimine açık Facebook ve Twitter REST web servisleri API
bulunmaktadır.
İşlemler resource ile gerçekleştirilir ve URI (Uniform Resource Identifier)’dan
resource’a dair bilgiler iletilir. REST servisler URI ile ilgili metoda HTTP üzerinden
istekte bulunur. GET, POST, PUT, DELETE gibi HTTP metotları ile işlemler
gerçekleştirilebilmektedir. REST, SOAP da olduğu gibi bir WDSL‘e gerek duymaz.
REST servisler SOAP’a göre daha esnek ve hızlıdır.
UDDI
Universal Description, Discovery and Integration (UDDI) web servisi
tanımlamak ve yayınlamak için kullanılan XML tabanlı bir standarttır. UDDI hizmet
sağlayıcılar, hizmet uygulamaları ve hizmet meta verileri hakkındaki bilgileri
yöneten web hizmetidir. SOAP aracılığıyla iletişim kurarak web servislerine
arabirim tanımlamak için WSDL kullanır. SOAP ve WSDL ile web servislerinin üç
temel standardından biridir. Yazılımların birbirleri ile iletişim kurmaları için web
servis altyapı hizmeti sağlayan endüstri girişimidir. UDDI, web servisleri kurumların
307
Atatürk Üniversitesi Açıköğretim Fakültesi 14
Web Servisleri
308
Atatürk Üniversitesi Açıköğretim Fakültesi 15
Web Servisleri
309
Atatürk Üniversitesi Açıköğretim Fakültesi 16
Web Servisleri
DEĞERLENDİRME SORULARI
1. Sunucunun istemciye gönderdiği cevap yapısında aşağıdaki seçeneklerin
hangisi bulunmaz?
a) Protokol bilgisi (HTTP 1.1, HTTP 1.2 gibi)
b) Sunucu IP bilgisi
c) Cevap içeriği
d) URL
e) Statü bilgisi (1xx, 2xx, 3xx, 4xx…)
310
Atatürk Üniversitesi Açıköğretim Fakültesi 17
Web Servisleri
10. Aşağıdakilerden hangisinde REST web servisler URI ile ilgili metoda HTTP
üzerinden istekte bulunmaz?
a) GET
b) INPUT
c) POST
d) PUT
e) DELETE
Cevap Anahtarı
1.b, 2.d, 3.e, 4.e, 5.c., 6.c, 7.a, 8.e, 9.a, 10.b
311
Atatürk Üniversitesi Açıköğretim Fakültesi 18
Web Servisleri
YARARLANILAN KAYNAKLAR
“Web Servis(SOAP veREST)”, https://medium.com/@kdrcandogan/web-
servis-soap-verest-93930908a465 , 2022.
“Web servis”, https://tr.wikipedia.org/wiki/Web_servis , 2022.
“What are Web Services”,
https://www.tutorialspoint.com/webservices/what_are_web_service
s.htm, 2022.
“Adding a Web Reference”, https://docs.microsoft.com/en-
us/sharepoint/dev/general-development/step-2-adding-a-web-
reference , 2022.
“Consuming Web Service In an ASP.Net Web Application”, https://www.c-
sharpcorner.com/UploadFile/0c1bb2/consuming-web-service-in-Asp-
Net-web-application/ , 2022.
“UDDI | Online community for the Universal Description, Discovery, and
Integration” http://uddi.xml.org, 2022.
312
Atatürk Üniversitesi Açıköğretim Fakültesi 19
GÜVENLİ WEB
PROGRAMLAMA
• Özet
• Giriş
İÇİNDEKİLER
14
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Güvenli Web Programlama
Gizlilik
Bilgi Güvenliği
Bütünlük
GÜVENLİ WEB PROGRAMLAMA
Özellikleri
Kullanılabilirlik
Girdi Doğrualam
Kimlik Doğrulama
Doğrulama
Yetkilendirme
Enjeksiyon Saldırıları
314
Atatürk Üniversitesi Açıköğretim Fakültesi 2
Güvenli Web Programlama
GİRİŞ
Yazılım güvenliği, yazılım güvenlik risklerini belirlemek ve yönetmekle
ilgilidir. Uygun gereksinim mühendisliği, tasarım ve mimari uygulamalarının
uygulandığı varsayılacak olursa, bir yazılımın risklerini tanımlamanın ve
yönetmenin bir sonraki en etkili yolu, geliştirilen kodun tekrarlı olarak analiz
edilmesidir. Yazılım güvenliğini sağlamak için geliştirilme aşamasında güvenli
yazılım geliştirme yöntemleri kullanılarak yazılımların geliştirilmesinin sağlanması
ve yazılım güvenlik zafiyetlerinin en aza indirilmesi gereklidir. Yazılım güvenliği
yazılım geliştirme süreçlerinin her aşamasında göz önünde bulundurulmalıdır.
Keşfedilen bir yazılım güvenlik zafiyeti, sürekli tekrarlanmaya ve görünürde sonu
olmayan ciddi zararlara sebep olmaktadır. Yazılım güvenliği alanında birçok
güvenlik terminolojisi vardır. En temel birkaç terminoloji aşağıda anlatılmıştır.
Tehdit: Bir olayın meydana gelme olasılığıdır, güvenlik zafiyetinin manipüle
edilmesi.
Saldırı: Saldırganlar tarafından gerçek bir tehdit uygulaması.
Güvenlik Açığı: Saldırganın bir saldırı gerçekleştirmek ve sistemin güvenliğini
aşmak için kullanabileceği sistemdeki zafiyetler.
Kimlik Doğrulama: Bir kullanıcının kimliğinin belirlenmesi. Bir insan mı yoksa
bir robot mu olduğunu belirlemek için sisteme erişmeden önce kullanıcı kimliğinin
belirlenmesi gereklidir. Örneğin; Kullanıcı adı ve şifre, Yüz kimliği, Parmak izi.
Yetkilendirme: Belirli bir kullanıcının sistemde hangi işlemleri yapmasına izin
verildiğini belirlemek. Örneğin; Belirli bir kullanıcı bir kayıt oluşturabilir ancak
silemez.
Planlama, analiz, tasarım, geliştirme gibi yazılım geliştirme yaşam döngüsü
Bir güvenlik zafiyetini aşamalarının tamamında güvenli yazılım geliştirme ilkelerine uyulmalıdır. Yazılım
tamamen ortadan geliştirme süreçlerinde güvenlik ilkelerine uyarak daha güvenli yazılım geliştirme,
kaldırmak mümkün ön üretimde test ve dağıtım yapmak, maliyetlerin azaltılması ve uçtan uca
değildir ama güvenlik güvenliğin sağlanması gerçekleştirilebilir. Yazılım hataları, programlarda
önlemleri alınarak
beklenmedik ve tipik olarak istenmeyen davranışlardır. Bir güvenlik zafiyeti, sistem
zafiyetler kullanılarak
yapılacak saldırılar güvenlik prosedürlerinde, tasarımında, uygulanmasında veya dâhili olarak bir
sonucunda oluşabilecek kusur veya zayıflıktır. Uygulanabilecek ve güvenlik ihlali veya güvenlik politikasının
zararların etkisinin ihlali ile sonuçlanabilecek kontroller olarak de tanımlanabilir. Güvenli yazılım
azaltılması amaçlanır geliştirmede kalıcı koruma sağlamak için konumdan bağımsız koruma
gerçekleştirmek gereklidir. Yazılıma erişimin gerçekleştirildiği bütün konumlar için
güvenlik stratejileri aynı olmalıdır. Kurum içinden veya kurum dışından yapılan
erişimler için farklı politika uygulanması zafiyetlere sebep olabilir.
Yazılım geliştirilirken, güvenli yazılım geliştirme yöntemlerinin
kullanılmasının amacı yazılımların güvenlik zafiyetlerinin azaltılmasıdır. Bir
güvenlik zafiyetini tamamen ortadan kaldırmak mümkün değildir ama güvenlik
önlemleri alınarak zafiyetler kullanılarak yapılacak saldırılar sonucunda
oluşabilecek zararların etkisinin azaltılması amaçlanır. Bütün zafiyetlerin tamamen
315
Atatürk Üniversitesi Açıköğretim Fakültesi 3
Güvenli Web Programlama
Gizlilik
Verinin yetkisiz taraflara ifşa edilmesine karşı korunması anlamına gelir.
Potansiyel olarak, korunan veriler hakkında herhangi bir ipucu sağlayan küçük bilgi
Bilgi güvenliğini sızıntıları bile bu ilkenin geçerliliğini ortadan kaldırır ve güvenlik zafiyetine sebep
sağlamak için Gizlilik, olur. Gizliliğe yönelik saldırılara örnekler aşağıdaki gibi sıralanabilir.
Bütünlük ve
Kullanılabilirlik • Gizli verilerin izinsiz okunması.
özelliklerinin • Kısıtlanmış veriler üzerinde istatistiksel analiz yapmak.
sağlanması gereklidir. • Yetkisiz iletişim mesajlarını okumak.
• İletişim trafiğinin olup olmadığını algılamak.
Bütünlük
Verinin yetkisiz kişilerce oluşturulmasına, değiştirilmesine veya yok
edilmesine karşı korunması anlamına gelir. Potansiyel olarak, verilerin tahrif
edilmiş olabileceği, makul tehdit bile veri bütünlüğünün istismarı olarak
değerlendirilebilir.
Veri bütünlüğü;
316
Atatürk Üniversitesi Açıköğretim Fakültesi 4
Güvenli Web Programlama
Kullanılabilirlik
Yetkili tarafların sisteme ve kaynaklarına gerekli erişebilmelerini sağlama
anlamına gelmektedir. Kullanılabilirliğin sabote eden saldırı türü genellikle Servis
Aksatma (Denial of Service) saldırısı türleridir. Bir sistemin veya verilerinin imhası
sistemin kullanılamaz hale gelmesine sebep olur, sistemin devre dışı bırakılması
olarak kabul edilir.
Kullanılabilirlik;
oluşturulmuş verilerin
• Web uygulama güvenliğini sağlamak için yapılması gerekenlerin
girilmesini sağlamak
bilgi güvenliği ilkeleri olan gizlilik, bütünlük ve kullanılabilirlik
için kullanıcılar
açısından yorumlayınız?
tarafından girilen
verilerinin uygunluk
doğrulamasıdır.
GİRDİ DOĞRULAMA
Girdi Doğrulama yazılım güvenliğini sağlamak için URL ve form alanları gibi
yazılım ara yüzleri kullanılarak, kullanıcılar tarafından girdi verilerinin uygunluk
doğrulamasının gerçekleştirilme sürecidir. Bilgi sisteminde iş akışına yalnızca
uygun şekilde oluşturulmuş verilerin girilmesini sağlamak için gerçekleştirilir.
Kesme işareti (') karakteri, 1=1 dizesi veya <script> etiketi gibi karakterleri ve
kalıpları tespit etmek ve yasaklı listesi doğrulamasını kullanmak yaygın bir girdi
doğrulaması yöntemidir, ancak saldırganların bu yasaklı listelerini devre dışı
317
Atatürk Üniversitesi Açıköğretim Fakültesi 5
Güvenli Web Programlama
bırakmaları çok zor değildir. Kullanıcı tarafından sistemlere girilen verilerin sistemi
manipüle etmek için oluşturulmuş veriler mi yoksa normal veriler mi olup olmadığı
güvenli kod geliştirme yöntemleri kullanılarak yazılım tarafında kontrol edilmelidir.
Tarih, kimlik numarası, sosyal güvenlik numarası, posta kodu, e-posta adresi gibi
yapılandırılmış veriler için yazılımcı, çok güçlü bir girdi doğrulama modeli
tanımlayabilir. Veri alanları veya formlar açılır liste veya radyo düğmeleri gibi sabit
bir seçenek grubundan oluşuyorsa, veri girişinin ilk etapta kullanıcıya sunulan
değerlerden biriyle tam olarak eşleşmesi gerekir. Kullanıcının esnek veri girişi
yapabileceği metin alanlarının ise içerik doğrulama işlemlerinin yapılması
gereklidir. Ancak kullanıcıların form ve yorum alanlarına veya metin alanlarına
kesme işareti (') veya küçüktür işareti (<) veya büyüktür (>) yazmak isteyebilir ve
bu durumun tamamen masum nedenleri olabilir. Ama bunun gibi meta karakterler
saldırganlar tarafında da kullanılabileceği için güvenli yazılım geliştirme yöntemleri
kullanılarak girdi doğrulama süreçleri işletilmelidir. İstemcide gerçekleştirilen
herhangi bir JavaScript giriş doğrulamasının JavaScript'i devre dışı bırakan veya bir
Web Proxy'si kullanan saldırgan tarafından atlatılabilir. İstemcide JavaScript
kullanılarak gerçekleştirilen herhangi bir girdi doğrulamasının sunucu tarafında da
yazılımın geliştirildiği web programlama dili kullanılarak da girdi doğrulama
işlemlerinin gerçekleştirilmesi gereklidir.
Doğrulanan tüm kullanıcı girdileri ve kötü amaçlı verilerin siteler arası betik
yazma (XSS) veya SQL enjeksiyonu saldırılarının yürütülmesini önlemek için HTML
sayfasına döndürüldüğünde kodlanmalıdır. Örneğin, (<script>, <script>)
kodlama türü, kullanıcı tarafından kontrol edilen verilerin eklendiği sayfanın
bağlamına özeldir.
Kodlama hataları, yazılım güvenlik açıklarının tek kaynağı değildir. İş
kuralları ve uygunluk gereksinimlerine dikkat edilmemesi de yazılımlarda güvenlik
açıklıklarına ve zafiyetlerine sebep olabilir. Yazılım ara yüzünden yüklenen dosya
yükleme işlemi gerçekleştirilirken, dosya adının beklenen bir uzantısı veya dosya
türü kullandığından emin olmak için girdi doğrulaması yapılmalıdır. Yüklenen
dosyanın maksimum dosya boyutunun sistemin kabul edeceği dosya boyutundan
büyük olmaması kontrol edilmelidir. Web sitesi ZIP veya RAR gibi sıkıştırılmış
dosyaların yüklenmesini destekliyorsa, dosyayı açmadan önce doğrulama kontrolü
yapılmalıdır.
Web sunucuya yüklenen dosyaları sunucu işletim sisteminde depolamak için
yeni bir dosya adı formatı kullanılmalıdır. Dosya adı veya geçici dosya adı için
kullanıcı tarafından oluşturulan herhangi bir metin kullanmamalıdır. Dosya
sunucuya yüklendiğinde, dosyanın depolama alanında yeniden adlandırılması
önerilir. Örneğin, yüklenen dosya adı test.jpg, rastgele bir dosya adıyla
(AI63454sfyertf.jpg gibi) yeniden adlandırılabilir. Bunu yapmanın amacı, test.jpg,
test.asp veya /../../../test.jpg gibi filtreyi değerlendirmek için doğrudan dosya
erişimi ve belirsiz dosya adından kaynaklanacak riskleri önlemektir. Yüklenen
dosyalar kötü amaçlı içerik (kötü amaçlı yazılımdan koruma, statik kaynak analiz
vb.) için analiz edilmelidir. Dosya yolu istemci tarafından belirlenmemelidir.
Sunucu tarafında dosya yoluna karar verilmelidir. Yükleme özelliği, yalnızca belirli
318
Atatürk Üniversitesi Açıköğretim Fakültesi 6
Güvenli Web Programlama
dosya türlerine ve uzantılarına izin vermek için bir izin verilenler listesi yaklaşımı
kullanılmalıdır. XML uzantılı dosyalar sistemler arasında veri alış verişlerinde
kullanılan yapılardır. Ancak izin verilenler listesinde olsa bile Flash, Java ve
Silverlight uygulamalarında veri yüklemesine izin veren ve güvenlik zafiyetlerine
sebep olabilecek crossdomain.xml ve clientaccesspolicy.xml dosya türlerine izin
verilmemelidir.
Kimlik doğrulaması olan uygulamalarda yüklenen dosya türlerine izin
verilirse, etki alanları arası veri hırsızlığına ve CSRF saldırılarına sebep olabilir. Bu
nedenle "crossdomain.xml" veya "clientaccesspolicy.xml" adlı dosyaları
yasaklamak gereklidir. Güvenlik için kullanılacak .htaccess ve .htpasswd dosyaları
sunucu yapılandırma seçenekleri sağlar ve buna izin verilmemelidir.
Htaccess dosyaları aspx, asp, css, swf, xhtml, rhtml, shtml, jsp, js, pl, php, cgi. gibi
web ortamında yürütülebilir komut dosyalarına izin verilmemesi önerilir.
E-posta adreslerini doğrulamanın en iyi yolu, bazı temel doğrulamaları
gerçekleştirmek ve ardından adresi posta sunucusuna iletmek ve reddederse
istisnalar göz önünde bulundurulmalıdır. Bu, herhangi bir uygulamanın, posta
sunucusunun kabul ettiği herhangi bir adrese e-posta gönderebileceğinden emin
olabileceği anlamına gelir. İlk doğrulama aşağıdaki örnekteki gibi olabilir.
319
Atatürk Üniversitesi Açıköğretim Fakültesi 7
Güvenli Web Programlama
KİMLİK DOĞRULAMA
Kimlik doğrulama, bir kişinin, varlığın veya uygulamanın iddia ettiği kişi
olduğunu doğrulama sürecidir. Web uygulamaları bağlamında kimlik doğrulama,
genellikle bir kullanıcı adı veya kimlik ve yalnızca belirli bir kullanıcının bilmesi
gereken bir veya daha fazla özel bilgi öğesi gönderilerek gerçekleştirilir. Oturum
Yönetimi, bir sunucunun kendisiyle etkileşime giren bir varlığın durumunu
koruduğu bir süreçtir. Bu, bir sunucunun bir işlem boyunca sonraki isteklere nasıl
tepki vereceğini hatırlaması için gereklidir. Oturumlar, istekleri iletirken ve alırken
istemci ve sunucu arasında ileri ve geri iletilebilen bir oturum tanımlayıcısı
tarafından sunucuda tutulur. Oturumlar, kullanıcı başına benzersizdir ve
hesaplama açısından tahmin edilmesi çok zordur.
Kullanıcı isimleri ile ilgili olarak şunlara dikkat edilmelidir:
320
Atatürk Üniversitesi Açıköğretim Fakültesi 8
Güvenli Web Programlama
• Kullanıcı adları veya kullanıcı kimlikleri büyük veya küçük harfe duyarlı
olmamalıdır. Örneğin 'admin' ve 'Admin' aynı kullanıcı olmalıdır.
• Kullanıcı adları benzersiz olmalıdır.
• Yüksek güvenlikli uygulamalar için, kullanıcı tanımlı genel veriler yerine
gizli kullanıcı adları atanabilir.
• Kimlik doğrulama sürecinde kullanıcı adı olarak E-posta adresi
kullanılabilir.
Kimlik Doğrulama işlemlerinde; uygulama kullanıcı arayüzünde, ara katmanı
ve veri tabanı katmanı dâhil olmak üzere oturum açmaya izin verilmemelidir.
Güvenli olmayan erişim (örn. genel erişim/DMZ) için dahili olarak kullanılan kimlik
doğrulama çözümünü (örn. IDP / AD) kullanılmamalıdır.
Kimlik doğrulama için parola kullanırken önemli bir endişe parolanın güçlü
olmasıdır. Güçlü bir parola politikası, bir kişinin parolayı manuel veya otomatik
yollarla tahmin etmesini zorlaştırır ve hatta imkânsız hale getirir. Güçlü bir parola
politikası için şifrelerin minimum uzunluğu uygulama tarafından zorunlu
kılınmalıdır. 8 karakterden kısa şifreler zayıf olarak kabul edilir. Kullanıcıların şifre
oluşturmasını engelleyeceğinden, maksimum şifre uzunluğu çok düşük
ayarlanmamalıdır. Belirli karma algoritmalardaki sınırlamalar nedeniyle ortak bir
maksimum uzunluk 64 karakterdir. Uzun parola Hizmet Reddi saldırılarını önlemek
için bir maksimum parola uzunluğu belirlemek önemlidir. Parolalarda Unicode ve
boşluk dahil tüm karakterlerin kullanımına izin verilmelidir. İzin verilen karakter
türlerini sınırlayan parola oluşturma kuralları olmamalıdır. Bir parola sızdığında
veya güvenlik ihlali tanımlaması sırasında kimlik bilgilerinin döndürülmesi
önlenmelidir.
Kullanıcıların karmaşık bir parola oluşturmasına ve yaygın ve önceden ihlal
edilmiş parolaları engellemesine yardımcı olmak için parola gücü ölçeri
kullanılmalıdır.
Bir uygulamanın, kullanıcının parolasını unutması durumunda hesabına
erişmesi için bir araç sağlayan mekanizmaya sahip olması yaygın bir durumdur. Bu
özellikle ilgili ayrıntılar için Şifremi Unuttum özelliği kullanılabilir.
Bir uygulamanın doğru şifreleme tekniğini kullanarak parola oluşturması çok
önemlidir.
PWNED Passwords,
parolaların daha önce Kullanıcılarca oluşturulan parolalar programlama dillerinde bulunan
ihlal edilmiş parolalara password_verify() işlevi gibi, dil veya frameworkler tarafından sağlanan güvenli bir
karşı kontrol edilebildiği parola doğrulama işlevi kullanılarak parola karması ile oluşturulmalıdır. Parola
bir hizmettir. PWNED
değişikliğini yapan kullanıcının gerçek kullanıcı olduğundan emin olmak
API kullanılarak
parolaların daha önce için, kötüye kullanım durumu, gerçek bir kullanıcı oturum açmak için ortak
ihlal edilip edilmediği bilgisayarı kullanılır. Kullanıcı oturum kapatmayı unutabilirler. Başka bir kullanıcı
tespit edilebilir. aynı bilgisayarı kullanarak, şifre doğrulanma işlemini gerçekleştirmeden, şifreyi
değiştirebilir.
Bazı uygulamalar, bir kullanıcının hassas işlemler gerçekleştirip
gerçekleştiremeyeceğini kontrol etmek için ikinci faktör kimlik doğrulama
321
Atatürk Üniversitesi Açıköğretim Fakültesi 9
Güvenli Web Programlama
kullanmalıdır. İki yönlü kimlik doğrulaması olarak da bilinen TLS (Transport Layer
Security) İstemci Kimlik Doğrulaması, işlemi sırasında ilgili TLS sertifikalarını
gönderen tarayıcı ve sunucudan oluşur. Sertifikayı kullanarak ve bir Sertifika
Yetkilisine (CA) sertifikanın geçerli olup olmadığını sorarak bir sunucunun
gerçekliği doğrulanabilir, sunucu da istemciden bir sertifika alarak ve üçüncü taraf
bir sertifikaya karşı doğrulayarak kullanıcının kimliğini doğrulayabilir. Bunu
yapmak için sunucu, kullanıcıya özellikle kendisi için oluşturulmuş bir sertifika
sağlar, böylece sertifikanın hangi kullanıcıyı doğrulaması gerektiğini belirlemek için
kullanılır.
Kimlik doğrulama işlevi durumunda yanlış uygulanan hata mesajları,
kullanıcı kimliği ve parola numaralandırma amacıyla kullanılabilir. Bir uygulama,
kimlik doğrulama mekanizmalarından herhangi birini (oturum açma, parola
sıfırlama veya parola kurtarma) kullanarak, aşağıdakilerden bağımsız olarak genel
Daha çok sistem
yönetiminde kullanılan bir hata mesajıyla yanıt verir:
En Az Yetki ilkesi, • Kullanıcı kimliği veya parolası yanlış hatası.
kullanıcılara yalnızca
• Böyle bir hesap yok.
işlerini tamamlamak
için gereken minimum • Hesap kilitli veya devre dışı.
yetki atama ilkesini Amaç, bir saldırganın uygulamaya karşı bir kullanıcı numaralandırma eylemi
ifade eder.
başlatmasına izin vererek bir tutarsızlık faktörünün oluşturulmasını önlemektir.
YETKİLENDİRME
Yetkilendirme, bir eylem veya hizmet için onaylanmış doğrulama süreci
olarak tanımlanabilir. Yetkilendirme, bir varlığın kimliğini doğrulama süreci olan
kimlik doğrulamadan farklıdır. Kimliği doğrulanmış bir kullanıcının bütün
kaynaklara erişme ve eylem gerçekleştirme yetkisi yoktur. Örneğin, bir web
uygulamasının normal kullanıcıları ve yöneticileri olabilir ve yöneticiler, normal
kullanıcının sahip olmadığı eylemleri gerçekleştirebilir ancak yöneticilerin
gerçekleştirdiği eylemleri gerçekleştiremez. Ayrıca, kaynaklara erişim için kimlik
doğrulama her zaman gerekli değildir; kimliği doğrulanmamış bir kullanıcı, bir
resim veya oturum açma sayfası gibi belirli genel kaynaklara veya hatta bir web
uygulamasının tamamına erişme yetkisine sahip olabilir.
Yetkilendirme mantığıyla ilgili zafiyetler, web uygulamaları için önemli bir
bilgi güvenliği sorunudur. Yetkilendirme problemlerinin kullanılmasından
kaynaklanan etki, hem biçim hem de önem açısından oldukça değişkendir.
Saldırganlar, korunması gereken kaynaklara erişebilirler, içerik oluşturabilir,
içerikleri değiştirebilir veya silebilir. Böylece bilgi güvenliği kriterlerinden gizlilik,
bütünlük ve kullanılabilirlik ilkeleri ihlal edilmiş olur. Ancak, bu tür eylemlerin
gerçek etkisi, tehlikeye atılan kaynakların kritikliği ve hassasiyeti ile
bağlantılıdır. Bu nedenle, başarıyla yararlanılan bir yetkilendirme kusurunun
işletme maliyeti çok yüksek olabilir.
Hem kimliği doğrulanmamış ziyaretçiler hem de kimliği doğrulanmış (ancak
zorunlu olarak yetkilendirilmemiş) kullanıcılar, yetkilendirme zayıflıklarından
322
Atatürk Üniversitesi Açıköğretim Fakültesi 10
Güvenli Web Programlama
323
Atatürk Üniversitesi Açıköğretim Fakültesi 11
Güvenli Web Programlama
324
Atatürk Üniversitesi Açıköğretim Fakültesi 12
Güvenli Web Programlama
ENJEKSİYON SALDIRILARI
Bir sistemin hangi arayüz kullanımı ve hangi bölümünün saldırıya uğradığına
bağlı olarak birkaç enjeksiyon saldırı türü olabilir. Ancak, bütün enjeksiyon
saldırıları ortak bir model takip ederler. Komutları metin biçiminde kabul eden
programın bazı bileşenleri bir komut kabuğu, SQL yorumlayıcısı, XML ayrıştırıcısı ve
hatta Python veya JavaScript gibi bir dilin yorumlayıcıları olabilir.
Güvenli yazılım geliştirme yöntemleri kullanılmadan geliştirilen
yazılımlardaki zafiyetler, enjeksiyon saldırılarına sebep olabilir. Bu tür zafiyetler,
yazılımın karıştırmak ve istemediği komutların yürütülmesine izin vermek için
kullanıcı girdisine dayanır. Tipik olarak, bu tür karışıklıklar, meta karakterlerin
(noktalama) uygun olmayan şekilde kullanılmasına veya uygunsuz alıntılardan
kaynaklanır.
Aşağıda Şekil 1’de, kullanıcı girdisinin birkaç farklı senaryoda nasıl
kullanılabileceğine dair basit örnekler verilmiştir. Kullanıcı girdisinin yazılıma
ulaşabileceği yerler saldırı yüzeyi olarak adlandırılır. Yazılımda kullanıcı girdisinin
programın davranışını etkileyebileceği yerlere saldırı yüzeyi denir. Kullanıcı
girdilerinin veri tabanı sunucusunda SQL enjeksiyonuna, işletim sisteminde komut
mesajına ve network seviyesinde ise bir network paketinde manipülasyonlara
sebep olabileceği gösterilmiştir.
325
Atatürk Üniversitesi Açıköğretim Fakültesi 13
Güvenli Web Programlama
Veritabanı Sunucusu
Kullanıcı girdileri
Select * form T where u=$input
Web Form
User : universite
Komut Kabuk (Command Shell)
% mail $input < message
Network Paket
xxxxx universite xxxxx Yorumlayıcı (Interpretter)
Prog = begin + input + end eval prog
326
Atatürk Üniversitesi Açıköğretim Fakültesi 14
Güvenli Web Programlama
Örnek
yetersiz doğrulanmasından kaynaklanan zafiyetler kullanılarak, SQL
cümlelerinin kötüye kullanılmasına sebep olan saldırı türleridir.
sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi + " ';"
Yukarıdaki SQL sorgusu kullancı adı bilgisine ait tüm verileri, kullanıcı
tablosundan çekecek şekilde yazılmıştır. Kullanıcı adı kısmına
saldırgan tarafından yazılıma zarar verecek ' or '1'='1' -- ifade
yazılabilir. SQL cümlesi aşağıdaki gibi olur.
sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi ' or '1' =
'1 --';"
UId = getRequestString("UserId");
txtSql = "SELECT * FROM Users WHERE userId = " + UId;
327
Atatürk Üniversitesi Açıköğretim Fakültesi 15
Güvenli Web Programlama
328
Atatürk Üniversitesi Açıköğretim Fakültesi 16
Güvenli Web Programlama
DEĞERLENDİRME SORULARI
1. Yazılım geliştirme süreçlerinde güvenlik ilkelerine uymanın avantajları
arasında aşağıdakilerden sayılamaz?
a) Güvenli yazılım geliştirme ilkelerini benimseyerek güvenlik riskini
azaltmak.
b) Yazılım tasarım aşamasından itibaren güvenlik ilkelerine uyma
c) Geliştirme maliyetlerinin azaltılması.
d) Güvenlik metodolojisi kullanarak tamamlama süresini planlama.
e) Yazılımın müşteriye teslimi aşamasında güvenlik önemlerini almak.
329
Atatürk Üniversitesi Açıköğretim Fakültesi 17
Güvenli Web Programlama
6. Aşağıdaki seçeneklerin hangisinde beyaz kutu testi ile kara kutu testi
arasındaki fark en doğru şekilde açıklanmıştır?
a) Beyaz kutu testi, bağımsız bir programcı ekibi tarafından
gerçekleştirilir.
b) Kara kutu testi aşağıdan yukarıya yaklaşımı kullanır.
c) Kara kutu testi, iş birimlerini içerir.
d) Beyaz kutu testi, yazılımın dâhili mantıksal yapılarını inceler.
e) Kara kutu testi belli olmayan yöntemlere karşı yapılır.
330
Atatürk Üniversitesi Açıköğretim Fakültesi 18
Güvenli Web Programlama
Cevap Anahtarı
1.e, 2.d, 3.b, 4.d, 5.e., 6.d, 7.c, 8.d, 9.e, 10.d
331
Atatürk Üniversitesi Açıköğretim Fakültesi 19
Güvenli Web Programlama
YARARLANILAN KAYNAKLAR
Eduardo Fernandez-Buglioni (2013), Security Patterns in Practice: Designing
Secure Architectures Using Software Patterns, John Wiley & Sons
Barnat, J., Brim, L., Ročkai, P. (2007). Scalable Multi-core LTL Model-
Checking. Model Checking Software, Vol. 4595, Lecture Notes in
Computer Science
Mark S. Merkow, Lakshmikanth Raghavan (2010), Secure and Resilient
Software Development, Auerbach Publications
Long, F., Mohindra, D., Seacord, R. C., Sutherland, D. F., & Svoboda, D.
(2013). Java coding guidelines: 75 recommendations for reliable and
secure programs. Addison-Wesley
OWASP ASVS 3.0.1, Application Security Verification Standard ASVS
https://www.owasp.org/index.php/Category:OWASP_Application_Se
curity_Verification_Standard_Project, Erişim tarihi: 20121
Jerome H. Saltzer and Michael D. Shroeder, “The Protection of Information
in Computer systems,” Proc. IEEE Vol. 63, Issue 9, September 1975,
pp.
SEI CERT Coding Standards, https://www.securecoding.cert.org/ . Erişim
tarihi: 2021
Secure Coding in C and C++, 2nd edition Pearson Education
Woodcock, J., Larsen, P.G., Bicarregui, J. & Fitzgerald, J., “Formal Methods:
Practice and Experience,” ACM Computing Surveys, Vol. 41, Issue 4,
Ekim 2009, pp.
Farid, D. M., Harbi, N., Bahri, E., Rahman, M. Z., and Rahman, C.M., (2010).
Attacks Classification in Adaptive Intrusion Detection using Decision
Tree, World Academy of Science, Engineering and Technology.
332
Atatürk Üniversitesi Açıköğretim Fakültesi 20