2015-09-27 146 views
0

我的SPA有一個設計問題,希望有人能給我一些指導。用戶個人資料頁面呈現如下:如何在SPA中將自定義URL映射到REST資源?

  1. 瀏覽器提取/some-username

  2. 服務器檢查以查看是否該請求是一個XMLHttpRequest與否。它不是,所以它只是返回捆綁的JavaScript應用程序到瀏覽器執行。

  3. javascript包在瀏覽器中執行,它看到當前的URL併發出AJAX請求,再次到/some-username

  4. 服務器查看XMLHTTPRequest標頭,查找具有自定義URL「/ some-username」的用戶,並將有關用戶的JSON數據返回給呈現的javascript。

這感覺不對。應用程序應將RESTful請求發送到/users/:id以獲取用戶數據。但是,它怎麼能知道URL爲/some-username的用戶對應的id?

這是值得添加額外的HTTP請求,只是爲了查找資源標識符?類似於/get_user_id?url=/some-username

+0

請求應該轉到'/ users /:id'上有什麼特別的原因嗎? – zeroflagL

+0

我正在嘗試設計一個RESTful API。從自定義URL獲取資源不是正確的方法。 – 1in7billion

+1

@ 1in7billion我們正在討論2個不同的URL,這裏描述了SPA REST客戶端的狀態,另一個標識了REST資源。如果你沒有看到,那麼你顯然沒有設計任何「RESTful」所需的技能。反正你可能不需要它,因爲你的應用程序不會有第三方客戶端,所以沒關係。 – inf3rno

回答

1

您靈活關於你的API?如果是這樣,您可以將/some-username更改爲/user-id,或者如果您想包含用戶名/user-id/username但忽略用戶名。

作爲備選方案,也常見於使在過濾器形式的請求。像/users?username=peter

如果您的用戶名標識用戶隨意使用/users/peter。因爲它是真實的ID(不一定是整數),然後你的網址是/users/:id

+0

網址必須保持自定義。例如,像Twitter一樣。 你的第二點很有趣。該應用程序可以通過'/ users?url =/some-username'獲取用戶資源。 – 1in7billion

+0

爲什麼你想提及url而不是用戶名? – sbeliakov

+0

JavaScript不知道用戶名。它加載,初始化,並且路由器看到當前URL是'/ some-username'。它還沒有關於用戶的數據。我應該提到用戶也可以更改他們自己的自定義URL,所以我們不能假定他們的用戶名==='some-username'。 – 1in7billion

1

關於/some-username沒有什麼「不可靠的」。這只是另一種資源。反應 - 我希望 - 無論如何都包含規範URL /user/id,無論是作爲標題還是某種「自我」鏈接。

這也是你怎麼能實現自己的目標。嵌入到頁面的URL或者如JavaScript或作爲頭當量(不幸的是你不能讀取使用JavaScript頁面請求的報頭):

//header. Can also use a custom header like X-User-Location 
<meta http-eqiv="Location" content="/user/id"> 

//JavaScript 
<script> 
var userURL = '/user/id 
</script> 

我建議維持目前的做法。

+0

我會試試這個,謝謝。 – 1in7billion

相關問題