2014-09-23 77 views
0

我有一個名爲user的資源和一個名爲images的子資源。要訪問特定圖像,唯一的方法是使用URL:/ users/{userId}/images/{imageId}。在REST中驗證代表資源和子資源的輸入

數據庫模式是這樣的:一個用戶可以有多個圖像。

客戶端向我們發送「{userId}」和「{imageId}」的輸入。我將不得不驗證這些輸入。我的問題是關於驗證「{imageId}」輸入。我在這裏有兩個選項:

選項1:驗證特定imageId是否屬於該userId。如果我沒有看到給定userId的圖像,則拋出一個錯誤,即「沒有給定userId的圖像」。

選項2:驗證具有給定「{imageId}」的圖像是否存在。拋出一個錯誤,說「圖像與給定imageId不存在」。然後再次驗證(另一個數據庫檢查)給定的「{imageId}」是否屬於該「{userId}」。

上述兩個選項中,哪個選項是正確的方法?

回答

1

我有一個名爲user的資源和一個名爲images的子資源。要 訪問特定圖片,唯一的方法是使用網址: /users/{userId}/images/{imageId}。數據庫模式是這樣的:一個用戶可以有多個圖像。

我想你是誤會REST的URI結構限制:

沒有關於如何建立URI的限制。

您可以使用自己的約定,這並不重要,因爲客戶端與URI結構分離...例如,我可以說我的圖像在/images/{imageId}之下。這是完全有效的......

您不必將資源映射到實體,並且通過複雜的應用程序,您將無法做到這一點。

以上兩個選項中哪個選項是正確的?

您可以發回404消息,指出URI下沒有資源。有關URI結構的錯誤消息對客戶端來說並不意味着什麼。 URI對客戶端不透明。

+0

謝謝你的回覆。我知道我可以將圖像表示爲「/ images/{imageId}」。我特別想強調一下這樣一個事實,即由於某種原因,客戶端無法訪問映像,除非URL爲:「/ users/userId/images/imageId」,並且這是無法更改的,因爲這是已配置的方式。根據你的回答,我認爲你要求我選擇1.謝謝 – user2608424 2014-09-23 16:13:15