2017-03-22 59 views
0

我有一個關係數據庫,通過它從Web服務檢索數據。我定義的@GET方法基於主鍵。 例如,對於具有主鍵一個,我用一個@ GET請求http://localhost:8080://teams/1獲得相關球隊數據:

{ 
「id」 : 「1」, 
「name」 : 「Barcelona" 
} 

雖然我實現我的web應用程序,我面對着一個概念問題。由於我不認爲最好讓最終用戶看到主鍵ID,所以我保留了基於主鍵的請求,但是,我在我的數據庫表中添加了一個名爲uri的屬性(對於巴塞羅那,uri是bar等等)。我正在使用uri屬性作爲url中的參數。因此,如果用戶點擊巴塞羅那隊圖片,他將獲得url:http://localhost:9000/teams/bar而不是http://localhost:9000/teams/1而在內部執行狀態時,我正在使用我已在Web服務中定義的請求http://localhost:8080://teams/1,因爲此刻我使用了請求得到巴薩的形象,我得到的ID也認爲我可以作爲參數傳遞給了新的要求:http://localhost:9000/teams/1

一切工作正常,但問題是,如果用戶輸入URL:直接在http://localhost:9000/teams/bar瀏覽器而不是點擊巴塞羅那圖片,請求將無法工作,因爲該ID不存在。

我想知道的是,這種情況下的最佳做法是什麼?

  1. 保持行爲,因爲它是?
  2. 基於uri屬性而不是主鍵從數據庫 發出請求?如果是,我爲什麼 使用主鍵?爲什麼不考慮uri屬性作爲主鍵 ?
  3. 你有什麼建議?
+1

最簡單的解決方案是在數據庫中爲'uri'字段創建一個索引,然後將您的Web服務端點更改爲在'uri'而不是'id'上查詢。 –

+1

通常我不會在URL中顯示主鍵,除非碰巧它本身具有某種意義(例如,銀行帳號),否則不會造成危害。如果您擔心未經授權的訪問,您應該使用一些服務器端身份驗證,以驗證用戶是否允許查看與主鍵關聯的結果。 – jbrown

+0

好吧,假設你說服我把請求放在uri屬性上。那麼,爲什麼我仍然需要id屬性作爲主鍵?我省略id並使用uri屬性作爲主鍵(索引)? – EddyG

回答

0

作爲一個解決方案,我將保留主鍵屬性,並且我將重新綁定uri屬性上的$ http請求。

要檢索團隊巴塞羅那,我使用的網址爲http://localhost:9000/teams/bar,它將爲http://localhost:8080/teams/bar調用Web服務$ http GET方法。主鍵(id屬性)對於與其他關係的連接仍然有用。

在其他情況下,如果uri沒有價值,我就基於主鍵上的請求。例如,一個表新聞有id和description屬性,其中不需要uri。只需在請求中使用id作爲參數,如下所示:http://localhost:8080/news/123http://localhost:9000/news/123在Web應用程序中。