API搜索协议,属性ID上的单个或多个列表



我们正在对Products进行属性搜索,并创建一个搜索API。

API产品在其请求中具有属性,包括VendorId(销售产品的人(和LocationId(销售地点(。下面,是否最好将Vendor和LocationId设为一个数组,而不是单个数组?前端搜索只允许单选下拉菜单。然而,在未来需求的情况下,API后端的最佳实践是什么?我不想把后端和前端连在一起。

public class GetProductRequest {
private String productSearchString;
private Integer locationId;
private Integer providerId;
private String sortField = "ProductName,desc";
private int pageNumber = 0;
private int pageSize = 10;
}

SQL查询:

select distinct product.* 
from dbo.productContract
left join dbo.product 
on productContract.productId = product.productId
left join dbo.vendor
on productContract.vendorId = vendor.vendorid
left join dbo.location
on productContract.locationId = location.locationId
where productContract.vendorId in (@vendorIds) and productContract.LocationId in (@LocationIds)

后端的唯一变化是将where ==转换为where in以进行多重转换。

这取决于情况。

RESTapi是关于资源的,因此拥有像这样的端点是无稽之谈

.../api/v1/product

即接受多个适用的搜索条件字段值,因为它将返回什么-数组?第一个有效?

想想看,用户发送一个元素数组是多么奇怪,因为API需要它

当你有时的另一个故事

.../api/v1/products

那么多个搜索条件是完全可以和预期的。

在我看来,您应该提供两个端点,并且每个端点都应该有另一个请求有效负载-如果是单一资源,那么对于资源列表,搜索条件字段应该绝对是单一的-好吧,在我看来您可以接受描述有效产品的请求列表

[
{
productName:"sneakers",
locationId:"US",
providerId:"Nike",
...
},
// ... OR
{
productName:"sneakers",
locationId:"US",
providerId:"Adidas",
...
},
...
]

另外,请记住YAGNI规则。不执行总的、最终的、";我再也不会看这个了"后端REST API:(

最新更新