2012-08-29 39 views
2

我想知道人們在多大程度上保持應用程序的RESTful。在我看來,事情非常容易崩潰,在這個時候,我必須做一名高級程序員曾經告訴我的事情,當我在職業生涯中有新事物時,他得到了所有哲學體系結構:「只需編寫該死的代碼。RESTful架構的限制

具體的例子,我在Rails應用程序中實現自定義身份驗證,並且我有一個標準的「密碼提醒」窗體。從REST的角度來看,我們要在進程結束時執行的操作將是User對象上的PUT,因爲我們正在更新用戶對象。但即使忽略了您可能想要更新用戶的多種方式(參見How to do REST-ful updates?),我們也不知道我們在一開始就更新了哪個用戶,最後我們會發送一封電子郵件確認郵件並使用用戶標識符+安全密鑰跟隨鏈接。所以現在最終觸發用戶更新的事情是一個簡單的鏈接(哦,恐怖!) - 否則我必須用另一個按鈕來惹惱我的用戶,才能成爲RESTful。

這只是提示我的問題的例子之一,但在我看來,在任何非平凡的應用程序中,肯定會有幾十個這樣的情況。

那麼,人們幾乎都使用RESTful archietectures作爲一般指導方針,巧妙的程序員根據需要忽略?我從文獻中得到的印象與此截然不同 - 因此,您是如何處理例外的問題。謝謝。

(事實上,在我看來,在這種情況下,最終結果將是另一種新密碼/確認形式,其目標可能是PUT,但我的一般意義上說這有時很笨重仍然與我同在。也許這是我自己的遲緩 - 不會是第一次)。

+1

並不像這個問題對SO太大開放的事實那麼大。 –

回答

1

我在哪裏工作,我們決定嘗試儘可能保持RESTful,但我們也將會務實,當某些事情不適合REST指南(並且所有參與者都同意這種情況)時,那麼願意分歧。說這個,我認爲你可以使大多數用例有些RESTful。

如果你不知道用戶的ID,那麼這樣的事情呢?

GET /changepasswordtoken/{userEmail} 

或者API的客戶知道用戶ID,這將是更好的可能:

GET /user/{userId}/changepasswordtoken 

你問到GET更改密碼的集合與ID作爲電子郵件地址令牌爲用戶更改密碼令牌。如果這是一個面向公衆的API,那麼顯然你不會在響應有效負載中返回這個值,但負載可能會返回一條消息,指出「更改發送到電子郵件的密碼」或其他東西。

然後更新密碼PUTPATCH用戶將更改密碼標記作爲查詢字符串參數。

PUT /user/{userId}?changepasswordtoken=xyz 

{ 
    "password": "new password" 
} 
+0

感謝您的答覆 - 將其標記爲主要基於第一段的接受答案。我也發現你對API的客戶端提到了有用的東西 - 在這個應用程序的情況下,密碼提醒的唯一客戶端應該是用戶在瀏覽器上單擊瀏覽器。這就提出了一個很好的觀點,在一些關於面向公衆的網站和麪向公衆的網絡API之間的區別的討論中可能會錯過。再次感謝。 –

0

http://www.ics.uci.edu/~fielding/pubs/dissertation/web_arch_domain.htm#sec_4_4

REST提供了一組架構約束的是,當作爲一個整體施加強調組件交互的可擴展性,接口的通用性,組件的獨立部署,中介部件減少交互延遲,強化安全性並封裝遺留系統。

如果你需要,而不是一種建築風格,強調角色和資源點至點一次性互動的混淆,以及滿腔的擁抱和遺留系統(如HTML郵件)的曝光,然後不,你不不需要RESTful。查找(或發明)符合您的標準的架構風格。 REST沒有任何魔力;這是一組約束條件,適用於許多問題領域,因爲它是爲滿足他們的需求而設計的。如果你有不同的需求,應用相同的約束將會適得其反,而且是愚蠢的。