Node.js RESTful API


REST란 무엇인가요?

REST(영어: Representational State Transfer, REST라고도 함)는 Roy Fielding 박사가 2000년 박사 논문에서 제안한 소프트웨어 아키텍처 스타일입니다.

Representational State Transfer는 일련의 아키텍처 제약 조건과 원칙입니다. 이러한 제약과 원칙을 만족하는 애플리케이션이나 디자인이 RESTful입니다. REST는 표준이 아니라 디자인 스타일이라는 점에 유의하는 것이 중요합니다. REST는 일반적으로 HTTP, URI, XML(표준 일반화 마크업 언어의 하위 집합) 및 HTML(표준 일반화 마크업 언어의 응용 프로그램)을 사용하여 널리 사용되는 기존 프로토콜 및 표준을 기반으로 합니다. REST는 일반적으로 JSON 데이터 형식을 사용합니다.

HTTP 메서드

다음은 REST 기본 아키텍처의 네 가지 메서드입니다.


  • GET - 데이터를 얻는 데 사용됩니다.

  • PUT - 데이터 추가용.

  • DELETE - 데이터를 삭제하는 데 사용됩니다.

  • POST - 데이터를 업데이트하거나 추가하는 데 사용됩니다.


RESTful 웹 서비스

웹 서비스는 개방형 XML(표준 일반화 마크업 언어의 하위 집합) 표준을 사용하여 설명할 수 있는 플랫폼 독립적이고 낮은 결합, 자체 포함, 프로그래밍 가능 웹 기반 애플리케이션입니다. 분산되고 상호 운용 가능한 애플리케이션 개발을 위해 이러한 애플리케이션을 게시, 검색, 조정 및 구성합니다.

REST 아키텍처 기반 웹 서비스는 RESTful입니다.

웹 서비스에 대한 RESTful 접근 방식은 가벼운 특성과 HTTP를 통해 직접 데이터를 전송할 수 있는 기능으로 인해 가장 일반적인 대안이 되었습니다. 클라이언트는 Javascript, Perl, Ruby, Python, PHP 및 Javascript(Ajax 포함)와 같은 다양한 언어를 사용하여 구현할 수 있습니다.

RESTful 웹 서비스는 일반적으로 사용자를 대신하여 자동화된 클라이언트 또는 애플리케이션을 통해 액세스할 수 있습니다. 그러나 이 서비스의 단순성으로 인해 사용자는 웹 브라우저를 사용하여 GET URL을 구성하고 반환된 콘텐츠를 읽는 방식으로 직접 상호 작용할 수 있습니다.

자세한 소개는 다음을 참조하세요. RESTful 아키텍처 세부 설명


Create 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:

일련 번호URIHTTP 메서드콘텐츠 보내기Result
1listUsersGETempty 모든 사용자 목록 표시
2addUserPOST JSON 문자열새 사용자 추가
3deleteUserDELETEJSON 문자열사용자 삭제
4:idGET 비어있음 사용자 세부 정보 표시 Information

사용자 목록 가져오기:

다음 코드를 사용하여 사용자 정보 목록을 읽는 데 사용되는 RESTful API listUsers를 만들었습니다. 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("应用实例,访问地址为 http://%s:%s", host, port)

})

다음으로 다음을 실행합니다. 명령:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

In Access http://127.0.0.1:8081/listUsers를 브라우저에서 실행하면 결과는 다음과 같습니다.

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

Add user

다음 코드를 사용하여 RESTful API addUser를 만들었습니다. 새로운 사용자 데이터를 추가하는 데 사용되는 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.get('/addUser', function (req, res) {
   // 读取已存在的数据
   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("应用实例,访问地址为 http://%s:%s", host, port)

})

다음으로 다음 명령을 실행합니다.

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

브라우저에서 http://127.0.0.1:8081/addUser를 방문하면 결과는 다음과 같습니다.

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

사용자 세부 정보 표시

아래 코드에서는 지정된 사용자의 세부 정보를 읽는 데 사용되는 RESTful API :id(사용자 ID)를 만들었습니다. server.js 파일 코드는 다음과 같습니다.

다음으로 다음 명령을 실행합니다.

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

app.get('/:id', function (req, res) {
   // 首先我们读取已存在的用户
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       var user = data["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("应用实例,访问地址为 http://%s:%s", host, port)

})

브라우저에서 http://127.0.0.1:8081/2에 액세스하면 결과는 다음과 같습니다.

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

사용자 삭제

다음 코드를 사용하여 RESTful API를 만들었습니다. 지정된 사용자의 세부 정보를 삭제하는 데 사용되는

deleteUser는 다음 예에서 사용자 ID는 2이고 server.js 파일 코드는 다음과 같습니다.

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

다음으로 다음 명령을 실행합니다.

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

var id = 2;

app.get('/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("应用实例,访问地址为 http://%s:%s", host, port)

})

브라우저에서 http://127.0.0.1:8081/deleteUser를 방문하면 결과는 다음과 같습니다:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081