REST介绍
REST简介
REST是指表述性状态传递 (Representational State Transfer,简称REST),是Roy Fielding博士在2000年他的博士论文中提出来的—种软件架构风格。
表述性状态转移是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。
需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP、URI和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。REST通常使用JSON数据格式。
以下为REST基本架构的四个方法:
- GET-用于获取数据
- PUT-用于添加数据
- DELETE-用于删除数据
- POST-用于更新或添加数据
RESTful Web Service
web Service是一个平台独立的、低耦合的、自包含的、基于可编程的Web的应用程序,可使用开放的XML标准来描述、发布、发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
RESTful是基于REST 架构的Web Service。
由于轻量级以及通过HTTP直接传输数据的特性,Web服务的RESTful方法已经成为最常见的替代方法。可以使用各种语言(比如Java、C#、Python、PHP和Javascript [包括Ajax])实现客户端。
例如,我们需要实现订单管理功能,就可以如下设计web 服务的URL:
HTTP方法 | 示例 | 行为 |
GET | 获取订单列表 | |
GET | 获取某个特定订单的信息 | |
POST | 创建新订单 | |
PUT | 更新订单 | |
DELETE | 删除订单 |
注意:URL中的123是指订单的唯一标识符
创建RESTful
首先,创建爱你一个 json 数据资源文件 users.json,内容如下:
{
"user1": {
"id": 1,
"name": "张三",
"password": "password",
"profession": "教师"
},
"user2": {
"id": 2,
"name": "张三",
"password": "password",
"profession": "教师"
},
"user3": {
"id": 3,
"name": "张三",
"password": "password",
"profession": "教师"
}
}
基于以上数据,我们创建以下 RESTdul API:
URL | HTTP方法 | 发送内容 | 结果 |
listUsers | GET | 空 | 显示用户列表 |
user:id | GET | 空 | 显示用户详细信息 |
addUser | POST | JSON字符串 | 添加新用户 |
deleteUser:id | DELETE | 空 | 删除用户 |
获取用户列表
以下代码,我们创建了RESTful API listUsers,用于读取用户的信息列表,server_listusers.js 文件代码如下所示:
const express = require('express')
const app = express() //调用express
const fs = require('fs')
// 获取用户列表
app.get('/api/listUsers', function(req, res) {
// fs对象用来操作本地文件 语法与Linux相似
fs.readFile(__dirname + '/users.json', 'utf-8', function(err, data) {
if (err) {
res.end("信息获取错误")
} else {
res.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8' })
res.end(data)
}
})
})
app.listen(8888)
添加新用户
以下代码,我们创建了RESTful API addUsers,用于读取用户的信息列表,server_listusers.js 文件代码如下所示:
// 添加的新用户数据
const user = {
'user4': {
"id": 4,
"name": "路飞",
"password": "password4",
"profession": "海贼王"
}
}
app.post('/addUsers', function(req, res) {
fs.readFile(__dirname + '/users.json', 'utf-8', function(err, data) {
if (err) {
res.end("错误")
} else {
let list = JSON.parse(data)
list['user4'] = user['user4']
res.writeHead(200, { 'Content-Type': 'text/json' })
res.end(JSON.stringify(list))
}
})
})
app.listen(8888)
注意:实际场景中,/addUser应该为 POST 请求,此处为便于浏览器测试,设置为GET请求。
在浏览器中访问结果如下:
删除用户
以下代码,我们创建了RESTful API deleteUsers,用于读取用户的信息列表,server_listusers.js 文件代码如下所示:
// 删除用户数据
app.delete('/deleteUsers/:id', function(req, res) {
fs.readFile(__dirname + '/users.json', 'utf-8', function(err, data) {
const list = JSON.parse(data)
delete list[`user${req.params.id}`];
res.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8' })
res.end(JSON.stringify(list))
})
})
app.listen(8888)
注意:实际场景中,/deleteUser应该为 POST 请求,此处为便于浏览器测试,设置为GET请求。
在浏览器中访问,结果如下所示: