Node.js RESTful API
什麼是REST架構?
REST表示代表性狀態傳輸。REST是一種基於Web標準的架構,並使用HTTP協議。 它都是圍繞著資源,其中每一個組件是資源和一個資源是由一個共同的接口使用HTTP的標準方法獲得。REST最初是由Roy Fielding在2000年推出。
一個REST服務器隻是提供的資源和REST客戶端訪問和使用HTTP協議修改的資源。這裡每個資源由URI標識的/全局標識。其餘部分使用各個表示形式表示相同的文字,JSON和XML資源;但JSON是最流行的一種。
HTTP 方法
以下四個HTTP方法通常用在基於REST架構。
-
GET - 這是用來提供對資源的隻讀訪問。
-
PUT - 這被用來創建新的資源。
-
DELETE - 這是用來刪除資源。
-
POST - 這被用於更新現有資源或者創建新的資源。
RESTful Web服務
Web服務是用於交換應用程序或係統之間的數據開放的協議和標準的集合。寫在各種編程語言和運行在不同平台上的軟件應用程序可以使用Web服務來以類似於進程間通信在單台計算機上的方式通過計算機網絡進行交換數據,如因特網。 這種互操作性(如Java和Python,或Windows和Linux應用程序之間的通信)是由於使用開放標準。
基於REST架構的Web服務稱為RESTful web服務。這些Web服務使用HTTP方法來實現REST架構的概念。RESTful Web服務通常定義的URI,統一資源標識符一項服務,它提供資源表示,如JSON,並設置HTTP方法。
為一個庫創建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。
S. N. | URI | HTTP 方法 | POST 主體 | 結果 |
---|---|---|---|---|
1 | listUsers | GET | empty | 顯示所有用戶的列表 |
2 | addUser | POST | JSON String | 添加新用戶的詳細信息 |
3 | deleteUser | DELETE | JSON String | 刪除現有用戶 |
4 | :id | GET | empty | 查看用戶的詳細 |
保持最全的例子部分的硬編碼假設的形式,你已經知道如何通過使用Ajax或簡單的表單數據,以及如何使用 express Request對象來處理前端的值。
用戶列表
讓我們用下麵的代碼在server.js文件中,實現我們的第一個基於RESTful API 的 listUsers:
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,訪問 http://127.0.0.1:8081/listUsers 在本地機器上,這將產生以下結果:
可以更改指定的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來在數據庫中的新的用戶:
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) { // 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: http://127.0.0.1:8081/addUsers 在本地計算機上。這將產生以下結果:
{ 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 } }
顯示詳細信息
現在,我們將執行將使用用戶ID被稱為API,它會顯示相應用戶的詳細信息。
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) { data = 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) })
現在,讓我們把上述服務中使用 http://127.0.0.1:8081/2 在本地計算機上。這將產生以下結果:
{ "name":"suresh", "password":"password2", "profession":"librarian", "id":2 }
刪除用戶
這個API是非常相似API addUser,我們接收通過req.body輸入數據,然後根據我們從數據庫中刪除該用戶的用戶ID。為了讓我們的程序簡單,我們假設我們要刪除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("Example app listening at http://%s:%s", host, port) })
現在,讓我們把上述服務中使用 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 } }