Node.js ile Uygulama Geliştirme – 3 : REST Mimarisi ve RESTful Servisler Geliştirme [Kurulum ve Hazırlık]

Node.js ile REST Mimarisi ve RESTful Servisler Geliştirme

Node.js in en yaygın kullanıldığı alan şüphesiz web uygulamaları ve JSON temelli Rest servisler geliştirme diyebiliriz. Serinin ilk örneği olarak, Rest sunucusu olarak çalışacak bir web sunucusu oluşturup sonrasında, bu sistemi dağıtıma çıkarılım. Sunucumuz her hangi bir istemci ye(web, mobile vs.) rest ve websocketler üzerinden hizmet evrebilsin.

Ayrıca, bir önceki yazıda “pratikde görerek öğrenmemiz gereken diğer temel kavramlar(cluster, babel/typescript vs. gibi)” diye bahsettiğimiz konularada bakma fırsatımız olacak.

Küçük bir stok takip sistemi ne bezenetebileceğimiz, örnek uygulamamız için , genel olarak bu sürecin en temel halini ve bu örneğimizle başlayıp diğer örneklere birlikte  değineceğimiz konuları şu şekilde özetleyebiliriz;

  1. Rest Mimarisine sadık kalınarak, bir ürün yönetim sistemin geliştirmesi
  2. Her hangi bir istemci bağımlılığının olmaması(web, mobile desktop her türlü istemci ile bağlanabilme )
  3. Oturum açma ve Yetkilendirme
  4. Ölçeklenebilirlik için, cluster ve caching kullanımı
  5. Temel API yönetimi ve proxy katmanı (API rate limits, Güvenlik )
  6. Gerçek Zamanlı iletişim( web sockets real-time connections) sağlanması
  7. AWS veya Azure entegrasyonu(uygulama dağıtımı ve bu yapıların diğer servislerinin kullanımı (azure functions, AWS Lambda, S3, Blob Bus vb.))
  8. Continuous integration / Remote Debugging dağıtım yönetimi ve hata denetimi

Yukarıda genel olarak mimari yapıyı çizmeye çalıştık fakat yazı dizisi devam ettikçe eklemeler yada değişiklikler olacaktır.

Şimdi ilk olarak geliştirme ortamımızı hazırlayalım. Aslına bakarsanız, yapmamız gereken çok fazla bişey yok, başlangıç için Node.js i indirmek ve tercih ettiğiniz kod editörü yeterli. Sonrasında tercih ettiğiniz veri tabanı nı işin içine katacağız. Veri tabanı olarak, her hangi bir SQL veri tabanı (Mysql,Mariadb, Postgres vb.) işimizi görecektir.

Genelde Node.js dünyasında Mongo DB gibi NoSql türevleri popüler olsada, internet üzerinde node.js in NoSQL db ler ile kullanımına dair çok kaynak olduğu için ben bir SQL veri tabanı ile devam edeceğim. Serinin devamında, diğer örneklerde, MongoDB yada Redis i kullanarak caching vb ihtiyaçlarımızı karşılamaya çalışacağız.

Eğer sisteminiz de Node.js yüklü değilse bu adresten son sürümü indirerek devam edelim; nodejs.org . Ben yazıyı yazarken son stable sürüm “V 5.10.1” di. Kurulumu gayet basit olduğu için detaylara değinmeyeceğim. Sadece windows kullanıyorsanız, sisteminizi yeniden başlatmanız gerekebilir.

Bir önceki yazıda, Node.js in Stable ve LTS isimli iki farklı dağımıtı olduğundan bahsetmiştik.  Eğer o kısmı atladıysanız bir önceki yazıda ilgili kısma bakmanızı tavsiye ederim.

Node.js kurulumunun düzgün bir şekilde yapılıp yapılmadığını test etmek adına, komut satırından

node -v

komutu ile aşağıdakine benzer bir çıktı alıyorsanız kurulum başarılı bir şekilde gerçekleşmiştir.

