簡體   English   中英

REST API URL中的額外查詢參數

[英]Extra Query parameters in the REST API Url

在我的Rest應用程序中,資源url還支持查詢參數,如pageSize,pageNum,name等。所以請求網址看起來像

/資源/ {ID}?頁次= 1&的pageSize = 25&DESC = “你好”

現在假設一個客戶端添加一個額外的查詢參數,說'lang',我的服務器不支持

/ resource / {id}?pageNum = 1&pageSize = 25&desc =“hello”&lang =“eng” ,但我的服務器不支持任何lang參數。

什么應該是最好的設計決定

選項1:忽略額外的無效查詢參數並提供請求。

選項2:向客戶端拋出錯誤的請求消息。

感謝Advance Singla

毫無疑問,客戶必須堅持使用Api文檔。

但是APis中的某些變化呢(只是一個小的變化,不涉及遷移到新的API版本)

比如說,API資源:/ dummy / api / Iid1支持3個查詢參數,即a,b,c

所以完整的URi:/ dummy / api / Id1?a = 1&b = 20&c = 45是API公開的有效請求,所有查詢參數,即a,b,c都是可選參數,即如果這些參數不存在在請求中,服務器將它們處理為某個默認值,如a = 0,b = 0,c = 0

在某些時候,大量客戶端基於上述URL方案構建其應用程序。

現在API提供者想要廢棄參數'b'並決定拋棄額外/未知參數的異常

這意味着所有客戶端應用程序圍繞涉及參數“b”的最后一個URL方案構建將失敗!

這簡單地表明,拋出額外/未知查詢參數的異常總是導致客戶端和服務器問題的緊密耦合,我猜這完全違背了REST原則,這可能具有“完全分離客戶端和服務器問題,以便兩者可以分開進化'

所以我認為只有缺失/無效的'強制'參數應該拋出異常,而不是選項,永遠不會。

只是忽略它。 大多數其他Web服務器會忽略它不理解的請求參數。

Google會忽略我的兩個額外參數https://www.google.com/#q=search+for+something&invalid=param&more=stuff

我想忽略不良參數是標准做法,但在很多情況下我似乎完全錯了。

假設我有一個小部件API,其中包含一個可以找到小部件的小部件集合端點。 窗口小部件具有foo屬性,因此以下搜索foo = bar的窗口小部件

GET https://example.com/widgets?foo=bar

現在一個API客戶端犯了錯字。

GET https://example.com/widgets?foi=bar

不是只返回foo = bar的小部件,而是默認忽略輸入錯誤並返回所有小部件(適當限制為某些默認大小,因為我制作了精心設計的API)。 我的API客戶端可能花費數小時試圖找出她的電話無效的原因,或者更有可能點亮我的支持網站,想知道為什么我的API很糟糕。

返回400狀態是否更好,並顯示錯誤消息,指出“foi”不是可識別的參數? 這似乎特別正確,因為對於請求體中的相同類型的拼寫錯誤,最好的行為是返回400.(例如,請參閱此答案: https//stackoverflow.com/a/20686925/2716301

忽略它是常見模式,但查詢參數也是URL(資源ID)的一部分,並且此類請求上的正確響應代碼是404 Not Found。

沒有一般的設計模式。 你必須問自己什么對你的用戶最好。 最好告訴他們他們要求的資源不是以他們需要的格式提供,或者只是給他們另一種資源?

注意

HTTP包含處理語言的強大機制; 請參閱Accept-Language和Content-Language標頭(所有瀏覽器都在使用它)

暫無
暫無

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

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