Node.js | RESTful API
📑 目錄
簡介 什麼是 REST? HTTP 方法 RESTful Web Services 建立 RESTful 獲取用戶列表 新增用戶 顯示用戶詳情 刪除用戶 完整程式碼
簡介 什麼是 REST? REST即表述性狀態傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。
表述性狀態轉移是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是RESTful。需要注意的是,REST是設計風格而不是標準。REST通常基於使用HTTP,URI,和XML(標准通用標記語言下的一個子集)以及HTML(標准通用標記語言下的一個應用)這些現有的廣泛流行的協議和標準。REST通常使用JSON資料格式。
HTTP 方法 以下為REST基本架構的四個方法:
GET:用於獲取資料。
PUT:用於更新或添加資料。
DELETE:用於刪除資料。
POST:用於添加資料。
RESTful Web Services Web service是一個平台獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可使用開放的XML(標准通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用於開發分佈式的互操作的應用程序。
基於REST架構的Web Services即是RESTful。
由於輕量級以及通過HTTP直接傳輸資料的特性,Web服務的RESTful方法已經成為最常見的替代方法。可以使用各種語言(比如Java程序、Perl、Ruby、Python、PHP和Javascript[包括Ajax])實現客戶端。
RESTful Web服務通常可以通過自動客戶端或代表用戶的應用程序訪問。但是,這種服務的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構建一個GET URL並讀取返回的內容。
建立 RESTful 建立一個json資料資源文件users.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "user1" : { "name" : "morosedog" , "password" : "password1" , "profession" : "engineer" , "id" : 1 }, "user2" : { "name" : "morosecat" , "password" : "password2" , "profession" : "systemAnalyst" , "id" : 2 }, "user3" : { "name" : "morosebear" , "password" : "password3" , "profession" : "systemDesigner" , "id" : 3 } }
基於以上資料,我們建立以下RESTful API:
序號
URI
HTTP方法
發送內容
結果
1
listUsers
GET
空
顯示所有用戶列表
2
addUser
POST
JSON 字符串
添加新用戶
3
deleteUser
DELETE
JSON 字符串
刪除用戶
4
:id
GET
空
顯示用戶詳細訊息
獲取用戶列表 RESTful API listUsers,用於讀取用戶的訊息列表,server.js。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( data ); }); }) var server = app.listen(8081 , '0.0.0.0' , function ( ) { var host = server.address().address var port = server.address().port console .log("瀏覽地址為 http://%s:%s" , host, port) })
執行結果如下:
1 2 $ node server.js 瀏覽地址為 http://0.0.0.0:8081
開啟瀏覽器瀏覽:
1 http://0.0.0.0:8081/listUsers
顯示結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "user1" : { "name" : "morosedog", "password" : "password1", "profession" : "engineer", "id": 1 }, "user2" : { "name" : "morosecat", "password" : "password2", "profession" : "systemAnalyst", "id": 2 }, "user3" : { "name" : "morosebear", "password" : "password3", "profession" : "systemDesigner", "id": 3 } }
新增用戶 RESTful API addUser,用於新增用戶,server.js。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 var express = require ('express' );var app = express();var fs = require ("fs" );var user = { "user4" : { "name" : "morosefish" , "password" : "password4" , "profession" : "projectManager" , "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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(data)); }); }) var server = app.listen(8081 , '0.0.0.0' , function ( ) { var host = server.address().address var port = server.address().port console .log("瀏覽地址為 http://%s:%s" , host, port) })
執行結果如下:
1 2 $ node server.js 瀏覽地址為 http://0.0.0.0:8081
開啟瀏覽器瀏覽:
1 http://0.0.0.0:8081/addUsers
顯示結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 { user1: { name: 'morosedog', password: 'password1', profession: 'engineer', id: 1 }, user2: { name: 'morosecat', password: 'password2', profession: 'systemAnalyst', id: 2 }, user3: { name: 'morosebear', password: 'password3', profession: 'systemDesigner', id: 3 }, user4: { name: 'morosefish', password: 'password4', profession: 'projectManager', id: 4 } }
顯示用戶詳情 RESTful API :id,用於讀取指定用戶的詳細訊息,server.js。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(user)); }); }) var server = app.listen(8081 , '0.0.0.0' , function ( ) { var host = server.address().address var port = server.address().port console .log("瀏覽地址為 http://%s:%s" , host, port) })
執行結果如下:
1 2 $ node server.js 瀏覽地址為 http://0.0.0.0:8081
開啟瀏覽器瀏覽:
顯示結果:
1 2 3 4 5 6 { name: 'morosecat', password: 'password2', profession: 'systemAnalyst', id: 2 }
刪除用戶 RESTful API deleteUser,用於刪除指定用戶,範例指定id = 2,server.js。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 var express = require ('express' );var app = express();var fs = require ("fs" );var id = 2 ;app.get('/deleteUser' , function (req, res ) { fs.readFile( __dirname + "/" + "users.json" , 'utf8' , function (err, data ) { data = JSON .parse( data ); delete data["user" + id]; console .log( data ); res.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(data)); }); }) var server = app.listen(8081 , '0.0.0.0' , function ( ) { var host = server.address().address var port = server.address().port console .log("瀏覽地址為 http://%s:%s" , host, port) })
執行結果如下:
1 2 $ node server.js 瀏覽地址為 http://0.0.0.0:8081
開啟瀏覽器瀏覽:
1 http://0.0.0.0:8081/deleteUser
顯示結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { user1: { name: 'morosedog', password: 'password1', profession: 'engineer', id: 1 }, user3: { name: 'morosebear', password: 'password3', profession: 'systemDesigner', id: 3 } }
完整程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( data ); }); }) var user = { "user4" : { "name" : "morosefish" , "password" : "password4" , "profession" : "projectManager" , "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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(data)); }); }) var id = 2 ;app.get('/deleteUser' , function (req, res ) { fs.readFile( __dirname + "/" + "users.json" , 'utf8' , function (err, data ) { data = JSON .parse( data ); delete data["user" + id]; console .log( data ); res.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(data)); }); }) 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.setHeader('Content-Type' , 'text/html; charset=utf8' ); res.end( JSON .stringify(user)); }); }) var server = app.listen(8081 , '0.0.0.0' , function ( ) { var host = server.address().address var port = server.address().port console .log("瀏覽地址為 http://%s:%s" , host, port) })
註:以上參考了Node.js RESTful API