给移动应用开发插上翅膀--最简单的REST服务搭建

目前智能手机越来越像只是一个网络世界的接口,如果不联网,手机仿佛都没有什么作用。很多时候,我们做应用开发的,都需要依赖服务端提供的REST服务,如果没有这些来自网络的JSON数据,仿佛一个手机应用也没有什么存在的意义。

在这样的大环境下,如果你要做网络应用的话(如社区、电商等)那不得不依赖服务端给你提供REST接口,没有这个一个Android/IOS开发就像是被砍去手脚的人,无法自由动弹。而且在实际项目中,和服务端的接口调试也耗费移动端开发很大的时间和精力。

有时,我们想做一个自己的应用,都苦于没有服务端支持。我偿试过很多服务端的解决方案,如Spring MVC,最终还是放弃了,我只想做一个简单的后台支持,代码的工作量和学习难度却都不小。不过好在Node.js出现了,曾经困扰我的问题都变得简单了,我们可以花很少的时间,用很少的代码(代码少至少意味着工作量少)就实现一个后台的REST服务。

Node.js®是一个基于Chrome V8 引擎的JavaScript运行时。Node.js使用高效、轻量级的事件驱动、非阻塞I/O模型。Node.js的生态系统是目前最大的开源包管理系统。

Node.js的学习成本并不高,了解一些JavaScript的语法就可以动手了,我曾经要用一个月才做好的事情,我用Node.js来实现两天就好了。下边我们用一个简单的实列给大家演示一下如何用Node.js给我们的移动应用快速的搭建一个REST服务端。

  1. 安装Node.js & npm
    官方网站https://nodejs.org上去下载安装即可。安装完成后,在命令终端输入:

node -v

能看到版本号,则说明安装成功了。新版的Node.js已经集成了npm(Node.js的第三方包管理工具),所以npm也一并安装好了。同样可以通过输入 **"npm -v" **来测试是否成功安装。

2.新建一个Node.js工程
新建一个目录,之后输入"npm init",一路回车即可,想输点什么的话,可以自己看提示,这步主要是用于生成package.json文件,后边你还有机会改它。

你现在只需要知道package.json是Node.js工程的库文件依赖配置文件就够了。

3.安装需要的JS库

npm install --save express body-parser

express是一个简洁而灵活的Node.js Web应用框架;body-parser中间件用来解析http请求体。关于中间件的知识点,大家可以在express的网站学习一下:使用中间件

4.编写server.js

var fs = require('fs');
var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();

var USERS_FILE = path.join(__dirname, 'users.json'); // user.json文件的路径

app.set('port', (process.env.PORT || 3000));

app.use('/', express.static(path.join(__dirname, 'public')));
//使用body-parser中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

// 中间件,每个请求都会进行处理.
app.use(function(req, res, next) {
    // Set permissive CORS header - this allows this server to be used only as
    // an API server in conjunction with something like webpack-dev-server.
    res.setHeader('Access-Control-Allow-Origin', '*');

    // Disable caching so we'll always get the latest comments.
    res.setHeader('Cache-Control', 'no-cache');
    next();
});

// 处理/api/users的GET请求
app.get('/api/users', function(req, res) {
  fs.readFile(USERS_FILE, function(err, data) {
    if (err) {
      console.error(err);
      process.exit(1); //退出应用
    }
    res.json(JSON.parse(data));
  });
});

//处理/api/users的POST请求
app.post('/api/users', function(req, res) {
  fs.readFile(USERS_FILE, function(err, data) {
    if (err) {
      console.error(err);
      process.exit(1);
    }
    var users = JSON.parse(data);
    var user = {
      name: req.body.name,
      email: req.body.email
    };
    users.push(user);
    fs.writeFile(USERS_FILE, JSON.stringify(users, null, 4), function(err) {
      if (err) {
        console.error(err);
        process.exit(1);
      }
      res.json("{code: 200, message: 'Add user successful.'}");
    });
  });
});


app.listen(app.get('port'), function() {
  console.log('Server started: http://localhost:' + app.get('port') + '/');
});

简单解释一下这个代码,支持向/api/�users这个path发送GET和POST的REST请求,数据会以JSON格式保存在文件中,GET请求时会从JSON文件请取。所以我们要提供一个新的REST服务时,只需要写一个请求路径和JSON格式的文件就好了。

5.运行server.js

node server.js

可以在浏览器输入http://localhost:3000/api/users来测试一下我们的REST服务端返回的数据。用Postman插件试一下GET请求如下图所示:

下面我们演示一下用Postman插件试一下POST提交,在这个server.js里我们从req.body获取请求协带的“name”和“email”两个参数,然后将一个新的User保存的JSON文件里。

看到结果返回信息显示添加用户成功,我们再用GET的请求来检测一下是否用户数据正确。

OK,到此我们就用一个server.js和一个users.json文件就完成了一个可以添加用户和获取用户例表的REST服务。在没有添加新技术栈的情况下,我们要添加新的REST也很简单。虽然,我们的服务架设在本地,但足够我们在前期进行调试了。(只要在同一个WIFI网域,我们也可以用手机进行访问。)

完整的项目可以参看GitHub https://github.com/goeasyway/simple_node_rest

当然了,这里只是为了方便大家快速能用上一个REST服务,实际中我们一般都使用MongoDB来存储数据内容,express还有更强大便捷的功能供我们使用,更详细的内容大家还查要花时间看一下Node.js和express的相关文档。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,569评论 18 139
  • 笑话一则:一日开车匀速前行于市中心主干道,忽见一电动自行车一闪而过行至我左前方,还没等看实在,那车又忽一闪行至我右...
    梅凤琴阅读 628评论 0 1
  • 正念练习:念头的不断产生 —————— 最近执着于一些事,弄得自己很疲惫不开心。也试图改变自己的看法,发现更累,于...
    熊大大啊阅读 157评论 0 1
  • 此方式可以保存将对象持久化到SharedPreferences,存储的对象需要实现Serializable接口。
    goodl阅读 3,646评论 0 3
  • 别和往事争斗,我们不是对手。 下雨时,你想起的人,是给你温暖,相爱的人,喝醉后歇斯底里吼出来得人一定是你最...
    土豆Mr阅读 207评论 0 0