Backend Geliştirme Serisi: Node.js, GraphQL API, REST API, MongoDB, SQL, & Deno.js serisi #1
Backend Geliştirme Serisi: Node.js, Js Temelleri modül 1-2 #2
modül 3 içerik: temel şeyler
web nasıl çalışır
node serverı oluşturmak
node hayat döngüsü & event loop
requestleri anlamak
response yollamak
request & response headerları
routing
redirecting
parsing
olaya dayalı programlama
blocking - non blocking
bazı önemli dokunuşlar
node modül sistemi
WEB NASIL ÇALIŞIR?
Nodejs kullanacağımız için webin nasıl çalıştığını ve nodejs in bunda nasıl bir rol alacağını anlamamız gerekir. Web serverı oluşturmanın önemli bir kısmı requestleri ve responseları anlamaktır. Tarayıcıdasınız ve bir web sitesini ziyaret ettiniz ya da işte kayıt oluyorsunuz diyelim form dolduruyorsunuz bir şekilde etkileşimdesiniz. Kullanıcı sizsiniz yani user/client
user/client -> giriyorsun -> h t t p ://web-sitesi.com
ne oluyor işte tarayıcı arkaplanda bu alan adını aramak için alan adı sunucularına ulaşıyor yani domain bizim okuyabileceğimiz halini almış şekilde bize sunuluyor. IP adresine gidiyoruz yani en nihayetinde bir sunucuya gidiyoruz. O servera istek atmış oluyoruz
user/client -------------> istek ------> server (10.212.212.12)
işte burada gelen isteği alabilen ve bir şeyler yapabilen sunucuyu döndüren kodlar devreye girer. tabi bunun için nodejs kullanmaya gerek yok php, asp.net, ruby de kullanılabilir ama biz bu backend geliştirme serisinde nodejs'ten gidiyoruz.
user/client -------------> istek ------> server (10.212.212.12) ----------> yanıt (response)
bu response html kodu olabilir ama başka datalar da olabilir json olabilir xml olabilir türlü şeyler döndürülebilir yanıt olarak
yani sonuç olarak webin çalışma şekli budur nodejs in de rolünün nerede olduğunu bu backend geliştirme serisini takip eden herkes anlamıştır. burada istek yani request ve yanıt yani response'dan bahsederken bunların iletimi bazı protokollerle yapılır yani webte standarize edilmiş iletişim yolları vardır. HTTP, HTTPS falan hyper text transfer protocol derler ingilizcesi a protocol for transferring data which is understood by browser and server yani tarayıcının ve serverın anlayacağı dilden data transferi protokolü diyebiliriz. https de benzeri sonuna secure ekleyin
http + data encryption (iletişim sırasında)
yani ssl şifrelemesi
https'i nasıl etkinleştireceğimizi ilerleyen kısımlarda göstereceğim ama şimdilik lokal olarak çalıştığımız için http ile devam.
NODE SERVERI OLUŞTURMAK
şimdi vscode açın buralardan zaten bahsetmiştik şimdi bir şey import etmeden de yapılabilecek şeyler var ama core modüllerden bahsedelim ilerde siz üçüncü taraf şeyleri kafanıza göre kullanabilirsiniz. yani core modüllerden bazıları http, https, fs, path, os bunlardan mesela fs windowsta macte linuxta farklı dosya yol formatları kullanıldığından işimize yarıyor http istek gönderme serverı başlatma gibi konularda bize yardımcı oluyor. şimdi biz istek gönderen kişi kullanıcı olarak zannedebiliriz sadece ama siz bir sunucuya istek gönderince o sunucu başka bir sunucuya istek gönderebilir o da başka bir şeye falan derken karışıyor. mesela işte google maps apisine istek atabilirsiniz bazı koordinatları almak için neyse devam edelim https burada ssl ile başlatır serverı yukarıda bahsettiğim şifreleme şeysi daha güvenlidir.
şimdi bu core modülleri aktif etmemiz lazım kullanmak için bunu nasıl yapıyoruz app.js'e dönelim nodejs in global olarak her dosyada kullanılabilecek require keywordü var bir şeyi import etmeye yarar şimdi
const http = require('http'); yazarak ekliyoruz burada ./http falan kullanmadan http yazarsanız direkt core modülü global olarak başka bir dosya içinde aramadan (nodejs zaten onu içerdiğinden) direkt gidip http core modülünü eklemiş olursunuz yani.
artık bu global modüldeki fonksiyonları kullanabiliyoruz. http. diyerek..
http.createServer();
mesela. buna bakıyoruz üzerine gelince zaten çıkar requestListener?: (request: IncomingMessage, response: ServerResponse)=> void) : Server yazar yani createServer'ı kullanmak için parametre olarak requestListener istiyor bizden requestListener da bir fonksiyon gelen bütün istekleri çalıştırmaya yarar.
requestListener 2 parametre aldığından biz de bir fonksiyon oluşturuyoruz 2 parametre alan req ve res parametreleri istediğiniz gibi yazın ama herkes req res çekiyor buralara
http.createServer(rqListener); şeklinde kullanabiliriz createServer'a git rqListener a bak ve gelen her isteği çalıştır demiş oluyoruz.
böyle yapmak zorunda mıyız değiliz direkt fonksiyonu şöyle de yazabiliriz
http.createServer(funciton(req,res) { } );
yeni nesil js syntax de kullanılabilir arrow func. tarzı
http.createServer((req,res)=> { } );
gibisinden.
şimdi bir tanesini seçin terminalden node app.js yazınca hiçbir şey olmadığını göreceksiniz sonrasında http.createServer.. olarak yazdığımız kodu const server = diyerek server adlı bir şeye atayın. daha sonra server.listen metodunu kullanabiliriz bu metod istekleri dinlemeye yarayacak. birkaç tane opsiyonel parametre alır ilki hangi portu dinleyeceğini alır server.listen(3000) yazalım nispeten özgürsünüz bu konuda
localhost:3000 yazın tarayıcınıza bir şey olmadı ama terminale baktığınızda epey output görürsünüz.
NODEJS LIFECYCLE
burada node app.js yazdığınız zaman terminale artık script start veriyor kodunuz parselanıyor değişkenler kaydediliyor fonksiyonlar aynı şekilde kaydediliyor ve event loop başlıyor. Event loop event listenerları kaydedilene kadar çalışmaya devam eder. yani biz req ve res fonksiyonunu verirken bunun kaldırılmasını gereken bir şey yazmadık sunucu sürekli çalışır halde olmalı. nodejs tek iş parçacıklı js çalıştırır. nodejs ile oluşturulan sunucuya bir istek gönderildiğinde şimdi bu sunucuya bin tane istek de gelebilir yani bir tane gelse tamam da bir sürü gelen istek olunca her seferinde her isteği işlemek için durup isteği işleyip sonra çalışmaya devam etse olmazdı
event loop bu yüzden var. ctrl c yapıp quit de atabilirsiniz 
modül 3 içerik: temel şeyler
web nasıl çalışır
node serverı oluşturmak
node hayat döngüsü & event loop
requestleri anlamak
response yollamak
request & response headerları
routing
redirecting
parsing
olaya dayalı programlama
blocking - non blocking
bazı önemli dokunuşlar
node modül sistemi
Şimdilik bu modülün ilk 3 başlığını ele almış olduk. Devamında requestleri anlamaktan ve response yollamaktan ardından headerlar ve routingten bahsederek devam edeceğiz...
ana konu: Backend Geliştirme Serisi: Node.js, GraphQL API, REST API, MongoDB, SQL, & Deno.js serisi #1
bir önceki modül: Backend Geliştirme Serisi: Node.js, Js Temelleri modül 1-2 #2
Backend Geliştirme Serisi: Node.js, Js Temelleri modül 1-2 #2
modül 3 içerik: temel şeyler
web nasıl çalışır
node serverı oluşturmak
node hayat döngüsü & event loop
requestleri anlamak
response yollamak
request & response headerları
routing
redirecting
parsing
olaya dayalı programlama
blocking - non blocking
bazı önemli dokunuşlar
node modül sistemi
WEB NASIL ÇALIŞIR?
Nodejs kullanacağımız için webin nasıl çalıştığını ve nodejs in bunda nasıl bir rol alacağını anlamamız gerekir. Web serverı oluşturmanın önemli bir kısmı requestleri ve responseları anlamaktır. Tarayıcıdasınız ve bir web sitesini ziyaret ettiniz ya da işte kayıt oluyorsunuz diyelim form dolduruyorsunuz bir şekilde etkileşimdesiniz. Kullanıcı sizsiniz yani user/client
user/client -> giriyorsun -> h t t p ://web-sitesi.com
ne oluyor işte tarayıcı arkaplanda bu alan adını aramak için alan adı sunucularına ulaşıyor yani domain bizim okuyabileceğimiz halini almış şekilde bize sunuluyor. IP adresine gidiyoruz yani en nihayetinde bir sunucuya gidiyoruz. O servera istek atmış oluyoruz
user/client -------------> istek ------> server (10.212.212.12)
işte burada gelen isteği alabilen ve bir şeyler yapabilen sunucuyu döndüren kodlar devreye girer. tabi bunun için nodejs kullanmaya gerek yok php, asp.net, ruby de kullanılabilir ama biz bu backend geliştirme serisinde nodejs'ten gidiyoruz.
user/client -------------> istek ------> server (10.212.212.12) ----------> yanıt (response)
bu response html kodu olabilir ama başka datalar da olabilir json olabilir xml olabilir türlü şeyler döndürülebilir yanıt olarak
yani sonuç olarak webin çalışma şekli budur nodejs in de rolünün nerede olduğunu bu backend geliştirme serisini takip eden herkes anlamıştır. burada istek yani request ve yanıt yani response'dan bahsederken bunların iletimi bazı protokollerle yapılır yani webte standarize edilmiş iletişim yolları vardır. HTTP, HTTPS falan hyper text transfer protocol derler ingilizcesi a protocol for transferring data which is understood by browser and server yani tarayıcının ve serverın anlayacağı dilden data transferi protokolü diyebiliriz. https de benzeri sonuna secure ekleyin
http + data encryption (iletişim sırasında)
yani ssl şifrelemesi
https'i nasıl etkinleştireceğimizi ilerleyen kısımlarda göstereceğim ama şimdilik lokal olarak çalıştığımız için http ile devam.
NODE SERVERI OLUŞTURMAK
şimdi vscode açın buralardan zaten bahsetmiştik şimdi bir şey import etmeden de yapılabilecek şeyler var ama core modüllerden bahsedelim ilerde siz üçüncü taraf şeyleri kafanıza göre kullanabilirsiniz. yani core modüllerden bazıları http, https, fs, path, os bunlardan mesela fs windowsta macte linuxta farklı dosya yol formatları kullanıldığından işimize yarıyor http istek gönderme serverı başlatma gibi konularda bize yardımcı oluyor. şimdi biz istek gönderen kişi kullanıcı olarak zannedebiliriz sadece ama siz bir sunucuya istek gönderince o sunucu başka bir sunucuya istek gönderebilir o da başka bir şeye falan derken karışıyor. mesela işte google maps apisine istek atabilirsiniz bazı koordinatları almak için neyse devam edelim https burada ssl ile başlatır serverı yukarıda bahsettiğim şifreleme şeysi daha güvenlidir.
şimdi bu core modülleri aktif etmemiz lazım kullanmak için bunu nasıl yapıyoruz app.js'e dönelim nodejs in global olarak her dosyada kullanılabilecek require keywordü var bir şeyi import etmeye yarar şimdi
const http = require('http'); yazarak ekliyoruz burada ./http falan kullanmadan http yazarsanız direkt core modülü global olarak başka bir dosya içinde aramadan (nodejs zaten onu içerdiğinden) direkt gidip http core modülünü eklemiş olursunuz yani.
artık bu global modüldeki fonksiyonları kullanabiliyoruz. http. diyerek..
http.createServer();
mesela. buna bakıyoruz üzerine gelince zaten çıkar requestListener?: (request: IncomingMessage, response: ServerResponse)=> void) : Server yazar yani createServer'ı kullanmak için parametre olarak requestListener istiyor bizden requestListener da bir fonksiyon gelen bütün istekleri çalıştırmaya yarar.
requestListener 2 parametre aldığından biz de bir fonksiyon oluşturuyoruz 2 parametre alan req ve res parametreleri istediğiniz gibi yazın ama herkes req res çekiyor buralara
http.createServer(rqListener); şeklinde kullanabiliriz createServer'a git rqListener a bak ve gelen her isteği çalıştır demiş oluyoruz.
böyle yapmak zorunda mıyız değiliz direkt fonksiyonu şöyle de yazabiliriz
http.createServer(funciton(req,res) { } );
yeni nesil js syntax de kullanılabilir arrow func. tarzı
http.createServer((req,res)=> { } );
gibisinden.
Kod:
const http = require('http');
function rqListener(req, res){
}
http.createServer(function (req,res){
});
http.createServer((req,res)=>{
});
http.createServer();
şimdi bir tanesini seçin terminalden node app.js yazınca hiçbir şey olmadığını göreceksiniz sonrasında http.createServer.. olarak yazdığımız kodu const server = diyerek server adlı bir şeye atayın. daha sonra server.listen metodunu kullanabiliriz bu metod istekleri dinlemeye yarayacak. birkaç tane opsiyonel parametre alır ilki hangi portu dinleyeceğini alır server.listen(3000) yazalım nispeten özgürsünüz bu konuda
Kod:
const http = require('http');
const server = http.createServer((req,res)=>{
console.log(req);
});
server.listen(3000);
localhost:3000 yazın tarayıcınıza bir şey olmadı ama terminale baktığınızda epey output görürsünüz.
NODEJS LIFECYCLE
burada node app.js yazdığınız zaman terminale artık script start veriyor kodunuz parselanıyor değişkenler kaydediliyor fonksiyonlar aynı şekilde kaydediliyor ve event loop başlıyor. Event loop event listenerları kaydedilene kadar çalışmaya devam eder. yani biz req ve res fonksiyonunu verirken bunun kaldırılmasını gereken bir şey yazmadık sunucu sürekli çalışır halde olmalı. nodejs tek iş parçacıklı js çalıştırır. nodejs ile oluşturulan sunucuya bir istek gönderildiğinde şimdi bu sunucuya bin tane istek de gelebilir yani bir tane gelse tamam da bir sürü gelen istek olunca her seferinde her isteği işlemek için durup isteği işleyip sonra çalışmaya devam etse olmazdı
Queue
Callbackteki işlemler Web api iletilir(browser için) ve tamamlananlar sıraya alınır . Ve buradan tekrar sayfaya iletilir.
Call Stack
Call stack, yürütülecek tüm işlemlerin takibinden sorumludur. Bir işlev bittiğinde, yığından atılır. Bu yığın yapılacak işlemlerin dizildiği bir yapı olarak düşünülebilinir.
Event loop, JavaScript’in birden fazla işlem şeklinde programlamasının arkasındaki sırdır. JS, tüm işlemleri tek bir iş parçacığı üzerinde yürütür, ancak birkaç akıllı veri yapısı kullanarak bize çoklu iş parçacığı yanılsaması verir.
modül 3 içerik: temel şeyler
web nasıl çalışır
node serverı oluşturmak
node hayat döngüsü & event loop
requestleri anlamak
response yollamak
request & response headerları
routing
redirecting
parsing
olaya dayalı programlama
blocking - non blocking
bazı önemli dokunuşlar
node modül sistemi
Şimdilik bu modülün ilk 3 başlığını ele almış olduk. Devamında requestleri anlamaktan ve response yollamaktan ardından headerlar ve routingten bahsederek devam edeceğiz...
ana konu: Backend Geliştirme Serisi: Node.js, GraphQL API, REST API, MongoDB, SQL, & Deno.js serisi #1
bir önceki modül: Backend Geliştirme Serisi: Node.js, Js Temelleri modül 1-2 #2
