位置: 编程技术 - 正文

使用Node.js实现RESTful API的示例(node js require)

编辑:rootadmin

推荐整理分享使用Node.js实现RESTful API的示例(node js require),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:使用node.js实现用IP地址查询天气情况,使用node.js实现100以内的偶数,使用node.js实现100以内的偶数,node.js怎么用,使用node.js实现用IP地址查询天气情况,使用node.js实现100以内的偶数,使用node.js实现爬取数据,使用node.js实现用IP地址查询天气情况,内容如对您有帮助,希望把文章链接给更多的朋友!

RESTful基础概念

REST(Representational State Transfer)描述了一个架构样式的网络系统,它首次出现在 年 Roy Fielding 的博士论文中。在REST服务中,应用程序状态和功能可以分为各种资源。资源向客户端公开,客户端可以对资源进行增删改操作。资源的例子有:应用程序对象、数据库记录、算法等等。

REST通过抽象资源,提供了一个非常容易理解和使用的API,它使用 URI (Universal Resource Identifier) 唯一表示资源。REST接口使用标准的 HTTP 方法,比如 GET、PUT、POST 和 DELET在客户端和服务器之间传输状态。

狭义的RESTful关注点在于资源,使用URL表示的资源及对资源的操作。Leonard Richardson 和 Sam Ruby 在他们的著作 RESTful Web Services 中引入了术语 REST-RPC 混合架构。REST-RPC 混合 Web 服务不使用信封包装方法、参数和数据,而是直接通过 HTTP 传输数据,这与 REST 样式的 Web 服务是类似的。但是它不使用标准的 HTTP 方法操作资源。

和传统的RPC、SOA相比,RESTful的更为简单直接,且构建于标准的HTTP之上,使得它非常快速地流行起来。

Node.js可以用很少代码简单地实现一个Web服务,并且它有一个非常活跃的社区,通过Node出色的包管理机制(NPM)可以非常容易获得各种扩展支持。

对简单的应用场景Node.js实现REST是一个非常合适的选择(有非常多的理由选择这个或者那个技术栈,本文不会介入各种语言、架构的争论,我们着眼点仅仅是简单)。

应用样例场景

下面,就用一个App游戏排行榜后台服务来说明一下如何用Node.js快速地开发一个的RESTful服务。

当App游戏玩家过关时,会提交游戏过关时间(秒)数值到REST服务器上,服务器记录并对过关记录进行排序,用户可以查看游戏TOP 排行榜。

游戏应用提交的数据格式使用JSON表示,如下:

Id为用户输入的用户名,token用于区别不同的用户,避免id重名,score为过关所耗费的时间(秒)。

可以使用curl作为客户端测试RESTful服务。

提交游戏记录的命令如下:

这个命令的语义不仅仅是狭义的REST增删改,我们为它添加一个cmd命令,实际上通过POST一个JSON命令,把这个服务实现为REST-RPC。

删除游戏记录的命令格式如下:

或(使用REST-RPC语义)

查看TOP 命令如下:

标准REST定义中,POST和PUT有不同含义,GET可以区分单个资源或者资源列表。对这个应用我们做了简化,ADD和UPDATE都统一使用POST,对单个资源和列表也不再区分,直接返回TOP 数据。

一些准备工作

安装Node.js

本文使用的版本是v5.5.0。

寻找一款方便的IDE

本文作者使用Sublime敲打代码,eclipse+nodeclipse生成框架代码和调试。

Node.js中基础的HTTP服务器

在Node中,实现一个HTTP服务器是很简单的事情。在项目根目录下创建一个叫app.js的文件,并写入以下代码:

用Node.js执行你的脚本:node server.js

打开浏览器访问 /,你就会看到一个写着“Hello World”的网页。

即使完全不懂Node,也可以非常直观的看到这里通过require引入了一个http模块,然后使用createServer创建HTTP服务对象,当收到客户端发出的HTTP请求后,将调用我们提供的函数,并在回调函数里写入返回的页面。

接下来,我们将把这个简单的应用扩展为一个RESTful服务。

