Node.js - RESTful API

สถาปัตยกรรม REST คืออะไร?

REST ย่อมาจาก REpresentational State Transfer REST เป็นสถาปัตยกรรมตามมาตรฐานเว็บและใช้โปรโตคอล HTTP มันหมุนรอบทรัพยากรที่ทุกองค์ประกอบเป็นทรัพยากรและทรัพยากรถูกเข้าถึงโดยอินเทอร์เฟซทั่วไปโดยใช้วิธีมาตรฐาน HTTP REST เปิดตัวครั้งแรกโดย Roy Fielding ในปี 2000

เซิร์ฟเวอร์ REST เพียงแค่ให้การเข้าถึงทรัพยากรและไคลเอนต์ REST เข้าถึงและแก้ไขทรัพยากรโดยใช้โปรโตคอล HTTP ที่นี่แต่ละทรัพยากรจะถูกระบุโดย URI / global IDs REST ใช้การแทนค่าต่างๆเพื่อแสดงทรัพยากรเช่นข้อความ JSON XML แต่ JSON เป็นที่นิยมมากที่สุด

วิธี HTTP

โดยทั่วไปใช้วิธี HTTP สี่วิธีต่อไปนี้ในสถาปัตยกรรมที่ใช้ REST

  • GET - ใช้เพื่อให้การเข้าถึงทรัพยากรแบบอ่านอย่างเดียว

  • PUT - ใช้เพื่อสร้างทรัพยากรใหม่

  • DELETE - ใช้เพื่อลบทรัพยากร

  • POST - ใช้เพื่ออัปเดตทรัพยากรที่มีอยู่หรือสร้างทรัพยากรใหม่

บริการเว็บที่น่าสนใจ

บริการเว็บคือชุดของโปรโตคอลและมาตรฐานแบบเปิดที่ใช้สำหรับแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันหรือระบบ แอปพลิเคชันซอฟต์แวร์ที่เขียนด้วยภาษาโปรแกรมต่างๆและทำงานบนแพลตฟอร์มต่างๆสามารถใช้บริการเว็บเพื่อแลกเปลี่ยนข้อมูลผ่านเครือข่ายคอมพิวเตอร์เช่นอินเทอร์เน็ตในลักษณะที่คล้ายกับการสื่อสารระหว่างกระบวนการบนคอมพิวเตอร์เครื่องเดียว ความสามารถในการทำงานร่วมกันนี้ (เช่นการสื่อสารระหว่าง Java และ Python หรือแอปพลิเคชัน Windows และ Linux) เกิดจากการใช้มาตรฐานเปิด

บริการเว็บที่ใช้สถาปัตยกรรม REST เรียกว่าบริการเว็บ RESTful บริการเว็บเหล่านี้ใช้วิธี HTTP เพื่อใช้แนวคิดของสถาปัตยกรรม REST โดยทั่วไปแล้วบริการเว็บ RESTful จะกำหนด URI, Uniform Resource Identifier a service ซึ่งจัดเตรียมการแสดงทรัพยากรเช่น JSON และชุดของ HTTP Methods

การสร้าง RESTful สำหรับห้องสมุด

พิจารณาว่าเรามีฐานข้อมูลที่ใช้ JSON ของผู้ใช้ที่มีผู้ใช้ต่อไปนี้ในไฟล์ 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
   }
}

จากข้อมูลนี้เราจะให้บริการ RESTful API ต่อไปนี้

ซีเนียร์ URI วิธี HTTP โพสต์ร่างกาย ผลลัพธ์
1 listUsers รับ ว่างเปล่า แสดงรายชื่อผู้ใช้ทั้งหมด
2 addUser โพสต์ สตริง JSON เพิ่มรายละเอียดของผู้ใช้ใหม่
3 deleteUser ลบ สตริง JSON ลบผู้ใช้ที่มีอยู่
4 : id รับ ว่างเปล่า แสดงรายละเอียดของผู้ใช้

ฉันเก็บส่วนใหญ่ของตัวอย่างทั้งหมดไว้ในรูปแบบของการเข้ารหัสแบบยากโดยสมมติว่าคุณรู้วิธีส่งค่าจากส่วนหน้าโดยใช้ Ajax หรือข้อมูลแบบฟอร์มอย่างง่ายและวิธีการประมวลผลโดยใช้ express Request วัตถุ.

รายชื่อผู้ใช้

มาใช้ RESTful API ตัวแรกของเรากัน listUsers โดยใช้รหัสต่อไปนี้ในไฟล์ server.js -

เซิร์ฟเวอร์ 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)
})

ตอนนี้พยายามเข้าถึง API ที่กำหนดโดยใช้URL: http://127.0.0.1:8081/listUsersและวิธี HTTP: รับบนเครื่องท้องถิ่นโดยใช้ไคลเอนต์ REST ใด ๆ สิ่งนี้ควรให้ผลลัพธ์ดังต่อไปนี้ -

คุณสามารถเปลี่ยนที่อยู่ IP ที่ระบุเมื่อคุณจะวางโซลูชันในสภาพแวดล้อมการผลิต

{
   "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
   }
}

เพิ่มผู้ใช้

API ต่อไปนี้จะแสดงวิธีเพิ่มผู้ใช้ใหม่ในรายการ ต่อไปนี้เป็นรายละเอียดของผู้ใช้ใหม่ -

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

คุณสามารถยอมรับอินพุตเดียวกันในรูปแบบของ JSON โดยใช้การโทร Ajax แต่สำหรับมุมมองการสอนเรากำลังทำให้มันยากที่จะเข้ารหัสที่นี่ ต่อไปนี้คือไฟล์addUser API ไปยังผู้ใช้ใหม่ในฐานข้อมูล -

เซิร์ฟเวอร์ 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)
})

ตอนนี้พยายามเข้าถึง API ที่กำหนดโดยใช้URL: http://127.0.0.1:8081/addUserและวิธี HTTP: POSTบนเครื่องโลคัลโดยใช้ไคลเอนต์ REST ใด ๆ สิ่งนี้ควรให้ผลลัพธ์ดังต่อไปนี้ -

{
   "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}
}

แสดงรายละเอียด

ตอนนี้เราจะใช้ API ซึ่งจะเรียกโดยใช้ ID ผู้ใช้และจะแสดงรายละเอียดของผู้ใช้ที่เกี่ยวข้อง

เซิร์ฟเวอร์ 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)
})

ตอนนี้พยายามเข้าถึง API ที่กำหนดโดยใช้URL: http://127.0.0.1:8081/2และวิธี HTTP: รับบนเครื่องท้องถิ่นโดยใช้ไคลเอนต์ REST ใด ๆ สิ่งนี้ควรให้ผลลัพธ์ดังต่อไปนี้ -

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

ลบผู้ใช้

API นี้คล้ายกับ addUser API ที่เรารับข้อมูลอินพุตผ่าน req.body จากนั้นอิงตาม ID ผู้ใช้ที่เราลบผู้ใช้นั้นออกจากฐานข้อมูล เพื่อให้โปรแกรมของเราเรียบง่ายเราถือว่าเรากำลังจะลบผู้ใช้ที่มี ID 2

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)
})

ตอนนี้พยายามเข้าถึง API ที่กำหนดโดยใช้URL: http://127.0.0.1:8081/deleteUserและวิธี HTTP: ลบบนเครื่องท้องถิ่นโดยใช้ไคลเอนต์ REST ใด ๆ สิ่งนี้ควรให้ผลลัพธ์ดังต่อไปนี้ -

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