本文正在参加「金石计划 . 瓜分6万现金大奖」。
接口设计
把 server
端当做一个黑盒,它将如何与前端通讯?
功能范围
- B 端,用户注册,作品管理,模板管理
- 编辑器,单个作品的内容获取,修改,预览和发布
功能拆分
- 用户信息相关
- 作品管理
- 模板管理
- 编辑器
- 工具类
用户信息
- 获取手机短信验证码
- 登录,注册
- 获取用户信息
- 修改用户信息
作品管理
- 创建空白作品
- 复制作品(一个模板也是一个作品)
- 删除作品
- 恢复作品
- 转赠作品
- 我的作品列表(搜索,分页)
- 我的回收站列表(搜索,分页)
模板管理
- 首页推荐模板列表(搜索,分页) ----不需要登录校验
- 获取单个模板信息 ---不需要登录校验
- 我的模板列表(搜索,分页)
编辑器
设计时分开,但编写代码的时候会和作品管理写在一起,因为都是作品相关的。
- 查询单个作品信息
- 保存作品
- 预览作品
- 发布作品
- 发布作品为一个模板
渠道
- 创建渠道
- 删除渠道
- 修改渠道名称
工具类
- 上传图片
统一的输出格式
代码语言:javascript复制{
errno:0,// 错误码,无错误则返回 0
data:{},// 数据内容
message:'xxx' // 消息内容
}
数据库设计
需要存储的数据
- 用户
- 项目/模板(包含项目内容,组件信息)
- 渠道
数据之间的关系
数据表设计
注意:使用 sequelize
和 mongoose
的时候,会自动创建 id
,createdAt
和 updatedAt
,无需自己手动创建 。
用户
作品/模板
渠道
作品内容
- 未发布
- 发布
{
// 页面的组件列表
components: [Object],
// 页面的属性 ,如页面背景图片
props: Object,
// 配置信息, 如微信分享配置
setting: Object
}
书写代码
sequelize Model
以及关联关系mongoose Scheme
和Model
整体架构设计
基础功能设计
短信验证过程
初次获取验证码
- 前端发送请求
request
- 输入手机号,请求短信验证码 - 服务端
server
- 生成 4 位随机数,缓存2 min
- 服务端响应
res
- 发短信验证码
- 返回发送短信成功给前端
{ errno:0 }
再次获取验证码
- 前端发送请求
request
- 输入手机号,请求短信验证码 - 服务端
server
- 检查是否有缓存,没有就生成一个验证码,缓存2 min
- 服务端响应
res
- 有缓存,返回错误,不可以频繁获取
- 没有缓存,发送短信,并返回成功信息给前端
{ errno:0 }
登录验证
- 前端发送请求
request
- 输入手机号,短信验证码,请求登录验证 - 服务端
server
- 与缓存中的信息进行匹配 - 服务端响应
res
- 匹配成功,登录成功,返回 token
- 匹配失败(验证码错误或过期),登录失败
其他细节问题
- 缓存,禁止频繁发送
- 短信服务的提示和报警
- 短信发送失败,不会进行缓存,用户可以立刻再次请求验证码
- 如果
server
缓存失败,允许用户立刻重复获取验证码 - 短信服务挂掉,报警
用户信息接口
- 获取手机短信验证码
- 登录(注册)
- 获取用户信息
- 修改用户信息
代码演示
代码不贴了,只记录下文件位置,到时候看的时候代码仓库里找就行。
- routes/users.js
- controller/users/
- service/users/
- test/apis/users.js
作品管理接口
- 创建空白作品
- 复制作品(通过模板创建)
- 删除作品
- 恢复作品
- 转赠作品
- 我的作品列表(搜索,分页)
- 我的回收站列表(搜索,分页)
- 查询单个作品信息
- 保存作品
代码演示
- routes/works.js
- controller/works/
- service/works/
- test/apis/works.js
模板接口
- 首页推荐模板列表(搜索,分页) - 不需要登录校验
- 获取单个模板信息 - 不需要登录校验
- 我的模板列表(搜索,分页)
代码演示
- routes/templates.js
- controller/works/findTemplate
- service/works/templates
- test/apis/templates.js
发布相关的功能
发布,即获取一个 url
,能外网访问该作品。
功能范围
- 发布作品
- 支持多渠道
- 发布为模板
细节设计
- url 不能太长,因为要生成二维码。
- 作品发布之后,重新编辑,保存,未发布的时候线上不可以生效。
- 再次发布时,
url
不能变,渠道号也不能变。 - 用户访问
url
时必须带有渠道号,否则无法分渠道统计。 - 注意数据保密,防爬。
- 发布时进行内容安全检查。
代码演示
- routes/works.js
- controller/works/publishWorks.js
- service/works.js
- cache/works/publish.js
- test/apis/work.js
渠道接口
代码演示
- routes/channel.js
- controller/channel/
- service/channel.js
- cache/works/publish.js
- test/apis/channel.js
PS: 从本节开始就是大量的业务代码的书写,就不记录文章里了,需要的时候直接去看对应的代码就就行了。