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

http://example.com/api/orders

获取订单列表

GET

http://example.com/api/orders/123

获取某个特定订单的信息

POST

http://example.com/api/orders

创建新订单

PUT

http://example.com/api/orders/123

更新订单

DELETE

http://example.com/api/orders/123

删除订单

注意: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请求。

在浏览器中访问结果如下:

rest架构优势 rest类型_rest架构优势

删除用户

以下代码,我们创建了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请求。

在浏览器中访问,结果如下所示:

rest架构优势 rest类型_REST_02

 

rest架构优势 rest类型_rest架构优势_03