简单直观的RESTful服务

使用Node.js实现RESTful API的示例(node js require)

现在需要超越“hello world”,我们将修改之前的http回调函数,根据请求类型返回不同的内容。

代码如下:

通过req.method,可以得到请求的类型。

1. 增加和修改

其中POST请求,是要求我们添加或更新记录,请求的数据可以通过回调得到。

代码如下:

当框架解析读入数据时,会调用req.on('data', function(chunk)提供的回调函数,我们把请求的数据记录在item中,一有数据,就调用item += chunk,直到数据读入完成,框架调用req.on('end', function()回调,在回调函数中,使用JSON.parse把请求的JSON数据还原为Javascript对象,这是一个命令对象,通过commandNaNd可以区分是需要添加或删除记录。

addRecord添加或更新记录。

代码如下:

命令执行结束后,通过res.end(JSON.stringify(result))写入返回数据。返回数据同样是一个JSON字符串。

在这个简单的样例中,使用了lowdb( 是一个基于Node的纯Json文件数据库,它无需服务器,可以同步或异步持久化到文件中,也可以单纯作为内存数据库,非常快速简单。LowDB 提供Lo-Dash接口,可以使用类似.find({id:record.id})风格的方法进行查询。通过chain(),可以把多个操作连接在一起,完成数据库的查找更新操作。

这个简单的数据库实现,如果游戏仅保存得分高的用户记录,实际上已经可以满足我们的应用了。对更复杂的应用,Node也提供了各种数据库连接模块,比较常见的是mongodb或mysql。

2. 返回TOP

通过查询数据库里的数据,首先使用.sortBy('score'),取前个,返回到记录集中,然后使用JSON.stringify转为字符串,通过res返回。

代码如下:

3. 删除记录

RESTful的删除资源ID一般带着URL里,类似“ path = parse(req.url).pathname解析出资源ID“aaa”。

代码如下:

至此,我们实现了一个带基本功能,可真正使用的RESTful服务。

实际应用场合的REST服务可能会更复杂一些,一个应用或者会提供多个资源URL的服务;或者还同时提供了基本的WEB服务功能;或者REST请求带有文件上传等等。

这样,我们的简单实现就不够看了。

Express框架

Express 是一个基于 Node.js 平台的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web应用。

可以使用eclipse+nodeclipse生成默认的express应用框架。一个express应用如下所示

Express是一个Web服务器实现框架,虽然我们用不上页面和页面渲染,不过作为样例,还是保留了缺省生成的页面,并对其进行简单解释。

在这个生成的框架代码里,选择view engine模板为ejs,这是一个类似JSP的HTML渲染模板引擎,app.get('/', routes.index)表示把HTTP的“/”请求路由给routes.index处理,routes.index对应于工程结构下的index.js文件处理,其内容如下:

这个函数调用了对应view目录下的index.ejs模板,并把{ title: 'Express' }传递给ejs模板,在ejs模板中,可以使用<%= title %>得到传入的json对象。

Express框架实现RESTful服务

首先我们实现一个自己的服务类,在routes子目录中,创建leaderboards.js文件,这个文件结构大致为定义REST对应的操作函数。

在app.js文件中,需要把HTTP请求路由给对应函数。

这样就把标准Web服务请求路由到leaderboards处理。因为请求中带有POST数据,可以使用

把请求的JSON结构解析后添加到req.body中。Limit是为避免非法数据占用服务器资源,正常情况下,如果解析JSON数据,type应该定义为'application/*+json',在本应用里,为避免某些客户端请求不指明类型,把所有输入都解析为JSON数据了。

'body-parser'是一个很有用的库,可以解析各种类型的HTTP请求数据,包括处理文件上传,详细可以参见 有了这个路由映射机制,我们不再需要考虑URL和数据的解析,仅仅指定路由,实现对应函数就可以了。

对类似

浅谈node中的exports与module.exports的关系 因为是做前端的,对node的生态一直也比较关注,对于node中对commonJS模块化的实现给了我们很大的方便,之前对于导出的module.exports和exports一直模模糊糊,今天

详解基于node的前端项目编译时内存溢出问题 前段时间公司有个基于vue的项目在运行npmrunbuild的时候会报内存溢出,今天在某个技术流交群也有位小伙伴基于angular的项目也出现了这个问题,所以查

使用Node.js搭建静态资源服务详细教程 对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解。那就开始吧,让

标签: node js require

本文链接地址:https://www.jiuchutong.com/biancheng/380910.html 转载请保留说明!

上一篇:让nodeJS支持ES6的词法----babel的安装和使用方法(nodejs10支持es6吗)

下一篇:浅谈node中的exports与module.exports的关系(node exit)

  • 电子税务局怎么删除办税员
  • 高新技术认定研发费用要求
  • 申报增值税无附表怎么填写
  • 企业增加注册资本需要缴纳什么税
  • 多开进来的发票怎么结算税点呢?
  • 哪些燃料油不征消费税了
  • 个人出租住房缴纳个税可以扣除房产税吗
  • 完全发生在境外的服务增值税
  • 农牧业没有发票怎么办
  • 董事费如何计算个人所得税
  • 公允价值变动损益是什么意思
  • 房产税要来了!租金也要交,最高达到12%
  • 非居民纳税人怎么纳税
  • 营改增后部分经济行为定性上的变化和影响有什么?
  • 仓库盘盈计入什么会计
  • 公司收到银行存款利息收入会计分录
  • 收到电子银行承兑汇票怎么做账务处理
  • bitlocker功能
  • windows10.0
  • 投资长期溢价债券,容易获取投资收益
  • 公司股权变更要换营业执照吗
  • 在windows7提供了一种什么技术
  • 如何控制网络速度
  • 固定资产折旧计提时间
  • 当月收到服务成本票下个月才开出发票
  • 其他应付款期初余额在哪方
  • 货物退回的会计处理
  • 落日时光
  • 使用php连接多种数据库
  • 公司投资一家公司然后再投资
  • linux嵌入式开发教程
  • php实现支付宝支付
  • 汽车维修费发票怎么开
  • 车票如何抵扣增值税税率
  • 电脑学word下哪个软件视频
  • 年金现值系数和年金终值系数的公式
  • 上月购进固定资产次月退货已开具红字发票如何入账
  • 二手车减免增值税的规定
  • 中标违约保证金怎么算
  • 公益性捐赠支出纳税调整
  • 在建工程科目的内容
  • 电子发票查询真伪
  • 建筑企业小规模纳税人
  • 存货跌价准备借减贷增吗
  • sqlserver 2008数据库事务日志已满怎么处理
  • 个体工商户增值税申报操作流程
  • 收到现金货款会计分录
  • 企业所得税征收方式有哪些?
  • 管理费用结转本年利润
  • 纳税人的进项税额怎么算
  • 建筑业增值税税负率
  • 应付账款账面价值扣除商业折扣吗
  • 应交税费的进项和销项是什么意思
  • 公司举行活动发言稿范文
  • 什么情况下说免贵
  • 小企业会计准则2023电子版
  • 生产车间的保险有哪些
  • 享受研发费用加计扣除需要什么条件
  • 企业筹建期间开办费计入
  • 苹果发布会最新消息
  • xp系统如何安装软件
  • centos 安装教程
  • centos强制关闭程序
  • linux awk命令使用实例
  • 服务win10
  • win8系统找不到无线网络
  • ExtJs事件机制基本代码模型和流程解析
  • html5+javascript实现简单上传的注意细节
  • unity局域网多人游戏
  • jquery开源
  • 手机gpu过度绘制
  • 安卓wifi已连接不可上网设置
  • JavaScript 事件对象介绍
  • centos6.5设置网络
  • 2020年上海税务跨区迁移很麻烦吗
  • 厂房转让的土地税怎么算
  • 事前监督的名词解释
  • 贵阳网上办税服务厅
  • 重庆电子税务局官网登录入口
  • 税收优惠与政府补助对于企业研发来说哪个优惠力度大
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设