AZCode.vn AZCode

RESTful API trong Node.js

Kiến trúc REST là gì ?

REST là viết tắt của Representational State Tranfer. REST là một chuẩn web dựa vào các kiến trúc cơ bản sử dụng giao thức HTTP. Nó xử lí tài nguyên, nơi mà mỗi thành phần là một tài nguyên và nguồn tài nguyên này có thể được truy cập qua các giao diện chung bởi sử dụng các phương thức HTTP chuẩn. REST lần đầu tiên được giới thiệu bởi Roy Fielding năm 2000.

Về cơ bản, một REST Server cung cấp các chế độ truy cập đến nguồn tài nguyên và REST Client truy cập và sửa đổi các nguồn tài nguyên này bởi sử dụng phương thức HTTP. Ở đây mỗi nguồn tài nguyên được xác định bởi một URI. REST sử dụng các cách biểu diễn khác nhau để biểu diễn các nguồn tài nguyên như text, JSON, XML nhưng phổ biến nhất vẫn là JSON.

Phương thức HTTP được sử dụng trong REST

Dưới đây là các phương thức HTTP được sử dụng rộng rãi trong kiến trúc REST .

  • GET - Được sử dụng chỉ để đọc các nguồn tài nguyên.

  • PUT - Được sử đụng để tạo mới các nguồn tài nguyên.

  • DELETE - Được sử dụng để xóa các nguồn tài nguyên.

  • POST - Được sử dụng để cập nhật các bản ghi hiện tại và tạo mới nguồn tài nguyên.

RESTful Web Service

Một web service là một tập hợp các giao thức và chuẩn được sử dụng cho mục đích trao đối giữa ứng dụng và hệ thống. Các ứng dụng phần mềm được viết bởi các ngôn ngữ khác nhau và chạy bởi các nền tảng khác nhau có thể sử dụng web service để trao đổi dữ liệu qua mạng máy tính như internet theo các cách tương tự như trao đổi trên một máy tính.

Web service dựa trên các kiến trúc REST được biết như RESTful webservice . Những webservice này sử dụng phương thức HTTP để triển khai các định nghĩa kiến trúc REST. Một RESTful web service thường được định nghĩa một URI (kiểu như đường dẫn), Uniform Resource Identifier như một service (dịch vụ).

Tạo RESTful cho một thư viện

Giả sử chúng ta có một cơ sở dữ liệu dựa trên JSON chứa thông tin về User, tên file là users.json:

{
   "user1" : {
      "name" : "huong",
	  "password" : "password1",
	  "profession" : "sinhvien",
	  "id": 1
   },
   "user2" : {
      "name" : "manh",
	  "password" : "password2",
	  "profession" : "giangvien",
	  "id": 2
   },
   "user3" : {
      "name" : "tuyen",
	  "password" : "password3",
	  "profession" : "laptrinhvien",
	  "id": 3
   }
}

Dựa vào các thông tin cơ bản này, chúng ta sẽ cung cấp các RESTful API sau đây:

SttURIPhương thức HTTPPOST bodyKết quả
1listUsersGETemptyHiển thị danh sách user
2addUserPOSTJSON StringThêm một user mới
3deleteUserDELETEJSON StringXóa một user hiện tại.
4:idGETemptyHiển thị chi tiết một user

Liệt kê các User

Chúng ta cùng triển khai RESTful API đầu tiên có tên listUsers bởi sử dụng đoạn code sau đây:

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("Ung dung Node.js dang lang nghe tai dia chi: http://%s:%s", host, port)

})

Bây giờ thử truy cập API đã được định nghĩa trên bởi sử dụng http://127.0.0.1:8081/listUsers trên máy tính local. Nó sẽ cho ra kết quả sau đây:

{
   "user1" : {
      "name" : "huong",
      "password" : "password1",
      "profession" : "sinhvien",
      "id": 1
   },
   "user2" : {
      "name" : "manh",
      "password" : "password2",
      "profession" : "giangvien",
      "id": 2
   },
   "user3" : {
      "name" : "tuyen",
      "password" : "password3",
      "profession" : "laptrinhvien",
      "id": 3
   }
}

Thêm User mới

API sau chỉ ra cách thêm một User mới vào danh sách. Dưới đây là thông tin của User mới:

user = {
   "user4" : {
      "name" : "hoang",
      "password" : "password4",
      "profession" : "sinhvien",
      "id": 4
   }
}

Bạn có thể sử dụng Ajax để thực hiện việc này, nhưng để đơn giản chúng ta sẽ hard code ở đây. Dưới đây là phương thức addUser API để thêm một user mới trong cơ sở dữ liệu.

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

var user = {
   "user4" : {
      "name" : "hoang",
      "password" : "password4",
      "profession" : "sinhvien",
      "id": 4
   }
}

app.get('/addUser', function (req, res) {
   // Dau tien, doc tat ca cac User dang ton tai.
   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("Ung dung Node.js dang lang nghe tai dia chi: http://%s:%s", host, port)

})

Bây giờ thử truy cập API trên bởi sử dụng http://127.0.0.1:8081/addUsers trên máy tính local. Kết quả sẽ được hiện ra như sau:

{ user1:
   { name: 'huong',
     password: 'password1',
     profession: 'sinhvien',
     id: 1 },
  user2:
   { name: 'manh',
     password: 'password2',
     profession: 'giangvien',
     id: 2 },
  user3:
   { name: 'tuyen',
     password: 'password3',
     profession: 'laptrinhvien',
     id: 3 },
  user4:
   { name: 'hoang',
     password: 'password4',
     profession: 'sinhvien',
     id: 4 } 
}

Hiển thị thông in của User

Bây giờ cùng triển khai một API mà gọi đến userID để hiển thị chi tiết thông tin User tương ứng.

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

app.get('/:id', function (req, res) {
   // Dau tien, doc tat ca cac User dang ton tai.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       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("Ung dung Node.js dang lang nghe tai dia chi: http://%s:%s", host, port)

})

Tiêp đó, bạn gọi service trên bởi sử dụng địa chỉ http://127.0.0.1:8081/2 trên máy tính local. Kết quả sẽ như sau:

{
   "name":"manh",
   "password":"password2",
   "profession":"giangvien",
   "id":2
}

Xóa User

API này tương tự như addUser API, tại đây bạn có thể nhận một dữ liệu đầu vào thông qua req.body và sau đó dựa vào userID để xóa User đó khỏi Database. Để đơn giản, giả sử chúng ta xóa user có ID là 2.

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

var id = 2;

app.get('/deleteUser', function (req, res) {

   // Dau tien, doc tat ca cac User dang ton tai.
   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("Ung dung Node.js dang lang nghe tai dia chi: http://%s:%s", host, port)

})

Gọi service trên bởi sử dụng http://127.0.0.1:8081/deleteUser trên máy local . Nó sẽ cho ra kết quả sau đây:

{ user1:
   { name: 'huong',
     password: 'password1',
     profession: 'sinhvien',
     id: 1 },
  user3:
   { name: 'tuyen',
     password: 'password3',
     profession: 'laptrinhvien',
     id: 3 } 
}

Các bài học NodeJS phổ biến khác tại AZCode: