我是个挺工具控的人,平时喜欢收集各种能提高生活质量/工作效率的小工具。

同时也挺热衷于分享,对于自己爱不释手的工具,总会忍不住想安利给周围的人。

如果大家用着开心,因为这些工具的帮助,能省下更多的时间去看书/约会/看电影,那么编写这些工具本身,成了一件多么性感而浪漫的事呀

今天推荐的一款工具叫:json-server,在它的帮助下,你能在半分钟之内搭建一个REST API服务器,支持CURD操作

##前后端分离 前后端分离是个很棒的想法。一般而言,开发一个Web应用的时候,我们都会简单地分为前端工程师和后端工程师。职责划分时,通常的做法是前端工程师负责浏览器端用户交互界面和逻辑等,后端负责数据的处理和存储等。可以概括为:后端提供数据,前端负责显示数据。

在前后端通信中,当前流行的的做法是采用json作为中介,接口采用RESTful的风格

我们时常面对这样一个问题,前端的工作似乎依赖于后端提供的接口,那么在后端构建好应用之前,前端除了逛github外,就无事可做了,卧槽这不敏捷呀。

一般公司的做法可能是,先约定好接口,大家按照规范来编程,的确,这样做之后,开发工作就能并行开展了。可是伪造数据是个很烦人的工作呀,尤其是数据的增删改,前端都得手动来写,json这种东西一不小心又容易写错,而且前端开发如果是个团队的话,大家其实都期待有个一致的数据源,基于同样的数据,这样交流起来容易许多。

在这种情况下你如果遇到json-server,该是怎样一种相见恨晚的感觉。

json-server让你迅速搭建器一个REST API服务器,你要做的仅仅需要创建一个json文件即可,完全不必有任何服务器和后端的知识。

如此一来,前后端分离中容易耦合的部分(接口数据),在开发阶段就被解耦了

另外,关于前后端分离,阿里内部对此的实践很多,有兴趣的同学可以围观前后端分离的思考与实践.去年去阿里参加了一个会议,他们分享了不少这一块的经验和前车之鉴,挺引人深思的。

##json-server的安装与使用 ###本地安装 首先你本地要装有nodejs。之后直接安装json-server:sudo npm install -g json-server ###使用docker 参考这里.
几乎也是一键式的:docker run -d -p 80:80 -v /home/user/articles.json:/data/db.json clue/json-server

###使用 创建一个json文件,类似这样

1
2
3
4
5
6
7
8
9
{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  ],
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }
  ],
  "profile": { "name": "typicode" }
}

万事具备,可以开始啦:json-server --watch db.json

在浏览器中打开http://127.0.0.1:3000/即可

对于当前这个例子,请求所有数据为http://127.0.0.1:3000/db

###CURD操作 采用RESTful风格,可以使用Postman或httpie来测试

以httpie来演示

1
2
3
4
http delete 127.0.0.1:3000/posts name=wwj
#response: HTTP/1.1 201 Created
http post 127.0.0.1:3000/posts/2 
#response: HTTP/1.1 200 OK 

值得说明的一点是,json-server支持跨域请求(实际上跨域是一个安全策略问题,浏览器端总是能发送跨域请求的,重点在服务器端是不是愿意接受,json-server处于开发的便利愿意接受跨域请求,所以用户直接在静态文件里就能开发ajax程序!),如果我们在ubuntu上部署的话,记得ln -s /usr/bin/nodejs /usr/bin/node,否则会说找不到node

##在edX开发中的应用 开发xblock组件时,前后端通信也是采用json,json-server很适合用来模拟后端的数据

##后记 这半年来,对优化workflow兴趣浓厚,大概可以表述为对如下命题的兴趣:如何使用开源工具来优化公司内部的日常工作流,包括但不限于自动化测试,提供基础服务,自动化办公 。 先后在公司内部搭建了私有论坛,代码托管,私有文件存储,内网映射服务

之后有可能,很适合将json-server构建为公司内部使用的在线服务,开发者们只需要在线编写初始化的json文件,服务便可跑起来,为前端开发者提供 REST API

技术上实现很简单,使用flask搭建一个在线服务,提供一个在线编辑器CodeMirror,将格式正确的json保存为文件,之后在flask中调用子线程把服务跑起来就行

如果不考虑安全的话,就更简单,启用一个json-server即可,用户各自在自己的区域做操作即可(诸如我只在/wwj下做操作),互不干扰。初始化的数据,可以用httpie脚本化生成