node_check

Node.js i kurduğumuza göre uygulamamızı yazmaya başlayabiliriz. Daha düzenli bir takip imkanı olsun diye, ben D sürücüsü altında “StokSistemi” isimli bir klasör oluşturdum. Kodlarımızı bu klasör altında tutacağız. İlk olarak bir package.json dosyasına ihtiyacımız var.

Bu dosyayı daha fazla konuşacağız fakat şimdilik, uygulamamızın genel bilgilerini, uygulamamızda kullanacağımız diğer node.js modüllerini tutan bir “manifest-üst bilgi dosyası”  diyebiliriz.

package.json dosyası basit bir json dosyası yani kendimiz her hangi bir json dosyası oluşturur gibi oluşturabilmekteyiz. Ayrıca Node.js i yüklediğimizde birlikte gelen npm i de kullanarak bu dosyayı otomatik olarak oluşturabiliriz.

StokSistemi adlı klasörün içinde, aşağıdaki komut ile npm e bizim için boş bir package.json dosyası oluşturmasını söyleyelim.( boş desek de bazı varsayılan bilgilerle birlikte oluşturulacaktır package.json dosyamız.)

npm init -y

yukaridaki komut dan sonra aşağıdaki gibi bir çıktı ile npm ana dizinde bir package.json dosyası oluşturduğunu bize haber edecek.

package.json

 

Bu haliyle package.json dosyamız minumum varsayılanlarla oluşturulmuş oldu. İleride ihtiyacımız oldukça bu dosyaya tekrar döneceğiz.

Babel, Node.js ve ES2015

Javascript in en yeni sürümünü ( ES2015 )  node.js ile kullanabilmek için bir kaç küçük yardıma ihtiyacımız var. Normal de node.js ES2015 ile gelen bir çok yeniliği son sürümleri itibariyle desteklesede hala tam anlamıyla tüm yenilikleri desteklememekte. Örneğin yeni modül sistemi(import/export yapısı) gibi önemli yenilikleri bugün itibariyle uygulamamızda kullanabilmek için Babel yada Typescript gibi bir yardımcıya ihtiyacımız var.

Node.js in bugün itibariyle desteklediği ES2015 yeniliklerine bu adresten bakabilirsiniz. Bu yeni özellikleri her hangi bir aracı araç olmadan(Babel, Typescript vs.) bugünde node.js de kullanabilmekteyiz. Fakat tüm yeniliklerden istifade edebilmek için Babel i kullanacağız. Node.js yakında (muhtemelen yaz sonunda, ES2015 yeniliklerinin %90 nın dan fazlasını destekliyor olacaktır.)

Teknik olarak ne ES2015 i ne babel yada TypeScript i kullanmak zorunda değiliz fakat javascript in en yeni hali uygulama geliştirme sürecimizi önemli oranda verimlileştirecektir.  Bu yüzden bizde babel i kurarak devam edelim. Babel ın yaptığı iş genel olarak “Node.js henüz desteklemesede, ES2015 le gelen en yeni özellikleri kullanmamıza imkan vermeksi.” diyebilriz. Bu yöntem ile Javascript in en yeni sürümü ile yazacağımız kodlarımız, babel tarafından node.js in bugün desteklediği haline çevirilecekler.

Node.js , şu an babel ile kullanabildiğimiz bu yeni özellikleri desteklemeye başladığında, kodlarımızda her hangi bir değişiklik yapmadan uygulamamızı geliştirmeye devam edebileceğiz. Babel kurulumu gayet basit, Babel i npm ile indirip bir iki ufak ayar yapmamız yeterli. Projenin ana dizininde komut satırından aşağıdaki komutla, babel i ve bir eklentisini indirelim,

npm install babel-cli@6.5.1 babel-preset-es2015@6.5.0 --save

babel node.js

