簡體   English   中英

如何為 HTTP GET 的多個鍵值參數設計 REST URI

[英]How to design REST URI for multiple Key-Value params of HTTP GET

我正在設計一個 RESTful API。

一項服務應該為多個鍵值對提供查詢功能。 例如,客戶端可以使用一個 HTTP GET 請求查詢不同的產品和相關數量。

客戶想查詢金額為 44 的產品 1 和金額為 55 的產品 2。我實際上不希望我的 URI 看起來像這樣:

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

因為我不知道查詢了多少產品。

或者像這樣:

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

因為客戶怎么知道逗號前是productId,逗號后是數量。

有人有其他解決方案嗎? 還是提供通過一個請求查詢多個產品的可能性不是 RESTful? 提供僅查詢具有關聯數量的一種產品的可能性是否更好,如果客戶想要查詢更多產品,他們應該發送更多請求?

這是傳遞參數的一種想法:

/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<kv>類的 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<kv>使用

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

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

另一個建議是,如果您不知道查詢了多少產品,請為此使用POST請求。

我會通過為產品的各個部分添加明確的名稱並使用分號代替逗號來分隔產品屬性來稍微擴展您的第二個建議,因為順序無關緊要*

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

請注意第二個產品的idqty是如何切換的,因為屬性的順序無關緊要。


*當順序重要時使用逗號,當順序不重要時使用分號。

我能想到的最慣用的 HTTP GET 方式:

/produkt?productId=1&productquantity=44&productId=2&productquantity=55

我最近遇到了類似的情況,客戶需要能夠通過為每個產品任意定義的“產品屬性”進行搜索。 客戶還需要能夠輕松創建這些鏈接並通過電子郵件等方式傳遞它們。我不想創建自定義查詢字符串,因為我不想創建自定義解析器,它添加了一個額外的步驟,其中客戶可能會犯錯誤。 而且我不想傳遞 json,因為它在某些情況下依賴客戶端生成該 JSON。

雖然 HTTP 規范並未對每個參數的多個值采取強硬立場,但我能找到的每個示例都表明保留了順序。 Java 示例:

String[] productIds = this.request.getParameterValues("productId");
String[] productQuantities = this.request.getParameterValues("productquantity");

productIds[0]; // 1
productQuantities[0]; // 44
productIds[1]; // 2
productQuantities[1]; // 55

我將把錯誤和索引范圍檢查留給讀者作為練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM