Node.js - RESTful API

REST mimarisi nedir?

REST, Temsili Durum Transferi anlamına gelir. REST, web standartları tabanlı bir mimaridir ve HTTP Protokolünü kullanır. Her bileşenin bir kaynak olduğu ve bir kaynağa HTTP standart yöntemlerini kullanan ortak bir arayüzle erişildiği bir kaynak etrafında döner. REST, ilk olarak 2000 yılında Roy Fielding tarafından tanıtıldı.

Bir REST Sunucusu, kaynaklara ve REST istemcisine erişim sağlar ve HTTP protokolünü kullanarak kaynakları değiştirir. Burada her bir kaynak, URI'ler / global ID'ler ile tanımlanır. REST, metin, JSON, XML gibi bir kaynağı temsil etmek için çeşitli temsiller kullanır, ancak JSON en popüler olanıdır.

HTTP yöntemleri

Aşağıdaki dört HTTP yöntemi, REST tabanlı mimaride yaygın olarak kullanılmaktadır.

  • GET - Bu, bir kaynağa salt okunur erişim sağlamak için kullanılır.

  • PUT - Bu, yeni bir kaynak oluşturmak için kullanılır.

  • DELETE - Bu, bir kaynağı kaldırmak için kullanılır.

  • POST - Bu, mevcut bir kaynağı güncellemek veya yeni bir kaynak oluşturmak için kullanılır.

RESTful Web Hizmetleri

Web hizmeti, uygulamalar veya sistemler arasında veri alışverişi için kullanılan açık protokoller ve standartların bir koleksiyonudur. Çeşitli programlama dillerinde yazılan ve çeşitli platformlarda çalışan yazılım uygulamaları, tek bir bilgisayardaki süreçler arası iletişime benzer bir şekilde İnternet gibi bilgisayar ağları üzerinden veri alışverişi yapmak için web hizmetlerini kullanabilir. Bu birlikte çalışabilirlik (örneğin, Java ile Python arasındaki iletişim veya Windows ve Linux uygulamaları) açık standartların kullanımından kaynaklanmaktadır.

REST Mimarisine dayalı web servisleri, RESTful web servisleri olarak bilinir. Bu web hizmetleri, REST mimarisi konseptini uygulamak için HTTP yöntemlerini kullanır. Bir RESTful web hizmeti genellikle bir URI, Tekdüzen Kaynak Tanımlayıcı, JSON ve HTTP Yöntemleri kümesi gibi kaynak gösterimi sağlayan bir hizmeti tanımlar.

Bir Kitaplık İçin RESTful Oluşturma

Aşağıdaki kullanıcıların bir dosyada bulunduğu JSON tabanlı bir veritabanımız olduğunu düşünün users.json:

{
   "user1" : {
      "name" : "mahesh",
      "password" : "password1",
      "profession" : "teacher",
      "id": 1
   },
   
   "user2" : {
      "name" : "suresh",
      "password" : "password2",
      "profession" : "librarian",
      "id": 2
   },
   
   "user3" : {
      "name" : "ramesh",
      "password" : "password3",
      "profession" : "clerk",
      "id": 3
   }
}

Bu bilgilere dayanarak, aşağıdaki RESTful API'leri sağlayacağız.

Sr.No. URI HTTP Yöntemi POST gövdesi Sonuç
1 listUsers ALMAK boş Tüm kullanıcıların listesini göster.
2 Kullanıcı Ekle İLETİ JSON Dizesi Yeni kullanıcının ayrıntılarını ekleyin.
3 kullanıcıyı sil SİL JSON Dizesi Mevcut bir kullanıcıyı silin.
4 :İD ALMAK boş Bir kullanıcının ayrıntılarını gösterin.

Ajax veya basit form verilerini kullanarak ön uçtan değerleri nasıl aktaracağınızı ve bunları ifade kullanarak nasıl işleyeceğinizi zaten bildiğinizi varsayarak, tüm örneklerin çoğunu sabit kodlama biçiminde tutuyorum. Request nesne.

Kullanıcıları Listele

İlk RESTful API'mizi uygulayalım listUsers bir server.js dosyasında aşağıdaki kodu kullanarak -

