电商系统设计之商品接口 前言 接口设计 接口文档 致谢 交流

前言

我应该是少数在文章中直接展示接口文档的人。本篇我思考了很久到底要不要解析下商品接口开发的注意点。

客户端开发与服务端开发即是天敌也是兄弟。希望本篇文章让你们减少争执,把“爱”给对方。

接口设计

简述

电商系统设计之中,比较复杂的接口就论商品详情的接口了,响应参数特别多,特别杂。在开发获取商品详情接口时要遵循以下几个原则

  • 返回的JSON嵌套数量要少
  • 方便去查询到指定的SKU
  • 其他接口相关规范

image.png

查询SKU

关于查询SKU,我让我的小伙伴是这样做的,首先拿出规格和属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
json复制代码"选择颜色": [
{
"name": "银色",
"id": 75
}
],
"选择版本": [
{
"name": "公开版",
"id": 77
},
{
"name": "【原厂延保版】",
"id": 78
}
],
"内存": [
{
"name": "64G",
"id": 82
},
{
"name": "256G",
"id": 83
}
],

没错,你没有看错,实际就是将规格作为key,属性作为value。将value[id]取出,进行拼接即可查询到对应的SKU了。

1
css复制代码响应参数[规格名称][属性编码] = 拼接SKU串的必需品

规格相当于一个分组,属性其实也是拼接SKU的重要组成部分,上述数据为例

1
ini复制代码75_77_82 = 银色,公开版,64G

接口文档

请求地址

/v1/product/{productId}

请求类型

GET

请求参数

参数 类型 默认值 说明
productId int 0 商品编码

响应示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
css复制代码{
"code": 200,
"message": "获取成功",
"data": {
"id": 131,
"name": "Apple iPhone X (A1865) 64GB 深空灰色 移动联通电信4G手机",
"price": "8388.00",
"market_price": "8388.00",
"sketch": "IPhone大法好,打九折,打九折,快剁手",
"intro": "这是商品描述",
"keywords":['苹果','iphone'],
"attribute": {
"选择颜色": [
{
"name": "银色",
"id": 75
},
{
"name": "深空灰色",
"id": 76
}
],
"选择版本": [
{
"name": "公开版",
"id": 77
},
{
"name": "【原厂延保版】",
"id": 78
},
{
"name": "双网通版",
"id": 79
},
{
"name": "无线充套装",
"id": 80
},
{
"name": "Airpods套装",
"id": 81
}
],
"内存": [
{
"name": "64G",
"id": 82
},
{
"name": "256G",
"id": 83
}
],
"购买方式": [
{
"name": "官方标配",
"id": 84
},
{
"name": "移动优惠购",
"id": 85
},
{
"name": "电信优惠购",
"id": 86
},
{
"name": "联通优惠购",
"id": 87
}
]
},
"album": [
{
"id": 2,
"name": "这是第一张图片",
"url": "http://xxx.com/59ec33eaN6ddb0c54.jpg"
},
{
"id": 3,
"name": "这是第二张图片",
"url": "http://xxx.com/59ec3400Nce4cc116.jpg"
}
],
"radio": {
"id": 1,
"name": "这是一个视频",
"url": "http://xxx.com/1.mp4"
},
"sku": {
"75_77_82_84": {
"id": 1018,
"name": "选择颜色:银色;选择版本:公开版;内存:64G;购买方式:官方标配;",
"price": "8388.00",
"stock": 83888388
},
"75_77_82_85": {
"id": 1019,
"name": "选择颜色:银色;选择版本:公开版;内存:64G;购买方式:移动优惠购;",
"price": "8388.00",
"stock": 83888388
},
"75_77_82_86": {
"id": 1020,
"name": "选择颜色:银色;选择版本:公开版;内存:64G;购买方式:电信优惠购;",
"price": "8388.00",
"stock": 83888388
},
"75_77_82_87": {
"id": 1021,
"name": "选择颜色:银色;选择版本:公开版;内存:64G;购买方式:联通优惠购;",
"price": "8388.00",
"stock": 83888388
},
"75_77_83_84": {
"id": 1022,
"name": "选择颜色:银色;选择版本:公开版;内存:256G;购买方式:官方标配;",
"price": "8388.00",
"stock": 83888388
},
"75_77_83_85": {
"id": 1023,
"name": "选择颜色:银色;选择版本:公开版;内存:256G;购买方式:移动优惠购;",
"price": "8388.00",
"stock": 83888388
}
}
}
}

响应参数说明

核心参数

参数 类型 默认值 说明
id int 0 商品编码
name string - 商品标题
price double 00.00 商品价格
keywords string - 商品关键字
market_price double 00.00 市场价格
virtual int 0 虚拟销量
sketch string - 商品简述
intro string - 商品详情

商品图参数

参数 类型 默认值 说明
album[] array [] 商品轮播图
id int 0 资源编码
name string - 图片名称
url string - 资源路径

商品视频参数

无视频则返回 []

参数 类型 默认值 说明
radio[] array [] 商品视频
id int 0 资源编码
name string - 视频名称
url string - 资源路径

商品规格/属性参数

参数 类型 默认值 说明
attribute array[] [] 商品属性
[(attr_name)] [] array[] [] 属性名称
name string - 属性项名称
id int 0 属性项编码

商品SKU参数

参数 类型 默认值 说明
sku[] array[] [] 商品sku
[(option_id)] [] array[] 商品SKU查询办法为 attribute[(attr_name)][‘id’] 拼接
id int 0 sku编码
name string - sku 名称
price double 00.00 商品价格
stock int 0 商品库存

致谢

字不在多,讲清楚就行,感谢你看到这里,希望本篇文章可以帮助到你,有疑问可以在评论区讨论,谢谢。

交流

生命不息,编码不止。

微信搜索 【一文秒懂】 传播技术正能量,持续学习新知识。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%