RESTとは何ですか?

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

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

HTTP メソッド

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

  • GET - データをフェッチするために使用されます。

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

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

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

RESTful Web Services

Web サービスは、プラットフォームに依存せず、結合度が低く、自己完結型のプログラム可能な Web ベースのアプリケーションであり、相互運用可能な分散アプリケーションの開発のために、これらのアプリケーションの記述、公開、検出、調整、構成を行うことができます。

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

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

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

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 GET empty すべてのユーザーのリストを表示
2 addUser POST JSON 文字列 新しいユーザーを追加
3 deleteUser DELETE JSON 文字列 ユーザーを削除
4 :id GET ユーザーの詳細を表示

ユーザーリストの取得:

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

ブラウザで 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 を作成しました。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)

})

次に、次のコマンドを実行します。

$ node server.js 
応用例、アクセスアドレスは http://0.0.0.0:8081

ブラウザで http://127.0.0.1:8081/2 にアクセスすると、結果は次のようになります。

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

ユーザーを削除

次のコードでは、指定したユーザーの詳細情報を削除するために使用される RESTful API deleteUser を作成しました。次の例では、ユーザー ID は 2 で、 server.js ファイルは次のとおりです。

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" + id];
       
       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/deleteUser にアクセスすると、結果は次のようになります。

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