server.js

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/listUsers', function (req, res) {
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
      console.log( data );
      res.end( data );
   });
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)
})

Şimdi , herhangi bir REST istemcisini kullanarak yerel makinede http://127.0.0.1:8081/listUsers ve HTTP Metodu: GET URL'sini kullanarak tanımlı API'ye erişmeyi deneyin . Bu, aşağıdaki sonucu vermelidir -

Çözümü üretim ortamına koyacağınız zaman verilen IP adresini değiştirebilirsiniz.

{
   "user1" : {
      "name" : "mahesh",
      "password" : "password1",
      "profession" : "teacher",
      "id": 1
   },
   
   "user2" : {
      "name" : "suresh",
      "password" : "password2",
      "profession" : "librarian",
      "id": 2
   },
   
   "user3" : {
      "name" : "ramesh",
      "password" : "password3",
      "profession" : "clerk",
      "id": 3
   }
}

Kullanıcı Ekle

Aşağıdaki API, listeye nasıl yeni kullanıcı ekleyeceğinizi gösterecektir. Yeni kullanıcının detayı aşağıdadır -

user = {
   "user4" : {
      "name" : "mohit",
      "password" : "password4",
      "profession" : "teacher",
      "id": 4
   }
}

Aynı girdiyi Ajax çağrısını kullanarak JSON biçiminde kabul edebilirsiniz, ancak bakış açısını öğretmek için burada kodlanmış hale getiriyoruz. AşağıdakiaddUser Veritabanındaki yeni bir kullanıcıya API -

server.js

var express = require('express');
var app = express();
var fs = require("fs");

var user = {
   "user4" : {
      "name" : "mohit",
      "password" : "password4",
      "profession" : "teacher",
      "id": 4
   }
}

app.post('/addUser', function (req, res) {
   // First read existing users.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
      data = JSON.parse( data );
      data["user4"] = user["user4"];
      console.log( data );
      res.end( JSON.stringify(data));
   });
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)
})

Şimdi , herhangi bir REST istemcisini kullanarak yerel makinede http://127.0.0.1:8081/addUser ve HTTP Metodu: POST URL'sini kullanarak tanımlı API'ye erişmeyi deneyin . Bu, aşağıdaki sonucu vermelidir -

{
   "user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
   "user2":{"name":"suresh","password":"password2","profession":"librarian","id":2},
   "user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3},
   "user4":{"name":"mohit","password":"password4","profession":"teacher","id":4}
}

Detayları göster

Şimdi, kullanıcı kimliği kullanılarak çağrılacak ve ilgili kullanıcının ayrıntılarını gösterecek bir API uygulayacağız.

server.js

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/:id', function (req, res) {
   // First read existing users.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
      var users = JSON.parse( data );
      var user = users["user" + req.params.id] 
      console.log( user );
      res.end( JSON.stringify(user));
   });
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)
})

Şimdi , herhangi bir REST istemcisini kullanarak yerel makinede http://127.0.0.1:8081/2 URL'sini ve HTTP Metodu: GET'i kullanarak tanımlı API'ye erişmeyi deneyin . Bu, aşağıdaki sonucu vermelidir -

{"name":"suresh","password":"password2","profession":"librarian","id":2}

Kullanıcıyı sil

Bu API, req.body aracılığıyla girdi verilerini aldığımız addUser API'sine çok benzer ve ardından kullanıcı kimliğini temel alarak bu kullanıcıyı veritabanından siliyoruz. Programımızı basit tutmak için, kimliği 2 olan kullanıcıyı sileceğimizi varsayıyoruz.

server.js

var express = require('express');
var app = express();
var fs = require("fs");

var id = 2;

app.delete('/deleteUser', function (req, res) {
   // First read existing users.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
      data = JSON.parse( data );
      delete data["user" + 2];
       
      console.log( data );
      res.end( JSON.stringify(data));
   });
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)
})

Şimdi , herhangi bir REST istemcisini kullanarak yerel makinede http://127.0.0.1:8081/deleteUser ve HTTP Yöntemi: DELETE URL'sini kullanarak tanımlı API'ye erişmeyi deneyin . Bu, aşağıdaki sonucu vermelidir -

{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}