假設我有我的數據庫中下表(我可以隨意重新設計,如果我願意的話):設計一個WebService API數據庫模式
- 用戶:關於每個系統的用戶信息用戶有一套 授權。
- 授權:有關每個授權意味着什麼的信息。每個 授權與它適用的許多主機相關聯。
- 主機:有關應用程序所涉及主機的信息。每個主機都有一個 的位置。
- 區域:將位置組合在一起。
- 位置:組主機在一起。
我想一個WebService接口設計,這個數據庫模式,使此WebService 客戶將能夠提出這樣的問題:
- 什麼是該系統的用戶?
- 什麼授權擁有用戶X?
- 主機Y在什麼位置?
- 位置Z的主人是什麼? - 。 .... 等等。
該接口的功能/方法應該是什麼?
- 一種流行的解決方案是:
- 的getUser(ID)/ getusers()獲得用戶,授權每個用戶擁有的ID列表 一起。
- getauth(id)/ getauths()獲取所有授權以及它們適用的主機的ID列表 。
- gethost(id)/ gethosts()獲取所有主機。以及每個主機的位置的 的ID。 .....
有了這個方案,得到一個主機裝置的位置做兩次調用 的API:
h = gethost(id),
loc_id = h.location_id;
location = getlocation(loc_id);
我不喜歡這種方法是它強制 api的客戶端在獲取他想要的信息之前,通過對象的層次結構對API跟蹤進行大量(異步)調用。
在您的經驗是這是做到這一點的最佳方式?
PS。如果您的解決方案涉及到更改架構,我也非常喜歡。
編輯:換句話說,我想是很好的中間地帶
解決方案1之間:Web服務只有一個方法:查詢(字符串),它接受像SQL的數據庫查詢語言查詢。解決方案2:對於用戶可能想要的每個可能的查詢,Web服務都有一個方法:getUserWithAuthorization(user_id)getUser(user_id)getLocationOfHost(host_id)getAreasWithLocations()等等#interfacebloatinghell。
如果你顯示錶的關係,通過圖表或SQL定義中的問題會更加清晰。 –