以下是关于京东商品属性 API 设计中多维度筛选与自定义字段扩展的详细方案:
需求理解
多维度筛选允许用户从多个不同的属性维度(如价格、品牌、尺寸、颜色等)对商品进行筛选,以快速定位符合特定条件的商品。自定义字段扩展则为用户提供了灵活添加和使用额外商品属性字段的能力,以满足多样化的业务需求。
API 设计思路
1. 多维度筛选
- 请求参数设计:在 API 请求中,通过参数来指定筛选条件。每个筛选维度可以使用一个或多个参数来表示。例如:
{
"price_min": 100,
"price_max": 500,
"brand": ["Apple", "Samsung"],
"color": ["Red", "Blue"],
"size": ["S", "M"]
}
筛选逻辑实现:在 API 服务端,根据接收到的筛选参数,对商品数据进行过滤。可以使用数据库的查询语句(如 SQL)来实现筛选逻辑。例如,对于 MySQL 数据库,可以使用以下查询语句:
SELECT * FROM products
WHERE price BETWEEN 100 AND 500
AND brand IN ('Apple', 'Samsung')
AND color IN ('Red', 'Blue')
AND size IN ('S', 'M');
- 分页支持:为了提高性能和用户体验,支持分页查询。在请求参数中添加
page
和page_size
参数,用于指定要获取的页码和每页的商品数量。
2. 自定义字段扩展
- 数据模型设计:在数据库中设计一个表来存储自定义字段信息。该表可以包含以下字段:
product_id
:关联的商品 ID。field_name
:自定义字段的名称。field_value
:自定义字段的值。field_type
:自定义字段的类型(如文本、数字、日期等)。
- API 请求参数设计:在 API 请求中,允许用户指定要查询的自定义字段。例如:
{
"custom_fields": ["custom_field_1", "custom_field_2"]
}
- 数据查询与返回:在 API 服务端,根据用户指定的自定义字段,从自定义字段表中查询相应的数据,并将其合并到商品信息中返回给用户。
API 接口设计
1. 多维度筛选 API
- 接口地址:
/api/products/filter
- 请求方法:
GET
或POST
- 请求参数:
{
"price_min": 100,
"price_max": 500,
"brand": ["Apple", "Samsung"],
"color": ["Red", "Blue"],
"size": ["S", "M"],
"page": 1,
"page_size": 20
}
响应数据:
{
"total": 100,
"page": 1,
"page_size": 20,
"products": [
{
"id": 1,
"name": "Product 1",
"price": 200,
"brand": "Apple",
"color": "Red",
"size": "S"
},
{
"id": 2,
"name": "Product 2",
"price": 300,
"brand": "Samsung",
"color": "Blue",
"size": "M"
}
]
}
2. 自定义字段扩展 API
- 接口地址:
/api/products/custom-fields
- 请求方法:
GET
或POST
- 请求参数:
-
{ "product_id": 1, "custom_fields": ["custom_field_1", "custom_field_2"] }
响应数据
-
{ "product_id": 1, "custom_fields": { "custom_field_1": "Value 1", "custom_field_2": "Value 2" } }
错误处理与异常情况
- 参数验证:在 API 服务端对请求参数进行验证,确保参数的合法性。如果参数不合法,返回相应的错误信息。
- 数据库错误:如果在查询数据库时出现错误,捕获异常并返回合适的错误信息,如数据库连接失败、查询语句错误等。
- 数据不存在:如果根据筛选条件或商品 ID 未找到相应的数据,返回空结果或提示信息。
- 索引优化:在数据库中为经常用于筛选的字段创建索引,以提高查询性能。
- 缓存机制:对于频繁查询的数据,可以使用缓存(如 Redis)来减少数据库的访问次数。
- 异步处理:对于复杂的查询操作,可以使用异步处理来提高系统的并发性能。