前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Express-设计RestfulApi

Express-设计RestfulApi

原创
作者头像
iwhao
发布2024-07-04 08:50:40
2440
发布2024-07-04 08:50:40

前言

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:'修改成功'
    })
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 设计原则
  • 实例
  • 获取用户列表
  • 新增用户
  • 获取用户详情
  • 删除用户
  • 更新用户信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档