Herkese selamlar çok uzun bir aradan sonra tekrardan Medium için içerik üretmek beni tekrardan heyecanlandırdı. Bugün sizlere Node JS üzerinden nasıl modern API’lar yaratabileceğimizi anlatacağım. Elimden geldiğince tabi ki :) Gelin hep beraber projemizi oluşturup ayağa kaldıralım.
Adım 1.
Her şeyden önce bilgisayarımızda Node JS kurulu olduğundan emin olmamız gerekli. Hali hazırda Node JS ile geliştirme işine başladıysanız zaten kurulu olacağını varsayıp bu adımı atlıyorum. Youtube üzerinde bu konu ile alakalı tonla tutorial bulabilirsiniz.
Adım 2.
İlk adımı tamamladığımıza göre dilerseniz projemiz için gerekli dosyalarımızı oluşturalım. Windows bir bilgisayar üzerinde olduğum için konsol olarak **“PowerShell”**
tercih edeceğim siz dilediğinizi kullanabilirsiniz. Harddiskimin **D:**
sürücüsünde **“node-api”**
isimli bir klasör oluşturacağım. Bilgisayarınızın hangi sürücüne oluşturduğunuza dikkat edelim. Ekran görüntüm ise bu şekilde.
Daha sonra ise **“node-api”**
isimli klasörümüze erişmemiz gerekli.
Artık klasörümüzün de içine yerleştiğimize göre “**code .”**
diyerek VS Code ile uygulamamızı açabiliriz.
Adım 3.
Eveeet karşımızda tertemiz bir Visual studio code ortamı görebildiğinize inanıyorum. Umarım bu noktaya kadar her hangi bir problem yaşamamışsınızdır. Bundan sonra genel hatlarıyla klasörlerimizi oluşturalım. Fakat bunun öncesinde gerekli bağımlılıklarımızı yüklemek için **package.json**
dosyamızı projemiz içerisine oluşturalım. Oluşturmak için ise VS Code terminalimizi açıp **“node-api”**
projemiz içerisinde olduğumuza dikkat ederek **“npm init — y”**
komutunu çalıştırabiliriz. Burada ki **“ — y”**
flagi ise **package.json**
dosyalarımızda ki alanları es geçmemizi sağlıyor isterseniz tek tek doldurabilirsiniz veya daha sonra düzenleyebilirsiniz size kalmış.
Kodumuz bu şekilde.
Çıktı olarak ise bu sonucu alıyoruz. Tebrikler **package.json**
dosyamız oluşturudu artık gerekli paketlerimizi **npm**
yardımı ile projemize yükleyebiliriz.
Adım 4.
İlk olarak Node uygulamalarımızın olmazsa olmazı “Express JS”i kurmak istiyorum. Bir çok alternatifi olsa da Node JS uygulamalarının yüksek bir çoğunluğunun “Express JS” ile yapıldığını görebiliriz.
Çalıştırmamız gereken komut ise şu şekilde
**“npm install express”**
Express kütüphanesini kurduktan sonra projenize **“node_modules”**
isimli bir klasör geldiğini görebilirsiniz. Bu klasör projemizin bütün dosyalarını ve yüklediğimiz paketlerin bütün bağımlıklarını içeriyor. Ayrıca **“package.json”**
dosyamız da **“dependencies”**
kısmın da Expressin’de kurulduğunu görebiliriz. Pakete dair gerekli sürüm bilgileride burada yer alıyor. Bu kısıma kadar gerekli işlemleri halletiğimize göre dilerseniz projemizin “File” kısımlarını ufaktan oluşturmaya geçebiliriz.
Adım 5.
Gerekli klasörlerimizi oluşturmadan önce Node uygulamamızı ayağa kaldıralım isterseniz. Port olarak ben **“5000”**
portunu kullanacağım siz dilediğiniz portu kullanabilirsiniz. **“index.js”**
içerisinde gerekli kodlarımızı yazıp **“node-api”**
isimli uygulamamızı ayağa kaldıralım.
Dip Not
ES6 Standartlarına uymamız açısından Node uygulamamız da ben import kullanacağım siz dilerseniz gerekli bağlılıkları **“require”**
kullanarakta projenize dahil edebilirsiniz. İmport kullanımı için **“package.json”**
içerisine **“type:module”**
eklememiz gerekli. Ekran görüntümüz ise şu şekilde. Detaylı bilgi almak isterseniz linki ziyaret edebilirsiniz.
İlk işlem olarak ise **“mongoose”**
kullanarak database bağlantımızı gerçekleştirelim. **“npm install mongoose”**
diyerek mongoose paketini uygulamamıza dahil edebiliriz. Ayrıca environment değişkenlerimizi tanımlamamız için **“dotenv”**
paketinide projemize dahil etmeyi unutmayalım **“npm install dotenv”**
dememiz yeterli. Bu 2 paketi kurduktan ve **“.env”**
dosyamızı ayarladıktan sonra projemizin dosya yapısı ise şu şekilde gözükecek **“index.js”**
içinde dotenv paketini kullanmamız için gerekli kodlarımızı yazmayı unutmayalım elbette ayrıca helpers altına **connectionDb.js**
isimli bir klasörde yaratalım.
**index.js**
son halimiz bu şekilde.
Dosya yapımız ise bu şekilde.
Adım 6.
Bu noktaya kadar her hangi bir problem yaşamadıysak gelin isterseniz kurduğumuz **mongoose**
paketi yardımıyla Mongo db’nin atlas sunucularına bağlanabiliriz. Bu kısımda Mongo DB Atlas üzerinden nasıl connection string alacağınızı anlatmayacağım. Bu işlem için [**bu videoyu**](https://www.youtube.com/watch?v=sx2zTNiaBuM&ab_channel=NewAgeCoder)
izleyebilirsiniz bu makalde sadece api yaratmak üzerine odaklanıyoruz. **“connectionDb.js”**
isimli klasörümüze gerekli kodlarımızı yazıyoruz. Dosyamızın son hali ise bu şekilde.
Bu kısımda **process.env.MONGO_CONNECTION_STRING**
isimli kısım ise **“.env”**
dosyamızdan gelen connection stringimiz olacak. Mongo DB Atlas uygulaması üzerinden aldığımız Application Connection Stringimizi bu kısıma yazmayı unutmayalım daha sonra ise **“index.js”**
içerisine gelerek database bağlantımızı buraya da import etmemiz gerekli kodlarımız ise şu şekilde. Uygulamamızın database bağlantısının sağlandığını da konsol üzerinden kontrol edebiliriz.
Adım 7.
Bu kısıma kadar problemsiz geldiyseniz API oluşturmaya artık sadece 1–2 adım uzakda olduğumuzu söylemem gerekli :) Bu uygulama üzerinden daha açıklayıcı olması açısından kullanıcının **Login & Register**
olmasını sağlayan bir API yazacağız. Bunun için **“model”**
klasörümüz içinde **“User”**
isimli Mongo db modelimizi oluşturalım. Model yapımız **“firstName”**
, **“email”,**
**“password”**
içeriyor.
Adım 8.
Dilerseniz artık son aşamalara doğru ilerleyelim **“controllers”**
klasörümüz içerisine **“userController.js”**
isimli bir klasör oluşturalım ve bu JavaScript dosyası içerisinde Login ve Register methodlarımızı yazalım. Bu kısımda bir parantez açmak istiyorum. Uygulamamıza kayıt olan kullanıcıların şifrelerini daha güvenli saklamamız için bu parolaları hashlememiz gerekli bu adım sistemimizin güvenliği açısından da büyük katkı sağlayacak bir işlem **“bcrypt js”**
bu konuda imdadımız yetişiyor. Uygulamamıza eklememiz için **“npm install bcryptjs”**
dememiz yeterli.
Adım 9.
Geldik Register methodumuzu hayata geçirmeye gerekli kodlarımız aşağıda ki şekilde. Kullanıcılarımız artık sistemimize İsim, Email ve şifrelerini kullanarak kayıt olabilecekler. Son görüntümüz ise aşağıda ki gibi
Bir sonra ki işlemde ise Login operasyonumuz için gerekli methodumuzu yazalım. Bu 2 işlemde ki her detaya değinmedim açıkcası bu konularla alakalı internette tonlarca döküman ve Best Practices bulabilirsiniz..
Adım 10.
Login ve Register operasyonlarımızı tamamladığımıza göre **“routes”**
yapımızı oluşturalım ve APIlarımızı dış dünyaya açıp **Postman**
yardımı ile isterseniz test edelim. **“routes”**
klasörümüz içerisinde **“login.routes.js”**
ve **“register.routes.js”**
isimli .js uzantılı dosyalarımızı oluşturalım.
Aynı zamanda **“index.routes.js”**
üzerinden endpointlerimizi dağıtabiliriz.
Son olarak ise **“index.js”**
üzerinden **initRoutes’u**
çağırmamız gerekli aynı zamanda **express.json**
ve **express.urlencoded**
methodlarınıda eklemeyi unutmayalım bir sıkıntı yaşamamak adına son halimiz ise bu şekilde.
Adım 11.
Geldik son adıma oluşturduğumuz API’lar üzerinden dilerseniz **Postman**
yardımı ile gerekli testlerimizi oluşturalım. Öncelikle register olmak için
**“http://localhost:5000/api/auth/register”**
endpointimize istek atmamız yeterli tabi ki **“firstName”**
, **“email”**
ve **“password”**
alanlarımızı doldurmayı unutmayalım. Bu istediğimiz bir post işlemi yapacak.
Register işlemimizde bir problem gözükmüyor Mongo Db tarafına baktığımıza ise kullanıcının şifresinin hashlenmiş bir şekilde database üzerine yazıldığını görebiliriz.
Test edeceğimiz sadece **Login**
endpointimiz kaldı tekrar **Postman**
yardımı ile bu işlemimizide test edelim kullanıcı **“email”**
ve **“password”**
kullanarak sisteme giriş yapabiliyor mu görmüş olalım. İstek atacağımız adres **“http://localhost:5000/api/auth/login”**
Evet API’den gelen responsumuzun başarılı bir sonuç döndüğünü Login işlemini tamamladığını görebiliyoruz..
Nispeten uzun bir yazı olmuş olsada elimden geldiği kadar bütün süreçleri baştan sona anlatmaya çalıştığım bir makale olduğuna inanıyorum. Tarık bu kısımlar eksik, şurayı daha güzel anlatabilirdin dediğiniz noktaları lütfen bana iletin. Uzun bir süreden sonra Medium için bir şeyler yazmak gerçekten heyecan verici. İlerleyen süreçte bir çok konu hakkında elimden geldiği kadar içerik üretmeye çalışacağım. Okuduğunuz için teşekkürler :) Bütün kodlara ulaşmak için tıklayabilirsiniz.