附录2--电商系统设计

1. 业务场景

我们以一个简化版的电商网站项目为例,其中涉及到6块功能,分别是登录、添加商品、商品列表、下订单、我的订单、订单详情,每个功能都有相应的权限限制,并且调用对应的接口来做相应的业务逻辑处理,完成后跳转到下一页面。具体页面/功能、权限、调用接口、动作及跳转的逻辑关系如下:

页面 权限 调用接口 动作及跳转
1登录 所有用户 login 点击【登录】->商品页
2添加商品 管理员权限 add_product
3商品列表 所有用户 get_product 点击【下单】->订单
4订单 订单所属用户 order 点击【支付】->我的订单
--支付 订单所属用户 mock --点击【支付完成】->我的订单
5我的订单 订单所属用户 user_orderid 点击【订单区域】->订单详情
6订单详情 订单所属用户 get_order

项目的设计遵循前后端完全分离的设计模式,前端可以是Web、iOS、Android、小程序各种类型的客户端,但后端接口都是一致的,因此我们用代码实现上述6个接口功能,然后开发Web网站调用接口的实现电商下单购买支付的流程,并列举两个其中比较典型的安全问题,项目示例代码参见GitHub:https://github.com/8784285/order_web.git

2. 接口文档

1) 登录

参数名 类型 是否必填 备注 示例
username string 字母数字_.组合,长度2-20 Mr.null
password string MD5加密,长度32
  • 请求示例:
{
    "username": "Mr.null",
    "password": "dc483e80a7a0bd9ef71d8cf973673924"
}
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 4:成功;2:失败 4
msg string 登录成功/非法用户 "登录成功"
token string
  • 返回示例:
{
  "code": 4,
  "msg": "登录成功",
  "token": "eyJhbGciOiJIUzUxMiIsImlhdCI6MTU5MTgzNzQ0MSwiZXhwIjoxNTkxOTIzODQxfQ.eyJ1c2VybmFtZSI6Ik1yLm51bGwiLCJwYXNzd29yZCI6ImRjNDgzZTgwYTdhMGJkOWVmNzFkOGNmOTczNjczOTI0In0.fJVi3MZXmEz9lue0gZUO0m_lG2I-8endYsGOP4FNCGZ9wdGpKDb-yDNGj9XCrRXtoIz0AGIh-v-_oPWeOSYspQ"
}

2) 添加商品

参数名 类型 是否必填 备注 示例
name string 字母数字_.组合,长度2-20 Mr.null
price number 保留两位小数 25.50
count count >0的整数 100
  • 请求示例:
{
"name":"Book",
"price":16.50,
"count":100
}
  • 请求头:
参数名 类型 是否必填 备注 示例
Authorization string 请求授权头 XDS 7.dVkI-SQWxjICYXD_TE54hZGIZwVud18LfXew-Ioorg0
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 2001:成功;2002:失败 2001
msg string 商品添加成功/商品添加失败 "商品添加成功"
  • 返回示例:
{
  "code": 2001,
  "msg": "商品添加成功"
}

3)商品列表

参数名 类型 是否必填 备注 示例
name string 不传则默认返回20个商品 Book
  • 请求示例:
http://127.0.0.1:5000/get_product?name=Book
  • 请求头:
参数名 类型 是否必填 备注 示例
Authorization string 请求授权头 XDS 7.dVkI-SQWxjICYXD_TE54hZGIZwVud18LfXew-Ioorg0
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 5:成功;6:失败 5
msg string 查询成功/未查询到数据 "查询成功"
data object 包含count、name、price的1到多个字典
  • 返回示例:
{
  "code": 5,
  "data": {
    "count": 100,
    "name": "Book",
    "price": 12.5
  },
  "msg": "查询成功"
}

4)提交订单

参数名 类型 是否必填 备注 示例
sid number >0的整数 12
orderprice number 商品价格,保留两位小数 37.50
username string 登录用户的用户名 Mr.null
receiver string 收件人 张三
phone string 电话 13800138000
address string 收件地址 北京市海淀区长安街888号
  • 请求示例
{
    "sid":11,
    "orderprice":39.50,
    "username":"admin",
    "receiver":"张三",
    "phone":"13800138000",
    "address":"北京市海淀区长安街888号"
}
  • 请求头:
参数名 类型 是否必填 备注 示例
Authorization string 请求授权头 XDS 7.dVkI-SQWxjICYXD_TE54hZGIZwVud18LfXew-Ioorg0
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 2003:成功;2004:失败 2003
msg string 订单创建成功/订单创建失败 "订单创建成功"
  • 返回示例:
{
  "code": 2003,
  "msg": "创建订单成功"
}

5)获取用户订单

参数名 类型 是否必填 备注 示例
username string 登录用户的用户名 Mr.null
  • 请求示例
http://192.168.160.94:5000/user_orderid?username=Mr.null
  • 请求头:
参数名 类型 是否必填 备注 示例
Authorization string 请求授权头 XDS 7.dVkI-SQWxjICYXD_TE54hZGIZwVud18LfXew-Ioorg0
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 2003:成功;2004:失败 2003
msg string 订单创建成功/订单创建失败 "订单创建成功"
orderid object 用户订单编号列表,最多20条
  • 返回示例:
{
  "code": 5,
  "msg": "查询成功",
  "orderid": [
    1,
    2
  ]
}

6)订单详情

参数名 类型 是否必填 备注 示例
productid number >0的整数 12
  • 请求示例
http://192.168.160.94:5000/get_order?productid=12
  • 请求头:
参数名 类型 是否必填 备注 示例
Authorization string 请求授权头 XDS 7.dVkI-SQWxjICYXD_TE54hZGIZwVud18LfXew-Ioorg0
  • 返回结果:
参数名 类型 是否必需 备注 示例
code number 5:成功;6:失败 5
msg string 查询成功/未查询到结果 "查询成功"
orderid object 包含count、name、price等用户订单详情字典
  • 返回示例:
{
  "code": 5,
  "data": {
    "count": 100,
    "name": "Book",
    "price": 12.5
  },
  "msg": "查询成功"
}

3. 数据库结构

电商项目数据库共包含4个表,分别是

  • stock:商品信息表
  • stock_order:订单信息表
  • users:用户表
  • userinfo:用户详情信息表

数据库表结构及初始化数据如下(sql详见GitHub:)

-- phpMyAdmin SQL Dump
-- ve

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

<p> 本专刊共五章 21 篇正文及 5 个对应的 GitHub 项目,主要介绍了接口测试基础知识及测试用例设计方法,认证鉴权、加密验签,自动化测试,安全性测试,性能测试等内容,每一章节都有代码实例来剖析其原理,并提供了一个完整电商系统的代码,可以直接实操演练,让你知其然知其所以然,轻松搞定接口测试。加入专刊,你就加入了一大群志同道合的优质测试人圈子,同时还有和作者及作者的朋友们互动交流的机会。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务