REST:(Representational State Transfer)即 表现层状态转换 ,定义了 资源 的通用访问格式,是一种网络应用程序的 设计风格 和 开发方式 。
在概念中,需要理解以下几个名称:
即 服务器上获取到的东西任何资源 ,一条用户记录,一个用户的密码,一张图片等等都是。
即 资源格式 ,是 HTML、XML、JSON、纯文本、图片等等,可以用各种各样的格式来表述你获取到的资源。
即 URL定位资源 ,用 HTTP 动词(GET,POST,DELETE,DETC)描述操作。操作是动词,资源是名词。
即通过统一的接口对资源进行操作。
REST 通常基于使用 HTTP
, URI
,和 XML
以及 HTML
这些现有的广泛流行的协议和标准,每一种 URI 代表一种资源。
REST 通常使用 JSON
数据格式。
REST 基本架构的四个方法:
下面会通过一个场景介绍。
REST 定义了资源的通用访问格式,接下来一个消费者为实例,介绍 RESTful API 定义:
GET /api/user
GET /api/user/100
POST /api/user
PUT /api/user/100
DELETE /api/user/100
GET /api/user/100/bill
GET /api/user/100/bill?from=201910&to=201911
以上其中 RESTful 风格 API 几乎包含常见业务情况。
本案例使用 mock 数据来演示,如下:
{ "user1" : { "name" : "leo", "password" : "123456", "profession" : "teacher", "id": 1 }, "user2" : { "name" : "pingan8787", "password" : "654321", "profession" : "librarian", "id": 2 }, "user3" : { "name" : "robin", "password" : "888888", "profession" : "clerk", "id": 3 } }
我们将实现以下 RESTful API :
这一步我们会创建 RESTful API 中的 listUsers ,用来 读取用户的信息列表 :
// index.js const express = require('express'); const app = express(); const fs = require("fs"); // 定义 读取用户的信息列表 的接口 app.get('/listUsers', (req, res) => { fs.readFile( __dirname + "/" + "users.json", 'utf8', (err, data) => { console.log( data ); res.end( data ); }); }) const server = app.listen(8081, function () { const {address, port} = server.address(); console.log("server run in: http://%s:%s", address, port); })
这一步我们会创建 RESTful API 中的 addUser ,用来 添加用户记录 :
// index.js // 省略之前文件 只展示需要实现的接口 // mock 一条要新增的数据 const user = { "user4" : { "name" : "pingan", "password" : "password4", "profession" : "teacher", "id": 4 } } // 定义 添加用户记录 的接口 app.get('/addUser', (req, res) => { // 读取已存在的数据 fs.readFile( __dirname + "/" + "users.json", 'utf8', (err, data) => { data = JSON.parse( data ); data["user4"] = user["user4"]; console.log( data ); res.end( JSON.stringify(data)); }); })
这一步我们在 RESTful API 中的 URI 后面加上 :id ,用来 获取指定用户详情 :
// index.js // 省略之前文件 只展示需要实现的接口 // 定义 获取指定用户详情 的接口 app.get('/:id', (req, res) => { // 首先我们读取已存在的用户 fs.readFile( __dirname + "/" + "users.json", 'utf8', (err, data) => { data = JSON.parse( data ); var user = data["user" + req.params.id] console.log( user ); res.end( JSON.stringify(user)); }); })
这一步我们会创建 RESTful API 中的 deleteUser ,用来 删除指定用户 :
// index.js // 省略之前文件 只展示需要实现的接口 // mock 一条要删除的用户id const id = 2; app.get('/deleteUser', (req, res) => { fs.readFile( __dirname + "/" + "users.json", 'utf8', (err, data) => { data = JSON.parse( data ); delete data["user" + id]; console.log( data ); res.end( JSON.stringify(data)); }); })
本文首发在 pingan8787个人博客 ,如需转载请联系本人。