Node.js’de Restful Api Yazmak
Selamlar;
Daha önceki Node.Js nedir makalesinde nodeJS’e giriş yapmıştık. Hatırlayacağınız gibi Javascript kullanarak server side uygulamalar yazabileceğimiz, oluşturduğumuz web uygulamları ve servislerin büyük sayıdaki clientlera minimum kaynak harcıyarak hizmet verebildiği bir platformdur.
Bugün Node.Js’de Restful bir servisin nasıl yazılacağını hep beraber inceleyeceğiz. Kısa da olsa Restful servise değinmek istersek client ile server arasındaki veri alışverişini HTTP protokolü üzerinden sağlıyan, request işlemleri HTTP Methodları ile(POST,PUT,DELETE,GET) ifade edilen bir yapıdır.
Bu uygulamada Node.Js’de en populer olan frameworklerden Express.js’i kullanacağız. Express.js, HTTP ile yapacağımız işleri kolaylaştıran, post işlemlerinin öncesi ve sonrasında yada authentication ve login işlemlerinde, önceden belirleyeceğimiz tanımlamaların her request’de çalıştırılmasını sağlayan bir yapı oluşturur.
Express.js NPM kullanılarak aşağıdaki gibi indirilebilir.
> npm install express
> npm install body-parser
1 2 3 4 5 |
var http = require('http'); var express = require('express'); var bodyParser = require('body-parser'); var cities = [{name: 'Istanbul', country: 'Turkey'}, {name: 'New York', country: 'USA'}, {name: 'London', country:'England'}]; |
Şimdi sıra geldi server’ı 1923 portunda başlatmaya ve express.js üzerinde body-parser’ı çalıştırmaya. Bunun için aşağıdaki kod parçacığı yazılır.
1 2 3 4 5 6 7 8 |
var app = express(); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.listen(1923, function(){ console.log("Port dinleniyor 1923..."); }); |
Command satırına aşağıdaki komut yazılır. Ve server başlatılır.
> node server.js
Yukarıda görüldüğü gibi server başladı. Ve ilgili log console yazıldı. Şu noktada browser üzerinden bir işlem yapamayız. Herhangi bir endpoint yaratmadık. Aşağıda görüldüğü gibi GET işlemi ile tüm şehirleri listeleyebileceğimiz bir API oluşturulur.
1 2 3 |
app.get('/api/cities', function(request, response){ response.send(cities); }); |
Browser üzerinden http://localhost:1923:api/cities yazdığımız zaman aşağıdaki ekran görüntüsünü alırız.
Şimdi sıra geldi yeni bir şehir ekliyeceğimiz API’ye. Bu işlem için POST kullanılacak ve eklenecek olan şehirin var olan listede olup olmadığına bakılılacak. Eğer eklenecek şehir listede var ise “Bu şehir zaten kayıtlı” hata mesajı gönderilecek yok ise yeni şehir cities nesnesine eklenecek. İlgili kod aşağıdadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
app.post('/api/cities', function(request, response){ var city = request.body; console.log(city); for(var index = 0; index < cities.length; index++){ if(cities[index].name === city.name){ response.status(500).send({error: "Bu şehir zaten kayıtlı"}); return; } } cities.push(city); response.send(cities); }); |
Post işlemini test etmek için ben Fiddler kullandım. Aşağıdaki screenshot’da POST API ile http://localhost:1923:api/cities adresine şehir adı: Tokyo ve Ülkesi: Japan olan bir json data gönderilmiştir.
Fiddler: Header’a “Content-Type: application/json” yazmayı unutmayın.
Browser’dan http://localhost:1923:api/cities Url adresine giriş yapıldığı zaman GET işlemi sonucu olarak aşağıdaki ekran görüntüsü alınır. Görüldüğü gibi yeni eklenen Tokyo şehiri ve ülkesi Japan listelenen cities nesnesine dahil olmuştur.
Aynı işlem için PUT methodu da aşağıdaki gibi kullanılabilir. Gene sonuçlar Fiddler’dan test edilebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
app.put('/api/cities/:name', function(request, response){ var city = request.body; console.log(city); for(var index = 0; index < cities.length; index++){ if(cities[index].name === request.params.name){ cities[index].country = city.country; response.send(cities); return; } } response.status(500).send({error: 'Şehir bulunamadı...'}); }); |
Görüldüğü gibi Node.Js ile Restful bir servis yazmak gayet kolaydır. Yeni bir makalede görüşmek üzere hoşçakalın.
Sayenizde node.js ‘e kolay bir giris yapmis oldum hocam.
Elinize saglik.
Tesekkurler Yigit,
NodeJs’in pesini birakma. Sana cok sey katicaktir…
elinize sağlık. Node.js vs SignalR denilse sizin fikriniz ne olurdu?
Birde signalR webineriniz gerçekten çok iyiydi teşekkürler. Özellikle sizin webinerleriniz çok öğretici oluyor.Umarım daha çok webiner yaparsınız.
Teşekkürler
Selam Kağan;
Öncelikle yorumların için teşekkürler.
NodeJS ve SignalR’ı kıyaslamak tam doğru olmayabilir. Öncelikle amacının ne olduğunu ve nasıl bir sistemde çalşacağına göre değişiklik gösterecektir. NodJS’in sihirli bir değnek olduğu gibi bir kanı var ama malesef bu doğru değildir.
İyi çalışmalar.
Bir uygulama yazdik ve veritabani amaciyla (100mb alti boyutta bir vt) json kullandik. Localhostumuzda bunlari yapabiliyoruz peki ucretli aldigimiz sunucularda ornegin hostgatorda bu islemleri nasil yapariz?
Bir de en guncel vt baglantisi icin hangi kutuphaneleri kullaniriz. Bir cok kaynaka bakiyorum dersler onceki senelerden kalma ve deprecated olmus yontemler var. Aydinlatirsaniz sevinirim.
Şöyle ki, şu an aktif nodejs hosting veren varmı bilmiyorum, fakat hosting yerine linux bir vds/vps kiralayıp içerisine kuracaksın.
Putty ile veya cmd>ssh sunucu.ip.adresi:22(port) -l root yazıp aldığın sunucuya giriş yapabilirsin ve nodejs teknolojisini kurabilirsin.
Geç bir cevap oldu, 1,5 yıl kadar :)
Merhabalar şu şekilde bir sorum var,bugüne kadar apilerimi php ile yazıyordum.Nodejs denemek istiyorum ancak performans olarak nasıldır kestiremediğimden henüz cesaret edemiyorum.
Aynı sunucu üzerinde hangisi daha performanslı olur.Sizin tecrübeniz varmı acaba ?
Selamlar,
Node.js php’ye göre kesinlikle daha performanslı ama yazılması daha zor olacaktır.
İyi çalışmalar.
Merhabalar,
Bir mobil uygulama yapmak istiyorum 7 saniyede bir 10.000 kişinin konumunu alarak db ye kaydedecek.
ilk önce mvc ile web api yazmıştım fakat performans anlamında nodejs geçmek istiyorum. sizce 7 sn de bir 10k konumu db yazması için nasıl bir alt yapı oluşturmam gerekir.Bu arada db mssql
Teşekkürler.
Selam Furkan,
Ne yaptın :):) 10000 kişi 7sn bir. Dakikada 600.000 request. Bir de paket içinde position.coords.latitude, position.coords.longitude dataları var.
İyi çalışmalar.
Selam… Faydalı oldu…
Bi sormak istyiorum…
jsonplaceholder api sitesini bilirsiniz…. orda img_url linkini alıp resimlere direk klasor yolunu gerekmeden img src içersinde gosterebiliyoruz yada kullana biliyoruz.. ama bizim yazdığımız restful apide resim klasor yolununda sisteme eklemeliyiz… işte kendi restful apimizde boyle bişeyi nasıl yaparız..