yukarıdaki komutla, npm önce ana dizinde node_modules isimli bir klasör oluşturacak, hem babel hemde daha sonra indireceğimiz tüm paketler bu klasör altında tutulacak. yukarıdaki komut satırının en sonundaki –save komutu ise npm e “bu iki paketi package.json dosyasına bu projenin ihtiyacı olarak kaydet” demek için bir flag/uyarı.

Böylece, projemizi her hangi bir yere taşıdığımızda, bütün paketleri de beraber taşımamıza gerek kalmayacak, sadece package.json dosyamızı taşımamız yeterli olacaktır.

Yukarıdaki komutla birlikte babel yüklendikten sonra aşağıdakine benzer bir package.json dosyamız olacak;

package.json

{
 "name": "StokSistemi",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "dependencies": {
   "babel-cli": "^6.5.1",
   "babel-preset-es2015": "^6.5.0"
 }
}

Gördüğümüz gibi, package.json dosyamız a “dependencies” isimli yeni bir alan eklendi ve bu alanın altında, uygulamamıza eklediğimiz iki paket (babel) listelendi. Bundan sonra npm aracılığıyla yüklediğimiz tüm paketlerde eğer –save ekini kullanırsak, yukarıdaki dependencies kısmı altına otomatik olarak ekleneceklerdir.

Babel i uygulamamızda kullanabilmek için bir iki işleme daha ihtiyacımız var. Aslında bu yapacağımız iki işlemle birlikte, bir otomasyon sağlamış olacağız. Kısaca, node.js kodlarımızı çalıştırmadan önce , Babel ın kodlarımızı dönüştürmesini sağlamış olacağız. Bunun için package.json dosyasına ufak bir ek yapmamız gerekiyor. Yeni haliye package.json dosyamız;

package.json

{
 "name": "StokSistemi",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
   "test": "",
   "start": "babel-node index.js"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "dependencies": {
   "babel-cli": "^6.5.1",
   "babel-preset-es2015": "^6.5.0"
 }
}

package.json dosyamızdaki script kısmına “start”: “babel-node index.js” komutunu ekledik. Böylelikle, kodlarımız node.js tarafından çalıştırılmadan önce, babel tarafından dönüştürülecek. babel e başlangıç olarak ana dizinde  “index.js” isimli bir dosyaya bakmasını söyledik. babel index.js ve bu dosyaya referansı olan tüm diğer dosyaları otomatik olarak dönüşüme tabi tutacak. Ana dizinde boş bir “index.js” dosyası oluşturmayı unutmayın.

Son olarak , Babel icin hangi eklentileri kullanacagimizi belirtmemiz gerekmekte. Bunun icin yine ana dizinde “.babelrc” isimli bir dosya oluşturup içerğini u şekilde tanımlayıp kurulum sürecimizi bitirmiş olacağız.

{
    "presets": ["es2015"]
}

tahmin edeceğiniz gibi, ileride babel ile birlikte eğer başka eklentiler kullanmak istersek(ki bir sürü eklenti mevcut) bu dosyaya eklememiz yeterli olacaktır. Yukardıaki süreç sadece bir kereliğine yapılması gereken bir süreç. Son haliyle uygulamamızın yapısı şuna benzer bir hale gelmiş olması lazım.

Node.js babel

 

Ana dizinde, npm in bizim için oluşturduğu node_modules klasörü, uygulamızın başlangıç noktası olacak index.js ,  package.json ve son olarak babel için oluşturduğumuz .babelrc isimli küçük bir ayar dosyamız. Bu arada, index.js isimli başlangıç dosyamızı istediğiniz gib isimlendirmekte özgürsünüz, ben genel bir kullanım olduğu için index.js diye isimlendirdim. Eğer farklı bir isim kullandıysanız,  package.json içinde de değiştirmeyi unutmayın.

Express.js, ve Web sunucumuzun ilk kodları

