详解用Node.js实现Restful风格webservice


Posted in Javascript onSeptember 29, 2017

Restful风格的WebService正在渐渐取代传统的SOAP, Java 也有很多Restful的框架,很方便简洁,Jersey,restlet,甚至SpringMVC也可以,不得不说Rest让人从Web转型到WebService更容易和方便,当然深入Restful的理论还是发现比较复杂的,但是,开发和理论并不需要那么的贴合,有时候伪Restful更直观,靠谱些。

但是,作为很帅的Node.js怎么可以不和同样帅气的Restful相结合呢!?对于我们这种无视理论的开发者来说,Restful不就是url的规范+HTTP method的规范而已嘛,所以Node这种很自由的技术来说,同样实现restful变的非常正常。不需要什么框架,但是我还是用了Express,Express只是对原生的http模块的一层封装而已,不要那么计较嘛!

Java曾经是一个Xml配置文件横行的世界,现在是各种Annotation(注解)乱入的世界,虽然注解的侵入性比较小,但是加了一摞注解的类也让人伤神,尤其是各框架混杂的注解,好在各大框架还是比较自觉的,各种负责不同的层,所以还不会导致各种注解的混乱。好了,那么下面欢迎来到,没有注解,也没用xml的世界:

----我是例子---------

var express = require('express') //加载模块 
var app = express() //实例化之 
 
var map = {"1":{id:1,name:"test"},"2":{id:2,name:"test"}} //定义一个集合资源,key为字符串完全是模仿java MAP<T,E>,否则谁会这么去写个hash啊! 
 
app.get('/devices',function(req, res){ //Restful Get方法,查找整个集合资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  res.send(map) 
}) 
app.get('/devices/:id',function(req, res){ //Restful Get方法,查找一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  res.send(map[req.param('id')]) 
  //console.log(req.param('id')) 
}) 
app.post('/devices/', express.bodyParser(), function(req, res){ //Restful Post方法,创建一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  map[req.body.id] = req.body 
  res.send({status:"success",url:"/devices/"+req.body.id}) //id 一般由数据库产生 
}) 
app.put('/devices/:id', express.bodyParser(), function(req, res){ //Restful Put方法,更新一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  map[req.body.id] = req.body 
  res.send({status:"success",url:"/devices/"+req.param('id'),device:req.body}); 
}) 
app.delete('/devices/:id',function(req, res){ //Restful Delete方法,删除一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  delete map[req.param('id')] 
  res.send({status:"success",url:"/devices/"+req.param('id')}) 
  console.log(map) 
}) 
app.listen(8888); //监听8888端口,没办法,总不好抢了tomcat的8080吧!

---------我是测试-----------

详解用Node.js实现Restful风格webservice

用Postman测试ok, 代码中唯一让人诧异的应该是delete map[req.param('id')],我们知道js的map是一个Object,或者Object是一个map,,delete object.property,可以删除这个属性,但是delete Object[Property]也可以把这个属性给干掉,delete o.x 也可以写作 delete o["x"],两者效果相同 关于delete请观看:ECMAScript delete!

系不系很方便哈!和那些XXX框架些的代码很类似啊!如果你是一个寻求不同的人,Node.js当然也满足你,一直备受争议的路由表上场了:

------我是另一个文件:routes.js--------

{ get:  
  [ { path: '/', 
    method: 'get', 
    callbacks: [Object], 
    keys: [], 
    regexp: /^\/\/?$/i }, 
  { path: '/user/:id', 
    method: 'get', 
    callbacks: [Object], 
    keys: [{ name: 'id', optional: false }], 
    regexp: /^\/user\/(?:([^\/]+?))\/?$/i } ], 
delete:  
  [ { path: '/user/:id', 
    method: 'delete', 
    callbacks: [Object], 
    keys: [Object], 
    regexp: /^\/user\/(?:([^\/]+?))\/?$/i } ] }

定义这么一个对象,然后

var routes = require('./routes') 
app.use(app.router);//保留原来的 
routes(app);//这个是新加的,将前者作为默认路由

关于routes的更多内容:Express官网   靠谱些,毕竟node.js最大的问题,就是资料的api都太旧了!

Node.js处理请求包括其它一些Io都是异步的,很快,所以对于性能,我是比较看好的,关于Ab测试的结果,还在测,总之我希望可以秒杀tomcat!(不是集群哦!)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery get和post 方法传值注意事项
Nov 03 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
js select option对象小结
Dec 20 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
15分钟深入了解JS继承分类、原理与用法
Jan 19 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
May 22 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 #Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 #jQuery
vue axios同步请求解决方案
Sep 29 #Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 #Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 #Javascript
jQuery选择器之子元素过滤选择器
Sep 28 #jQuery
微信禁止下拉查看URL的处理方法
Sep 28 #Javascript
You might like
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
举例讲解Python中is和id的用法
2015/04/03 Python
浅谈Python中的闭包
2015/07/08 Python
window下eclipse安装python插件教程
2017/04/24 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python实现ip地址的包含关系判断
2020/02/07 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
酒店实习个人鉴定
2013/12/07 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
表扬稿范文
2015/01/17 职场文书
Python基本知识点总结
2022/04/07 Python