Node.js与Restful API
来源:互联网 发布:4g网络架构 编辑:程序博客网 时间:2024/05/17 01:43
总结REST有两个最重要的原则:
1.分离性;交互的客户端和服务器除了RESTful-API没有其他的依赖关系,限制了整个系统的复杂性,促进了各个部分的独立性。
2.无状态性:客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必需的信息。
满足上面规范的API接口就是RESTful-API。客户端常常通过HTTP方法(GET、POST、PUT、DELETE等),来发送API请求;服务端常常以JSON数据作为响应。做好web开发,我们必须非常深刻地理解http/TCP/IP协议栈。我们可以通过浏览器访问发送HTTP GET请求,通过浏览器Ajax对象发送HTTP请求,也可以通过一些特殊的工具模拟浏览器发送请求。收到请求后响应JSON数据的服务器就是RESTful-API服务器。上一章我们提到了PHP框架CodeIgniter。下面这篇文章可以教我们如何使用CodeIgniter搭建RESTful-API服务。
《在CodeIgniter框架中使用RESTful服务》
python的tornado也是一种优秀的Web服务器框架,类似于Node.js它也采用epoll非阻塞IO,响应快速,可处理数千并发连接,非常适用用于实时的Web服务,并发性能和Node.js不相伯仲。只是它对JSON数据的集成度不如Node.js,对中文字符的支持也不好,开发效率不如Node.js。下面我们通过一个例程来学习怎样使用Node.js开发RESTful-API服务。
四. Node.js与 RESTful-API
我们先用noed.js搭建一个最简单的RESTful-API服务器
4.1 最简单的RESTful-API
请看下面这段代码:
1
/**
2
* Date: 12-3-24
3
* 说明: 最简单的RESTful-API Server
4
* 请求:http://127.0.0.1:8080/testapi
5
* 响应:{"访问成功":{"提示信息":"欢迎参加《一个周末掌握IT前沿技术》的极限学习活动!"}}
6
*/
7
var
http = require(
"http"
);
8
var
i = 1;
9
result = {
10
"访问成功"
: {
11
"提示信息"
:
"欢迎参加《一个周末掌握IT前沿技术》的极限学习活动!"
12
}
13
}
14
15
http.createServer(
16
function
(request, response) {
17
18
response.writeHead(200, {
19
"Content-Type"
:
"application/json; charset=UTF-8"
20
});
21
response.write(JSON.stringify(result));
22
i++;
23
console.log(
"服务器访问被访问次数: i = "
+ i);
24
response.end();
25
26
}).listen(8080);
27
28
console.log(
"服务器开启"
);
我们通过浏览器就可以访问它,结果如下图所示。
4.2 实现简单的路由机制
高效率的RESTful请求都倾向于使用HTTP GET方法。GET请求的所有信息都携带在请求地址url中。在Node.js里读取request.url可以获得请求的url,我们需要对不同的url做路由处理,返回不同的响应数据。Node.js有一个轻量级框架Express,它实现了一个比较好的路由机制,只是他不在我们的学习范围之中。我们需要的是能够处理下面路由表的高效的路由机制。
例程6:
handlesmap.js如下:
1
/**
2
* Date: 12-3-24
3
* 说明: RESTful-API web请求url路由表
4
*/
5
var
requestHandles = require(
"./requestHandles"
);
6
7
var
handlesmap = {
8
"get"
:{
9
"/api/*"
:requestHandles.test1,
10
"/api/test1"
:requestHandles.test1,
11
"/api/test2/:id"
:requestHandles.test2,
12
"/api/test3"
:requestHandles.test3
13
},
14
"post"
:{
15
},
16
"put"
:{
17
},
18
"del"
:{
19
}
20
};
21
22
module.exports = handlesmap;
这个路由表的含义很简单,那就是如果访问请求url形如:http://127.0.0.1:8080/api/test1,则交给函数requestHandles.test1处理。如果形如:http://127.0.0.1:8080/api/test2/user1,则交给函数requestHandles.test2处理,/api/test2/后面的转义字符串赋值给变量id,一起传给处理函数。至于路由处理的模块(route.js),大家可以在例程的源代码中找到。它使用很简单的字符串处理,功能比较有限。哪位朋友如果有兴趣,可以写个更强大的,使用正则表达式的route。Express的路由机制用的就是正则表达式实现。功能强大,效率高,就是套用框架稍微有一点复杂。它的处理器(handles)就是普通的函数。
requestHandles.js的部分内容如下:
1
//<!-- 省去很多内容 -->
2
requestHandles.test3 =
function
(request, response, pathObject, queryobj) {
3
response.write(
"{b:{p:'我是test3'}}"
);
4
}
5
module.exports = requestHandles;
我们将4.1节的例子稍微改一下使用路由处理,连接路由表和处理器,这时demo6.js如下:
1
/**
2
* Date: 12-3-24
3
* 演示程序6
4
* 说明: RESTful-API Server
5
*/
6
var
http = require(
"http"
);
7
var
route = require(
"./demo6lib/route"
);
8
var
handlesmap = require(
"./demo6lib/handlesmap"
);
9
10
var
i = 1;
11
12
http.createServer(
13
function
(request, response) {
14
15
response.writeHead(200, {
16
"Content-Type"
:
"application/json; charset=UTF-8"
17
});
18
19
queryobj = {};
20
route(handlesmap, request.url, request, response, queryobj);
//路由处理
21
22
i++;
23
console.log(
"服务器访问被访问次数: i = "
+ i);
24
response.end();
25
26
}).listen(8080);
27
28
console.log(
"服务器开启"
);
读懂这些代码,在webstorm上将这个例程运行起来,今天的学习内容就算完成了。想想今天的学习我们是有多么的高效。回想一下,JSON、闭包性、redis、nTenjin、RESTful,这些东西是不是还清晰?这些东西都是快速构建现代高性能的web应用服务的基础元素。我们没有提到任何框架,甚至于Node.js的Express框架都没有涉及。我们可以思考,在这个技术更新如此迅速的网络时代,我们如何提高生产力?是需要更强大的工具,还是更大粒度的模块,是更复杂更强大的框架,还是更简单更直接的流程,亦或是对整体更加系统化的认识?
来源:http://ittechnical.sinaapp.com/node-js-and-restful-api/
- Node.js与Restful API
- Node.js RESTful API
- Node.js RESTful API
- Node.js RESTful API
- Node.js RESTful API
- Node.js RESTful API
- 浅谈node.js RESTful API
- IT前沿技术之node.js篇<四>:Node.js与Restful API
- 使用Node.js + MongoDB 构建restful API
- Node.js - RESTful API - web service
- 用Node.js快速开发RESTful API
- node.js项目改进之restful API接口支持
- REST、RESTful 与 RESTful API
- REST、RESTful 与 RESTful API
- Node.js 一目了然的RESTful
- 基于restful api规范下node.js-koa-mysql-mongodb操作
- nodejs与RESTful API
- Node JS API (一)
- BZOJ 2599 Race 点的分治
- HDOJ 1069
- 将JAVA 项目打包成JAR 并运行
- wp8小钟表
- 【const】用法详解
- Node.js与Restful API
- HTTP POST GET 本质区别详解
- UDP 网络广播通讯
- HDOJ 2512
- 今日事今日毕
- EMACS入门使用
- 链表的创建
- Ubuntu 12.04/12.10 安装崩溃的问题
- 变量、指针、指针的指针,我和这三个家伙的故事。