以下是关于 1688 商品搜索 API 设计中供应链标签与产业带数据过滤的详细内容:
需求理解
在 1688 这样的 B2B 电商平台上,采购商往往希望能够根据供应链标签(如是否为源头工厂、是否支持定制等)以及产业带信息(如义乌小商品产业带、东莞电子产业带等)来筛选商品,以找到符合自身需求的供应商和商品。因此,在商品搜索 API 中加入这些过滤功能十分必要。
API 接口设计
1. 接口定义
GET /1688/products/search
2. 请求参数
参数名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
keyword | string | 否 | 搜索关键词,用于模糊匹配商品名称、描述等 |
supply_chain_tags | array | 否 | 供应链标签列表,如 ["源头工厂", "支持定制"] |
industrial_belts | array | 否 | 产业带列表,如 ["义乌小商品产业带", "东莞电子产业带"] |
page | integer | 否 | 页码,默认为 1 |
page_size | integer | 否 | 每页显示的商品数量,默认为 20 |
access_token | string | 是 | 用于身份验证的访问令牌 |
3. 响应格式
使用 JSON 格式返回搜索结果,包含商品列表以及分页信息。
{
"code": 200,
"message": "Success",
"data": {
"total": 100,
"page": 1,
"page_size": 20,
"products": [
{
"product_id": "123456",
"title": "示例商品名称",
"price": 100.00,
"supply_chain_tags": ["源头工厂", "支持定制"],
"industrial_belt": "义乌小商品产业带"
},
{
"product_id": "789012",
"title": "另一个示例商品名称",
"price": 200.00,
"supply_chain_tags": ["品牌供应商"],
"industrial_belt": "东莞电子产业带"
}
]
}
}
数据库设计与数据处理
1. 数据库表结构
-
products 表:存储商品的基本信息。
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| product_id | varchar (20) | 商品唯一标识符 |
| title | varchar (255) | 商品名称 |
| price | decimal (10, 2) | 商品价格 | -
product_supply_chain_tags 表:存储商品的供应链标签信息,采用多对多关系。
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| product_id | varchar (20) | 商品唯一标识符 |
| supply_chain_tag | varchar (50) | 供应链标签 | -
product_industrial_belts 表:存储商品所属的产业带信息,采用多对多关系。
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| product_id | varchar (20) | 商品唯一标识符 |
| industrial_belt | varchar (100) | 产业带名称 |
2. SQL 查询示例
当接收到 API 请求时,根据请求参数构建 SQL 查询语句,实现供应链标签与产业带数据过滤。
SELECT p.product_id, p.title, p.price, GROUP_CONCAT(psct.supply_chain_tag) AS supply_chain_tags, GROUP_CONCAT(pib.industrial_belt) AS industrial_belt
FROM products p
LEFT JOIN product_supply_chain_tags psct ON p.product_id = psct.product_id
LEFT JOIN product_industrial_belts pib ON p.product_id = pib.product_id
WHERE
-- 处理搜索关键词
(p.title LIKE '%keyword%' OR p.description LIKE '%keyword%')
-- 处理供应链标签过滤
AND (psct.supply_chain_tag IN ('源头工厂', '支持定制') OR psct.supply_chain_tag IS NULL)
-- 处理产业带过滤
AND (pib.industrial_belt IN ('义乌小商品产业带', '东莞电子产业带') OR pib.industrial_belt IS NULL)
GROUP BY p.product_id
LIMIT 0, 20;
错误处理与安全性考虑
1. 错误处理
- 若请求参数格式错误,返回
400 Bad Request
错误,并给出具体的错误信息,如 “supply_chain_tags 参数格式错误,应为数组类型”。 - 若访问令牌无效,返回
401 Unauthorized
错误。 - 若数据库查询出现异常,返回
500 Internal Server Error
错误。
2. 安全性考虑
- 对输入的请求参数进行严格的验证和过滤,防止 SQL 注入等安全漏洞。
- 对 API 接口进行加密传输,使用 HTTPS 协议,确保数据在传输过程中的安全性。
通过以上 API 设计,可以为用户提供基于供应链标签和产业带数据的商品搜索过滤功能,帮助用户更精准地找到所需商品。