express

http://www.expressjs.com.cn/

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

http://www.expressjs.com.cn/starter/hello-world.html

var express = require('express');
var app = express(); app.get('/', function (req, res) {
res.send('Hello World!');
}); var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port);
});

restful api

http://www.ruanyifeng.com/blog/2011/09/restful.html

https://www.ibm.com/developerworks/library/ws-restful/index.html

This article suggests that in its purest form today, when it's attracting this much attention, a concrete implementation of a REST Web service follows four basic design principles:

  • Use HTTP methods explicitly.
  • Be stateless.
  • Expose directory structure-like URIs.
  • Transfer XML, JavaScript Object Notation (JSON), or both.

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

https://www.cnblogs.com/imyalost/p/7923230.html

二、RESTful的特征和优点

1、客户端-服务器(Client-Server):提供服务的服务器和使用服务的客户端分离解耦;

优点:提高客户端的便捷性(操作简单)

简化服务器提高可伸缩性(高性能、低成本)

允许客户端服务端分组优化,彼此不受影响

2、无状态(Stateless):来自客户的每一个请求必须包含服务器处理该请求所需的所有信息(请求信息唯一性);

优点:提高可见性(可以单独考虑每个请求)

提高可靠性(更容易故障恢复)

提高了可扩展性(降低了服务器资源使用)

3、可缓存(Cachable):服务器必须让客户端知道请求是否可以被缓存?如果可以,客户端可以重用之前的请求信息发送请求;

优点:减少交互连接数

减少连接过程的网络时延

4、分层系统(Layered System):允许服务器和客户端之间的中间层(代理,网关等)代替服务器对客户端的请求进行回应,而客户端不需要关心与它交互的组件之外的事情;

优点:提高了系统的可扩展性

简化了系统的复杂性

5、统一接口(Uniform Interface):客户和服务器之间通信的方法必须是统一化的。(例如:GET,POST,PUT.DELETE)

优点:提高交互的可见性

鼓励单独优化改善组件

6、支持按需代码(Code-On-Demand,可选):服务器可以提供一些代码或者脚本并在客户的运行环境中执行。

优点:提高可扩展性

express + restful

https://florianholzapfel.github.io/express-restify-mongoose/

Easily create a flexible REST interface for mongoose models

From the command line

npm install express-restify-mongoose --save

http://www.cnblogs.com/lkiversonlk/p/4878139.html

Mongo, Express Restful接口搭建

首先安装express-restify-mongoose

    npm install express-restify-mongoose --save

然后新建一个router做Restful Service,假设我们的数据类是Customer,需要一个name字段和一个可选的comment字段.

/* models.js */
var express = require('express');
var router = express.Router();
var mongoose = require("mongoose");
var resify = require("express-restify-mongoose") mongoose.connect("mongodb://localhost/test"); resify.serve(router, mongoose.model('Customer', new mongoose.Schema(
{
name : {type : String, required : true},
comment : {type : String}
}
))) module.exports = router;

然后把这个router注册到express里

/* in app.js */
var models = require("[models.js位置]");
...
app.use(models)

OK,现在运行server测试下: http://localhost:3000/api/v1/Customers,Restful接口已经有了~

GET http://localhost/api/v1/Customer/count
GET http://localhost/api/v1/Customer
POST http://localhost/api/v1/Customer
DELETE http://localhost/api/v1/Customer GET http://localhost/api/v1/Customer/:id
GET http://localhost/api/v1/Customer/:id/shallow
PUT http://localhost/api/v1/Customer/:id
POST http://localhost/api/v1/Customer/:id
PATCH http://localhost/api/v1/Customer/:id
DELETE http://localhost/api/v1/Customer/:id

其它例子:

https://github.com/florianholzapfel/express-restify-mongoose/blob/master/examples/todos/todos.js

自己动手

https://github.com/fanqingsong/web_data_visualization

build\webservice_resty.js

例子

