天天看點

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

概述

CRUD 就是我們常說的建立Create,讀取Read,更新Update,删除Delete。

這幾個操作是後端開發中最常見的幾個,舉個例子,比如說一個商品銷售的網站。它涉及的商品添加上架,提供商品給使用者浏覽,以及後續商品屬性更新,下架到最終撤走,都是圍繞一個商品進行CRUD的操作。當然實際操作會更加複雜。

從簡入手

前篇寫了一個更加參數name列印到響應傳回使用者端,在浏覽器展示。

這篇我們将建立一個商品product,然後我們圍繞商品做下面4個接口:

添加商品資訊

讀取商品資訊

更新商品資訊

删除商品

先看效果圖

讀取所有商品,打開浏覽器通路:http://localhost:8080/products

(下圖為FireFox 右鍵->檢視元素,這裡選擇火狐因為結果自動格式化了。 如果是Chrome

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

在上面網絡這一欄,我們可以進去看到,浏覽器通路這個接口連結本質上,是進行了一個GET 請求。

這裡有必要引入一個常用的指令行工具“curl”, 先記住簡單使用指令:

curl -X GET 目标連結 

#上面的指令是使用curl工具對 目标連結  發起 GET 請求。

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

上圖左邊為接口測試視窗,右邊為接口服務的web程序。

由于浏覽器預設沒有安裝測試web api的工具,下面其他增加,删除,更新操作都使用curl工具進行

curl -X POST -H "Content-type: application/json" -d '{"id":5,"name":"Cannon","type":"Camera"}' http://localhost:8080/produc

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

  • 删除商品資訊,效果如下

執行删除前,我們先查詢一下id為4的産品資訊,再執行删除,效果如下

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

右邊web程序輸出了最新産品資訊沒有id=4的記錄了,删除成功。

查詢商品資訊,效果如下

#查詢id=4的産品,沒有傳回,已删除

curl -X GET http://localhost:8080/product/4

#查詢id=5的産品,傳回id為5的産品資訊。

curl -X GET http://localhost:8080/product/5  

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

修改商品資訊

#我們打算把id=5的産品名改為CannonX2

curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product  

NodeJS 後端開發 03 使用Restify開發API 一個完整的CRUD

再回來講原理

快速過一下,curl工具的介紹

curl 是Linux類作業系統常見的Http請求用戶端,linux可以通過終端輸入:yum install -y curl 進行快速安裝。

簡單重複一下curl 的使用:curl -X 動作(http 方法) 連結(目标接口網址)

更多資訊看:

https://curl.se/download.html

本篇重點

下面代碼重點解析,上圖多個接口的代碼實作。

關于server(http 服務建立) 沒有再次注釋,可以回顧前篇:

https://blog.csdn.net/geeklevin/article/details/109013368

const restify = require('restify');
 
//加載了産品資訊的js子產品指派給pm常量
const pm = require('./product.js');
//這裡回顧上面示範第一個圖,通路連結前列印所有産品資訊
pm.show();
console.log(pm.query(1));
 
function read(req, res, next) {
   ....//省略擷取請求中id的代碼段
   // 調用pm對象的查詢産品方法
   res.send(pm.query(id))
}
 
function dele(req, res, next) {
   ....//省略擷取請求中id的代碼段
   //調用pm對象的删除産品方法
  res.send({status:'deleted',msg: pm.delete(id)})
}
function readAll(req, res, next){
   //調用pm對象的讀取所有産品方法
   res.send(pm.getData())
}
function create(req, res, next){
   ....//省略擷取請求中product的代碼段
   //調用pm對象的增加産品方法
   pm.add(product);
}
function update(req, res, next){
   ....//省略擷取請求中product的代碼段
   //調用pm對象的修改産品方法
   pm.update(product) 
}
 
//這裡是前篇講過
var server = restify.createServer();
 
server.use(restify.plugins.bodyParser({ mapParams: true }));
 
//這裡重點,把readAll方法綁定到接口/products的GET動作
server.get('/products',readAll);
 
//這裡依次把 查/增/改/删 分别綁定到/product的GET / POST / PUT / DELETE 動作。
server.get('/product/:id', read);
server.post('/product', create);
server.put('/product', update);
server.del('/product/:id', dele);
 
 
//伺服器監聽8080端口
server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});      

上面通過restify 對應的server對象綁定了4個常用的HTTP請求方法,實作了對同個連結不同請求方法的不同響應。

在此,我們再拿一個更新産品操作解析:

curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product

使用者端:使用curl 針對/product接口,發起PUT請求

服務端:發現/product接口有效,并且綁定了更新産品方法到PUT方法,執行更新産品方法。

(最近想到了一個RESTFly工具在弄,拖了很久寫的這篇文章。歡迎讀者評論解析其他增加,删除,查詢的原理)

PS:上圖為重點代碼解析,省略了很多代碼(不作為可執行最終版)

項目完整代碼:

https://codechina.csdn.net/geeklevin/nodejs-api-002-crud