2013-05-15 49 views
4

在REST API中將許多請求參數與GET請求放在一起是一個好習慣嗎?在REST API中使用GET請求提出許多請求參數

我已經經歷了幾個網站,並試圖獲得參數實現GET URI的標準方式。

下面是我想要實現的:search for all users having provided all the search criteria

搜索標準是一樣companyIDsectionsoffsetlimitorderbyfilter

按照基本標準GET要求不能有request body or payload在裏面。

會不會是做一個GET請求,並把後面?所有參數請求URL好辦法,這樣的事情:

GET http://localhost:8080/api/users?companyId=qwerty&sections=hr&offset=0&limit=20&oorderby=asc&filter=^[sSmM]

我想做出一個PUTPOST請求和發送所有這些數據都在有效載荷中,並實現代碼以返回所需的響應,即用戶列表。

如果我這樣做,我將更改默認行爲HTTP methods

請你指導我一種擺脫困境的方法。 謝謝。

回答

3

我想你在GET請求中放入了多少個參數並不重要。 POSTPUT請求的目的不是爲了保持URL清潔,而是要保持REST結構。

GET的原始定義,POST和PUT是

  • GET:從您的服務器
  • POST獲取資源:服務器
  • PUT上創建一個資源:更新服務器上的資源
+0

我明白這一點。你不覺得這些請求變得太長了。有一點,'POST'也被用於'update',其中'PUT'也被用於'create'。 – Joshi

+1

當然,您可以使用'PUT'來創建,反之亦然,但這不會與REST的定義一致。 url字符串的最大長度限制爲2000個字符 - http://www.faqs.org/rfcs/rfc2616.html - 這應該是您唯一關心的問題。如果你想避免不必要的'GET'參數,你應該確保像'orderby'或'limit'這樣的東西是可選的,所以你不需要每次都設置它們 – MatthiasLaug

1

休息不過是一種技術/框架/程序。

從一個簡單的servlet調用中,這不是特別的。它始終遵循請求的標準約定

GET - 從服務器檢索任何數據。您可以有任意數量的參數,限制爲256個字符。這些參數應該只是用於傳入數據的過濾器,並且不會改變系統。

https://www.google.co.in/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

如果你看到上面的網址,U可以看到許多參數。但他們只是結果的過濾器。他們不會改變系統。

POST - 發送一些數據,使其改變系統,通常添加/刪除數據。

PUT - 這是一些特別的東西,說POST的進步,當你想更新等植物學數據

+0

我明白這一點。但是,您不認爲這些請求的請求時間太長。有一點,'POST'也被用於'update',其中'PUT'也被用於'create' – Joshi

2

其實你可以通過請求主體用GET請求中使用。這樣做並不常見。 Jquery支持瀏覽器端和REST API,比如彈性搜索API使用它。他們有一個很好的基於json的查詢dsl,你實際上可以使用這些GET請求。由於某些HTTP框架不支持使用GET來傳遞主體,因此Elasticsearch也提供POST的備用。

至於使用大量的URL參數,您也應牢記兩個問題:

  1. 網址沒有無限的長度。瀏覽器之間存在一些差異,但通常情況下它只有幾KB。特別是一些較舊的移動瀏覽器在這裏有限制。如果你在請求中放了很多東西,基本上這意味着url被截斷,那麼碰到這個限制是相當容易的。
  2. 長的URI看起來很醜,你不一定想在Web UI中顯示它們。