const express = require('express')
const bodyParser = require('body-parser')
const methodOverride = require('method-override')
const mongoose = require('mongoose')
const restify = require('express-restify-mongoose')
const app = express()
const router = express.Router() app.use(bodyParser.json())
app.use(methodOverride()) mongoose.connect('mongodb://localhost:27017/zhipin') restify.serve(router, mongoose.model('summary', new mongoose.Schema({
Technology : { type: String }, // 技术名称
Count : { type: Number }, // 技术数目
}))) app.use(router) app.listen(3000, () => {
console.log('Express server listening on port 3000')
})

测试:

GET http://localhost:3000/api/v1/summary

GET http://localhost:3000/api/v1/summary/5b7ed6b40abe4e3714a7489a

express + restful的更多相关文章

  1. 基于TypeScript装饰器定义Express RESTful 服务

    前言 本文主要讲解如何使用TypeScript装饰器定义Express路由.文中出现的代码经过简化不能直接运行,完整代码的请戳:https://github.com/WinfredWang/expre ...

  2. postman测试express restful接口

    安装express及postman var express = require('express') var app = express(); var calculation = require('. ...

  3. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  4. Mongo, Express, Angular, Node-- MEAN Stack搭建

    前言 作为一个从后端转全栈的码农,我一直使用express,jade & bootstrap, jquery的组合.重复了几次相同的工作后,看到网上开始流行MEAN Stack,于是也对其研究 ...

  5. NodeJs - 100

    Nodejs官方文档 https://nodejs.org/en/docs/ Nodejs官方网站 https://nodejs.org/en/ Nodejs的特征:  1.采用非阻塞性IO机制:—— ...

  6. 使用 Express 和 waterline 创建简单 Restful API

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000004996659  突然想起来我这个博客冷落了好多年了,也该更新一下, ...

  7. [转] Creating a Simple RESTful Web App with Node.js, Express, and MongoDB

    You can find/fork the sample project on GitHub Hey! This and all my other tutorials will soon be mov ...

  8. nodejs+express+mysql实现restful风格的增删改查示例

    首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo 一.前言 之前学的java,一直用的ssm框架写后台.前段时间 ...

  9. 使用Express构建RESTful API

    RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的 ...

随机推荐

  1. threejs学习笔记(一)

    得到webgl的渲染管线

  2. Spring事件和监听器

    Application下抽象子类ApplicationContextEvent的下面有4个已经实现好的事件 ContextClosedEvent(容器关闭时) ContextRefreshedEven ...

  3. 【Api】easy-mock在线api

    解决 在使用easy-mock模拟post提交数据的情况中,我们有时需要对提交的数据进行简单逻辑处理.查阅文档发现可以使用"_req.body.keyname"来获取相应的值,但是 ...

  4. UIImagePickerDelegate - 官方文档说明

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDic ...

  5. 微信小程序开发 (资料汇总,谁还没被坑过?希望助你绕过一些坑)

    最近帮人家做一个微信小程序,刚好想熟悉一下.由于牵扯到多用户使用系统,以及数据共享,所以自然架构选择了,客户端和服务器的方式. 后台服务器是windows server,后台程序是.Net  WebA ...

  6. python和anacoda安装第三方库的位置

    查看已安装库及版本号,命令行pip list 安装第三方库位置:

  7. 小小知识点(五)——MATLAB对复数的操作

    MATLAB程序 a=3+4*i %复数 real(a) %求复数的实部 imag(a) %求复数的虚部 abs(a) %求复数的模 angle(a) %求复数的相位 conj(a) %求复数的复共轭 ...

  8. Django中间件2

    前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...

  9. Shell命令-文件及内容处理之wc,tr

    文件及内容处理 - wc.tr 1. wc:统计文件的行数.单词数或字节数 wc命令的功能说明 wc 命令用于计算字数.利用 wc 指令我们可以计算文件的字节数,字数,或是列数,若不指定文件名称,或是 ...

  10. golang 数组、切片、map

    一.数组(类似python的list) 数组的长度一旦定义了就不能动态增长.并且存储的数据类型必须相同. 创建方法: var 数组名 [长度]数据类型 例如: package main import ...