2014-04-07 76 views
0

我想提供重置用戶密碼的功能。這個調用顯然不需要認證。 首先,我認爲是這樣的:未經身份驗證的請求的REST式URL設計

DELETE /users/{id}/password:產生被通過電子郵件

POST /users/{id}/password發送給用戶重置令牌:需要新密碼,並在體內的有效重置令牌

但問題是,應用程序或網站無法提供給我用戶的ID,因爲它可以要求用戶輸入他的電子郵件地址。

我們的API還有一些其他(未經身份驗證的)調用,其中ID不存在且用戶只能通過其電子郵件進行標識。

我們討論我們的團隊通過以下方法解決:

  • 在與用戶的URL更換ID電子郵件
  • 從URL中切出的ID和查詢參數
提供的電子郵件

如果我不得不在這兩者之間做出選擇,我會選擇第一個,因爲我認爲提供查詢參數必不可少的東西並不是RESTful,因爲它們總是代表可選的東西,比如過濾資源。 有沒有更好的方法來設計這些URL或用用戶電子郵件取代ID與REST限制有關嗎?

回答

0
POST /passwordResets 
{ 
    "emailAddress": "[email protected]" 
} 

然後,您也可以靈活地通過userId進行重置,並且您可以跟蹤任何其他資源進行重置以進行審計。

如果您可以使用電子郵件地址來唯一標識用戶,那麼您的兩個選項中的第一個選項並不可怕。不過,這在概念上是錯誤的,因爲每個資源都應該有一個規範位置,現在您有兩個 - /users/bob/password/users/[email protected]/password

第二個選項是錯誤的。 /users/password沒有意義。 /用戶的直接含義是下一個路徑元素是用戶。 /users/password比REST更接近RPC。

相關問題