Express-设计RestfulApi

2024-07-04 08:50:40 浏览数 (1)

前言

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。

总结就是,RestfulApi 是一种流行的 API 设计风格,可以让接口含义更加清晰,更简洁,更有层次,可维护性更高

下面就就简单基于 Express 设计一个 Restful 结构的 Api

设计原则

在这之前说一下原则,接口尽量不包含动词,而是一种资源,举例,设计一个用户的相关接口,包括,

  • 获取用户列表
  • 获取用户详情
  • 添加用户
  • 更新用户信息
  • 删除用户信息

一般设计接口名称 往往会加入动词 get 、add、 up、 del

  • 获取用户列表 /getUserList
  • 获取用户详情 /getUserDetail
  • 添加用户 /addUser
  • 更新用户信息 /upDataUser
  • 删除用户信息 /delUser

因为资源标识一种实体,所以应该是名词,URI 不应该有动词,动词应该放在http协议中中,例如 get post put delete

所以正确的命名应该是

id代表用户唯一标识

功能

URI

请求方式

获取用户列表

/user

get

获取用户详情

/user/:id

get

添加用户

/user

post

更新用户信息

/user

put

删除用户信息

/user/:id

delete

这样是不是简洁明了,只用到一个关键字,user


实例

基于之前的一篇文章 基础架构搭建 Express-MVC 创建了获取用户列表的,下面再接着依次实现 新增用户、获取详情、更新用户、删除用户 的api

获取用户列表

获取用户列表接口 不在介绍,想了解请看 Express-MVC

新增用户

添加路由

代码语言:node复制
router.post('/user', user.created)

user 控制器下添加create 方法

代码语言:node复制
// 添加用户
async function create(req, res, next){
  let result = await UserModel.create(req.body);
  if(result){
    res.send({
      code: 200,
      data:result,
      msg:'创建成功'
    })
  }
}

获取用户详情

添加路由

代码语言:node复制
router.get('/user/:id', user.created)

user 控制器下添加show 方法

代码语言:node复制
// 获取用户详情
async function show(req, res, next){
  let result = await UserModel.findOne({
    where: {
      id:req.params.id
    }
  })
  if(result){
    res.send({
      code: 200,
      data:result,
      msg:'查询成功成功'
    })
  }
}

删除用户

添加路由

代码语言:node复制
router.delete('/user/:id', user.del)

user 控制器下添加del 方法

代码语言:node复制
// 删除用户
async function del(req, res, next){
  let result = await UserModel.destroy({where:{
    id: req.params.id
  }});
  if(result){
    res.send({
      code: 200,
      data:result,
      msg:'删除成功'
    })
  }
}

更新用户信息

添加路由

代码语言:node复制
router.put('/user/:id', user.del)

user 控制器下添加update 方法

代码语言:node复制
// 修改用户数据
async function update(req, res, next){
  
  let result = await UserModel.update({
    age: req.body.age,
    name:req.body.name
  },{where:{
    id: req.body.id
  }});
  if(result){
    res.send({
      code: 200,
      data:result,
      msg:'修改成功'
    })
  }
}

0 人点赞