jos*_*737 10 java rest soa web-services http
我正在设计一个RESTful API.
一项服务应为多个键值对提供查询功能.例如,客户端可以使用一个HTTP GET请求查询不同的产品和相关数量.
客户想要使用金额44和产品2查询产品1,金额为55.我实际上不希望我的URI看起来像这样:
/produkt?productId1=1&productquantity1=44&productId2=2&productquantity2=55
Run Code Online (Sandbox Code Playgroud)
因为我不知道有多少产品被查询.
或者像这样:
/produkt?product=1,44&product=2,55
Run Code Online (Sandbox Code Playgroud)
因为客户怎么能知道在逗号之前有productId和逗号之后的数量.
有没有人有其他解决方案?或者,提供使用一个请求查询多个产品的可能性是不是RESTful?是否更好地提供仅查询一个具有相关数量的产品的可能性,如果客户想要查询更多产品,他们应该发送更多请求?
以下是传递参数的一个想法:
/products?productDetail=[{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}]
Run Code Online (Sandbox Code Playgroud)
哪里
[{"key":"key0","value":"key1"},{"key":"key2","value":"key2"},{"key":"key3","value":"key3"}]
Run Code Online (Sandbox Code Playgroud)
是的JSON表示List<kv>类
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以轻松地将查询参数转换productDetail为List<kv>使用
new Gson().fromJson(productDetail,kv.class);
Run Code Online (Sandbox Code Playgroud)
比你可以轻松迭代所有元素.
另一个建议是,如果您不知道查询了多少产品,请使用此POST请求.
我将通过为产品的各个部分添加明确的名称,并使用分号代替逗号来分隔产品属性来扩展您的第二个建议,因为顺序并不重要*。
/products?id=1;qty=44&qty=55;id=2
Run Code Online (Sandbox Code Playgroud)
id请注意第二个产品中和 的切换方式qty,因为属性的顺序并不重要。