Node.js RESTful API


RESTとは何ですか?

REST(英語: Representational State Transfer、以下REST)とは、ロイ・フィールディング博士が2000年に博士論文で提唱したソフトウェアアーキテクチャスタイルです。

表現状態の転送は、一連のアーキテクチャ上の制約と原則です。これらの制約と原則を満たすアプリケーションまたは設計は RESTful です。 REST は設計スタイルであり、標準ではないことに注意することが重要です。 REST は通常、HTTP、URI、XML (標準汎用マークアップ言語のサブセット) および HTML (標準汎用マークアップ言語のアプリケーション) を使用した、広く普及している既存のプロトコルと標準に基づいています。 REST は通常、JSON データ形式を使用します。

HTTP メソッド

REST 基本アーキテクチャの 4 つのメソッドは次のとおりです:


  • GET - データを取得するために使用されます。

  • PUT - データを追加します。

  • DELETE - データを削除するために使用されます。

  • POST - データの更新または追加に使用されます。


RESTful Web サービス

Web サービスは、オープン XML (標準汎用マークアップ言語のサブセット) 標準を使用して以下を記述することができる、プラットフォームに依存せず、結合度が低く、自己完結型のプログラム可能な Web ベースのアプリケーションです。分散された相互運用可能なアプリケーションの開発のために、これらのアプリケーションを公開、検出、調整、および構成します。

REST アーキテクチャに基づく Web サービスは RESTful です。

Web サービスに対する RESTful アプローチは、その軽量な性質と HTTP 経由でデータを直接転送できるため、最も一般的な代替手段となっています。クライアントは、JavaScript、Perl、Ruby、Python、PHP、Javascript (Ajax を含む) などのさまざまな言語を使用して実装できます。

RESTful Web サービスは通常、ユーザーに代わって自動化されたクライアントまたはアプリケーションを通じてアクセスできます。ただし、このサービスはシンプルであるため、ユーザーは Web ブラウザを使用してサービスを直接操作し、GET URL を構築し、返されたコンテンツを読み取ることができます。

詳細については、以下を参照してください: RESTful アーキテクチャの詳細な説明


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メソッドSend contentResult
1listUsersGETempty 全ユーザーリストを表示
2addUserPOST JSON文字列新しいユーザーを追加
3deleteUserDELETEJSON文字列ユーザーを削除
4:idGET 空です ユーザーの詳細情報を表示します

ユーザーリストを取得します:

次のコードを使用して、ユーザーの情報リストを読み取るために使用される 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

ブラウザーの 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
   }
}

ユーザーの追加

次のコードを使用して、RESTful API addUser を作成しました。新しいユーザー データを追加するために使用されるサーバーの 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