如何设计REST URI的HTTP GET的多个键值PARAMS(How to design RES

2019-08-03 18:04发布

我设计一个RESTful API。

一个服务应该多个键值对提供查询功能。 例如,客户端可以与不同产品的一个HTTP GET请求和相关联的查询的数量。

客户想查询产品1我其实不希望我的URI看起来像这样量44和产品2与量55:

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

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

或者是这样的:

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

因为客户端怎么能知道逗号之前存在产品ID和逗号的数量后。

有没有人有其他解决办法? 或者是不是RESTful的提供查询多个产品,一个请求的可能性? 它是更好地提供可能性查询只是一个与产品相关的数量,如果客户想查询更多的产品,他们应该派遣更多的要求呢?

Answer 1:

我将扩大在你的第二个建议,一点点加入明确的名称为您的产品的各个部分,并用分号来代替逗号分隔的产品属性,因为顺序并不重要*。

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

注意如何idqty切换周围的第二款产品,因为属性的顺序并不重要。


*还有就是用逗号时的顺序很重要,和分号当顺序并不重要的约定。



Answer 2:

这里有一个想法传递参数:

/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"}]

是的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;
    }

}

所以你可以很容易地转换查询参数productDetailList<kv>使用

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

比你可以轻松地重复所有元素。

另一个建议是,如果你不知道有多少产品被查询然后用一个做POST此请求。



文章来源: How to design REST URI for multiple Key-Value params of HTTP GET