2011-12-03 30 views
7

如果不移開RESTful範例,您如何以RESTful方式建模對象驗證?最好解釋我提出的理論用例...我應該如何設計一個RESTful URL來驗證對象

想象一下,您有一個系統具有非常薄的Web層,可以調用後端RESTful服務。假設用戶訪問了註冊表單並提交了它,Web層會將未驗證的數據直接發送給後端服務,並且如果服務以JSON格式的驗證錯誤進行響應,則可以將這些數據作爲HTML發回給用戶。

但是,想象一下,我們希望在表單上擁有AJAX行爲。例如,用戶輸入他們的電子郵件地址,我們希望使用AJAX進行驗證,如果用戶的電子郵件地址已經註冊,則會向用戶發送錯誤。

實施單個調用來驗證電子郵件地址,還是可以在後端服務中發送和驗證整個對象是否合理?如果是後者,你可以使用什麼URL來驗證對象,而不是實際創建它?

回答

0

驗證單個表單字段可以提高用戶在填寫表單時的體驗,但是當提交表單時,我會驗證整個對象,因爲它不太容易出錯。該URL可以是僅用於驗證電子郵件(單個字段)的https://mysite.com/users/emailvalidator,並且可以將表單發送到https://mysite.com/users(整個對象)。在前一種情況下,URL明確指出您要使用的資源是能夠驗證電子郵件的對象。

+0

我在想更多關於對後端服務的REST調用。想象一下,實際註冊一個用戶的呼叫是一個POST /用戶,我怎麼能基本上做同樣的電話,但只是爲了驗證? – DrewEaster

+0

閱讀此內容:http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf。它討論發送一個查詢參數「x-ro-validate-only = true」來指示服務器僅僅驗證而不實際發生變異。 – DrewEaster

+0

我會使用上面的分層URL,因爲「emailvalidator」資源是「用戶」資源的一部分。從邏輯角度來看,「用戶」是一個容器,用於存儲用戶數據,在插入它們之前也會驗證新數據。同樣從邏輯的角度來看,對象「emailvalidator」是驗證過程的一部分,這是一個特殊的部分,可以直接使用它自己的URL調用。 (請參閱關於分層URL設計的這個問題:http://stackoverflow.com/questions/7833548/hierarchical-restful-url-design) – kol

2

在我使用了一個沙箱子資源的概念做你的建議是什麼過去,

http://example.com/customer/23/sandbox 

這讓我POST三角洲和應用了修改和驗證,但實際上沒有提交。這對於傳統的「保存/取消」類型對話框來說效果很好。但是,我發現處理這些delta是一個真正的痛苦,因此我開發了一種不同的媒體類型,它在客戶端上記錄了一系列事件,然後將該文檔發佈到沙箱資源。通過重播事件序列,我可以更簡單地更新和驗證服務器端資源。

後來我意識到我真的不需要獨特的「沙箱」資源,現在我只是將「事件序列」文檔直接發佈到它正在影響的資源。我在文檔本身有一些數據可以確定這些更改是永久性還是暫時性的。這取決於用戶是否已經按下了保存按鈕。

+0

您是否有「事件序列」文檔的示例?是否仍然可以直接「POST」到資源? – mjs

+0

@mjs是的,你可以直接發佈到資源。那實際上就是我現在所做的。我放棄了沙箱子資源。我有一個簡短的視頻,在這裏http://vimeo.com/15564107談論這個概念,我計劃在未來幾個月發佈一個規格和解析器的媒體類型。 –

相關問題