电商商务/外贸系统设计之商品API接口接入
前言
我应该是少数在文章中直接展示接口文档的人。本篇我思考了很久到底要不要解析下商品接口开发的注意点。
客户端开发与服务端开发即是天敌也是兄弟。希望本篇文章让你们减少争执,把“爱”给对方。
接口设计
简述
电商系统设计之中,比较复杂的接口就论电商商品详情的接口了,响应参数特别多,特别杂。在开发获取商品详情接口时要遵循以下几个原则
-
返回的JSON嵌套数量要少
-
方便去查询到指定的SKU
-
其他接口相关规范

查询SKU
关于查询SKU,我让我的小伙伴是这样做的,首先拿出规格和属性
-
"选择颜色": [ -
? { -
? ? ? ? ?"name": "银色", -
? ? ? ? ?"id": 75 -
? } -
], -
"选择版本": [ -
? { -
? ? ? ? ?"name": "公开版", -
? ? ? ? ?"id": 77 -
? }, -
? { -
? ? ? ? ?"name": "【原厂延保版】", -
? ? ? ? ?"id": 78 -
? } ? -
], -
"内存": [ -
? { -
? ? ? ? ?"name": "64G", -
? ? ? ? ?"id": 82 -
? }, -
? { -
? ? ? ? ?"name": "256G", -
? ? ? ? ?"id": 83 -
? } -
],
没错,你没有看错,实际就是将规格作为key,属性作为value。将value[id]取出,进行拼接即可查询到对应的SKU了。
-
响应参数[规格名称][属性编码] = 拼接SKU串的必需品
规格相当于一个分组,属性其实也是拼接SKU的重要组成部分,上述数据为例
-
75_77_82 = 银色,公开版,64G
接口文档
请求地址
/v1/product/{productId}
请求类型
GET
请求参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| productId | int | 0 | 商品编码 |
响应示例
-
{ -
?"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 | 商品库存 |
致谢
字不在多,讲清楚就行,感谢你看到这里,希望本篇文章可以帮助到你,有疑问可以在评论区讨论,谢谢。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!