Node.js ile web yada API uygulamaları yazmak için “teknik anlamda” bir framework e ihtiyacımız yok ama pratik de işler tahmin edebileceğiniz gibi, “iyi bir web framework ” bulmak la başlıyor. ASP.NET MVC, Rails yada Laravel gibi çok kulanışlı yetenekli framework ler uygulama geliştirme sürecimizi çok ciddi anlamda kolaylaştırıp verimliliğimizi artırmaktalar.

Node.js için bir çok freamework seçeneğimiz var, Hapi.js, Sails.js, Nodal bunlardan bir kaçı. Biz bu seride diğer bir çok node.js frameworkünün de üzerine inşa edildiği ve node.js dünyasında en çok kullanılan, en çok bilinen framework olan express.js  i kullanacağız.

Express in en güçlü yönü çok minimal ve sade oluşu diyebiliriz. Üstelik bir çok büyük firma tarafından uzun süredir kullanıldığı için, ciddi bir bilgi birikimi oluşmuş durumda. Rahatlıkla ve güvenerek hemen her türlü projenizde kullanabilirsiniz. Sadece toplululuk olarak değil, büyük firmalar tarafından geliştirilen bir çok eklentiye(middleware ve sdk ler) de  sahip express.

Ayrıca, diğer bir çok node web framework ü express üzerine inşa edildiği için, başka bir framework e geçseniz bile express i öğrenmek ve kullanmaktan dolayı ciddi kolaylıklar la karşılaşmanız muhtemel.

npm i kullanarak express i indirip ilk web sunucumuzu yazarak devam edelim,

npm install express --save 

komutuyla, npm express indirip, package.json dosyamıza kayıt edecektir. şimdi index.js dosyamızı açıp ilk sunucumuzu yazarak devam edelim.

index.js

import express from "express"; // express paketini dahil ediyoruz
const PORT = 3000; // sunucumuzu 3000 nolu port u dinleyecek
const app = express(); // express i kullanarak bir sunucu referansi olusturyoruz
//ilk end-point/rotamiz localhost:3000 e yapilacak tum get requestlerini dinleyecek
app.get("/", (req, res) => {
 res.status(200).json({ mesaj: "ilk API rotamiz" });
 //istemciye json formatinda bir cevap gonderiyoruz.
})
app.listen(PORT, () => { console.log(`Sunucumuz ${PORT} nolu port uzerinde calismakta.`) });
//bu satir sunucumuzu baslatacak ve her sey yolunda gittiyse
//konsoldan bizi bilgilendirecek.

Yukaridaki (yorum satırlarını saymazsak) 8 satır kod ile tam teşekküllü  bir web sunucusuna sahip olmuş oluyoruz index.js  i bu şekilde kayıt edip komut satırından aşağıdaki şekilde sunucumuzu çalıştıralım;

npm start

express node ilk sever

npm start komutundan sonra, ilk olarak npm in babel i çalıştrıp gerekli dönüşümleri yerine getiridğini sonrasında sunucumuzun başladığını görmekteyiz. Şimdi, ister bir web tarayıcı ister Postman benzeri bir istemci programı açıp

localhost:3000

adresine ulaşmaya çalışalım. aşağıdaki çıktıyı alıyor olmamız lazım.

Tarayıcı:

ilk request browser

Postman:

ilk request postman

 

Node.js – Babel – Express kurulum

[fvplayer src=”https://s3.amazonaws.com/yazilimgunluguvideo/Node.js_babel_express_kurulum.mp4" url=””]

Sunucumuz gördüğünüz gibi hazır ve çalışır vaziyette. Bir sonraki yazı ile inşallah, express framework a daha detaylı bakıp uygulamamızı daha yetenkli hale getirelim.

Kolay Gelsin.

 

3 thoughts on “Node.js ile Uygulama Geliştirme – 3 : REST Mimarisi ve RESTful Servisler Geliştirme [Kurulum ve Hazırlık]

  1. Elinize sağlık, babel kullanımı ile ilgili bazı merak ettiklerim vardı, çok zor değilmiş ve tam olarak ne yaptığını anlamış oldum 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *