代表具有id或name屬性的國家/地區搜索的正確方法是什麼?
tl; dr:變體之一是混淆配方。如果不得不選擇,則使用查詢字符串至搜索。
至於REST宣言中有關URI的邏輯僅僅是一個實現細節 - 唯一擔心的是,在該位置的訪問機制不能隨着時間的推移打破。內容可能被清空或移動 - 但URI必須始終終結於服務端點,爲客戶端提供他們理解並可以採取行動的預先響應(即3 **重定向或客戶端的超媒體重新發現)。但是,許多成功和精心設計的API試圖揭示一種本質上一致的邏輯,旨在直觀地探索。因此,你的第一個例子api/countries/1/id
實際上BAD是關於開發者的經驗和市場的成功,因爲它被混淆使用:
- 從看URI,你沒有,你運行的任何線索(許多公共API遵循資源層次結構和公開的URI之間的邏輯映射 - 所以一個共同的預期是
api/countries/1/id
檢索{1}
(作爲毫無意義的查詢),或者是那些無意義的查詢api/countries/1/name
給出{Italy}
。
因此,查詢字符串是一個很好的選擇 - 尤其是提供了一個搜索功能。人們可以從詞語看到的含意;)
api/countries?name=Italy
api/countries?q=name(Ital*) // same result
api/countries?q=isoCode=(IT) // same result
--> api/countries/1/states // list all states of Italy
api/states?q=country/name(Italy) // - same -
api/states?q=country/id(1) // - same -
請求的響應主體可從看只有URI,這是很好的可以預期的。更好的是:它有助於分辨資源和觀點。在查詢字符串中定義「視圖」,將其視爲鏡頭或過濾器,通過它查看否則是同一個資源(您的國家/地區集合)的摘錄。
這種模式只是在那些方面的好,通常也發現:
api/countries/search/Italy
api/countries/search/name=Italy
api/countries/search/isoCode=IT,name=*aly
之所以挑這個構建API時,各地實際實施細節可以旋轉 - 因爲它的方式隔開給資源的直接訪問從搜索操作 - 滿足請求所需的CPU /內存以及響應計數和格式可能會有根本的不同。
@ user2007820嗨,這是我的想法。現在請回應它,如果您有任何疑問。 – Sachin 2013-03-09 12:44:41
嗨,好的完美...但是,我需要通過id和名字搜索。我如何區分這個要求? – user2007820 2013-03-09 12:56:35
@ user2007820對此,您可以這樣做,只需將'id'後綴添加到像api/countryId/{12}','api/countryId/12/{stateId}'這樣的api。或者你也可以做到這一點,而無需更改網址。爲此,您需要在數據庫的namefiled以及Id字段中搜索參數值。希望你能得到它。請回應:) – Sachin 2013-03-09 13:02:34