2017-04-20 69 views
-1

經過StackOverflow上的幾篇文章後,我仍然不太明白在URL中使用查詢參數是否被認爲是RESTFUL或者不是。例如,給定地址http://www.example.com/product.php?productID=123。這是一個RESTFUL設計嗎?我的直覺說這是因爲它相當於向服務器發送HTTP GET請求以從數據庫獲取相應的數據。在URL中使用查詢參數被認爲是'RESTFUL'?

如果是RESTFUL設計,我的第二個問題是我們如果我們只使用這種「查詢參數」風格,那麼只能實現HTTP GET?例如,我們永遠不能通過使用帶有查詢參數的URL進行HTTP POST請求?productID=123,對吧? 謝謝。

+0

查詢字符串是REST的一部分... –

+0

我感到困惑,因爲我在互聯網上發現的例子在這種風格:http://www.example.com/product.php/POST,讓我不知道.. 。無論如何感謝您的答案 – jackycflau

+0

btw如果我使用這種風格,我可以做這個POST請求?我有0個想法.. – jackycflau

回答

0

a)您可以使用查詢參數。您可以使用路徑段。或者你可以使用兩者。你的選擇。

b)是的,你可以使用查詢參數POST到URI。

0

路徑參數和查詢參數應在不同的場景中:

路徑參數:

當你試圖通過ID訪問資源,您應該使用它。例如

example/products/123456 

上面你正在使用的ID 123456

產品如果你有一個子資源,例如:

example/products/123456/comments/1324 

高於你所得到的評論ID爲1324到產品ID爲123456.

查詢參數:

當您嘗試使用與ID不同的過濾器查詢資源時,應該使用它。例如:

example/products?kind=food 

上面你得到所有他們是親切食物的產品。

如果您有更多的過濾器,如:

example/products?kind=food&priceLessThan=1200 

高於你所得到的所有,他們是一種食品,價格,產品低於1200你應該考慮的是,查詢參數是沒有必要的將這些字段匹配到產品資源中,在這種情況下,價格就是產品的字段,而不是priceLessThan,這個名稱只是過濾資源的邏輯。

此外,你可以排序和pagining這樣的:

example/products?kind=food&priceLessThan=1200&sortBy=name&page=10 

正如你所看到的,查詢參數更靈活,因此,我們應該使用這些過濾。

POST與查詢參數:

您可以使用它,但是,它應該是陌生的。POST方法用於創建新資源,並且可以將請求主體創建爲JSON或XML所需的所有信息。

我需要一些元數據,當您創建一個資源,我建議使用請求頭。

相關問題