当前位置:首页 > Windows程序 > 正文

Node.js实现RESTful api,express or koa?

2021-03-26 Windows程序

   

一、what‘s RESTful API

1.1 RESTful架构

  要理解什么是RESTful API我们可以先看一下什么是RESTful架构。

  REST是Representational State Transfer的缩写,我们可以理解为它的含义是“表现层状态转化”,wikipedia是这样说的:“an architectural style that abstracts the architectural elements within a distributed hypermedia system”,这就是REST互联网软件的架构原则。

  我们可以说如果一个架构符合REST原则,就称它为RESTful架构。

1.2 RESTful API

  那么回到我们的RESTful api,我们为了有一种统一的机制,方便不同的前端设备与后端进行通信于是便有了 RESTful API这一套目前比较成熟的互联网应用程序的API设计理论。那么我们为了设计一个合理,好用的api,需要做些什么呢?简单的说大致需要做到以下几点:

1 1. api与用户的通信协议总是使用HTTPs 2 2. 我们尽量将API部署在专用域名下:https://api.example.com 3 3. url中有标示api版本号的字段:https://api.example.com/v1/ 4 4. 路径带有明确的含义:https://api.example.com/v1/animals 5 5. 明确资源的具体操作类型,使用相应的HTTP方法:GET/POST/PUT/DELETE/PATCH 6 6. api中提供过滤信息的参数:?page=2&per_page=100:指定第几页,以及每页的记录数 7 7. 请求api后服务器需要返回明确的状态码,如果出错,带有错误处理

  其实我们可以简单的理解为RESTful API就是更加规范的API。

  下面我们就可以开始基于Nodejs的express和koa来实现一些例子理解下RESTful API。

二、Express RESTful API

2.1简单的get数据库中的数据

我们先通过一个简单些的只get获取数据库中数据的例子开始:

2.1.1 准备工作:
   确认我们已经安装了nodejs express;
 ;
2.1.2 先开始最简单的例子:
  目录结构,data是数据库相关的目录,我们可以先忽略掉:

  

  确保我们的package.json文件中有mongodb等依赖:

1 { 2 "name":"node-api", 3 "main":"server.js", 4 "dependencies":{ 5 "express":"~4.0.0", 6 "mongoose":"~3.6.13", 7 "body-parser":"~1.0.1", 8 "morgan":"~1.5.3", 9 "mongodb":"~2.0.33", 10 "monk":"~1.0.1" 11 } 12 }

View Code

  在server.js中定义简单的路由和进行数据库操作:

1 var express = require(‘express‘); 2 var app = express(); 3 var bodyParser = require(‘body-parser‘); 4 var path = require(‘path‘); 5 //database 6 var mongo = require(‘mongodb‘); 7 var monk = require(‘monk‘); 8 var db = monk(‘localhost:27017/restdata‘); 9 10 //app.use()里面没有函数 11 app.use(bodyParser.urlencoded({ extended : true})); 12 app.use(bodyParser.json()); 13 14 app.use(express.static(__dirname+‘/public‘)); 15 16 var collectorder = db.get(‘orderlist‘); 17 var collectuser = db.get(‘userlist‘); 18 19 20 app.get(‘/orders‘,function(req,res){ 21 collectorder.find({},{limit:20},function(err,orders){ 22 res.json(orders); 23 }); 24 }); 25 app.get(‘/users‘,function(req,res){ 26 collectuser.find({},{},function(err,users){ 27 res.json(users); 28 }); 29 }); 30 31 app.get(‘/users/:name‘,function(req,res){ 32 //var collection = db.get(req.params.name); 33 //console.log(req.params.name); 34 collectuser.find({name:req.params.name},{},function(err,docs){ 35 res.json(docs); 36 }); 37 }); 38 39 //客户端通过请求adduser接口post数据进入数据库 40 // app.post(‘/adduser‘,function(req,res){ 41 // var db = req.db; 42 // collectuser.insert(req.body,function(err,result){ 43 // res.send( 44 // (err == null) ? {msg:‘‘}:{msg:err} 45 // ); 46 // }); 47 // }); 48 49 50 51 52 app.listen(3000);

View Code

  数据库操作:

1 mongod --dbpath c:\node\nodetest2\data (项目中data目标路径)

  新开一个控制台窗口运行:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67876.html