作爲廣泛測試案例的一部分,我構建了一個基於ajax的CMS類應用程序,該應用程序在各種文檔類型上提供了CRUD功能,例如:文章,標籤等使用JSON模式的DRY用戶輸入驗證(客戶端,服務器端)
在服務器端和客戶端我正在考慮使用JSON模式(http://json-schema.org/)作爲以DRY方式進行用戶輸入驗證的方式(即:1驗證模式,將在服務器和客戶端都使用,沒有重複代碼和所有這一切)。這似乎很大,這是因爲:
JSON-架構無論是在JS和Java實現的,因此一個模式在理論上能夠處理客戶端和服務器端驗證
所有CUD的操作請求,響應是JSON(通過Ajax)
然而,除了對用戶輸入通常的驗證,我想在服務器上有一些額外的檢查(如:如檢查如果標籤的名稱的用戶想要創建已經存在)
理想情況下,我希望這些類型的檢查包含在我的通用服務器端驗證代碼中(正如所說的基於JSON模式)。但是,我並不完全相信這是正確的方法,因爲這些附加檢查不是基於單獨提供的JSON數據,而是需要額外的數據進行驗證(例如:系統中現有標記的名稱以檢查標籤名稱已經存在)。
因此,如果在服務器端的基於json架構的驗證框架中引入像上面描述的那樣的額外檢查,是不是一個好主意(設計/架構明智)?這會是一個優雅的解決方案嗎?或者你會讓他們完全分開嗎?如果不是的話,爲什麼不,你會建議在客戶端和服務器端驗證時保持乾爽?
您認爲如何?
下面的文本案例的一些額外的上下文/目標的一些背景信息。
謝謝, 吉爾特 - 揚
一些背景/目標:
基於AJAX的CMS使用REST方法
CUD,請求使用的是通過Ajax進行休息方法(即分別在POST,PUT和DELETE上映射)。請求和響應都是通過JSON完成的。
CMS無形式。而是使用就地編輯(例如使用阿羅哈編輯:http://www.aloha-editor.org/
保持乾爽
模板:。通過在客戶端和服務器端的小鬍子模板進行INTIAL渲染和通過Ajax增量再現是基於1和相同的模板完成,我想去找一些與鬍鬚不同的東西(因爲它缺乏表現力),但它至少適用於這個原型。(參見前面的替代品,在我還在尋找一個答案:Client-side templating language with java compiler as well (DRY templating))
DRY輸入驗證:如上
驗證流程描述(以失敗的情況下):
用戶創建/更新/刪除項目。
客戶端上的驗證失敗會立即向用戶反饋修復內容。 (Javascript JSON模式驗證器理想情況下會返回格式化爲用戶的JSON)
當客戶端驗證成功時,使用ajax執行CUD操作。
如果服務器端驗證失敗,狀態碼400(錯誤請求)被返回,與含有驗證失敗(一個或多個),其通過jQuery的錯誤回調拾起的JSON對象
含服務器端驗證失敗$.ajax({ .... error: function(xhr, status, error) { var validationJSON = JSON.parse(xhr.responseText); //handle server-side validation failure }, .... });
JSON對象被呈現給用戶(類似於客戶端)