如何为HTTP GET的多个Key-Value参数设计REST URI

我正在设计一个RESTful API。

一项服务应为多个键值对提供查询function。 例如,客户端可以使用一个HTTP GET请求查询不同的产品和相关数量。

客户想要使用金额44和产品2查询产品1,金额为55.我实际上不希望我的URI看起来像这样:

/produkt?productId1=1&productquantity1=44&productId2=2&productquantity2=55 

因为我不知道有多少产品被查询。

或者像这样:

 /produkt?product=1,44&product=2,55 

因为客户怎么能知道在逗号之前有productId和逗号之后的数量。

有没有人有其他解决方案? 或者,提供使用一个请求查询多个产品的可能性是不是RESTful? 提供仅查询一个具有相关数量的产品的可能性是否更好?如果客户想要查询更多产品,他们应该发送更多请求?

我会稍微扩展你的第二个建议,为产品的各个部分添加明确的名称,并使用分号代替逗号分隔产品属性,因为订单无关紧要*

 /products?id=1;qty=44&qty=55;id=2 

请注意第二个产品如何切换idqty ,因为属性的顺序无关紧要。


*当订单很重要时,有一个约定使用逗号,当订单不重要时有分号。

以下是传递参数的一个想法:

 /products?productDetail=[{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}] 

哪里

 [{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}] 

List类的JSON表示

 class kv { String key; String value; public kv(String key, String value) { super(); this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } 

这样您就可以轻松地将查询参数productDetail转换为List

 new Gson().fromJson(productDetail,kv.class); 

比你可以轻松迭代所有元素。

另一个建议是,如果您不知道查询了多少产品,请使用POST请求。