2011-08-01 59 views
8

作爲廣泛測試案例的一部分,我構建了一個基於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/

  • 保持乾爽

    1. 模板:。通過在客戶端和服務器端的小鬍子模板進行INTIAL渲染和通過Ajax增量再現是基於1和相同的模板完成,我想去找一些與鬍鬚不同的東西(因爲它缺乏表現力),但它至少適用於這個原型。(參見前面的替代品,在我還在尋找一個答案:Client-side templating language with java compiler as well (DRY templating)

    2. DRY輸入驗證:如上


驗證流程描述(以失敗的情況下):

  1. 用戶創建/更新/刪除項目。

  2. 客戶端上的驗證失敗會立即向用戶反饋修復內容。 (Javascript JSON模式驗證器理想情況下會返回格式化爲用戶的JSON)

  3. 當客戶端驗證成功時,使用ajax執行CUD操作。

  4. 如果服務器端驗證失敗,狀態碼400(錯誤請求)被返回,與含有驗證失敗(一個或多個),其通過jQuery的錯誤回調拾起的JSON對象

    $.ajax({ 
        .... 
        error: function(xhr, status, error) { 
         var validationJSON = JSON.parse(xhr.responseText); 
         //handle server-side validation failure 
        }, 
        .... 
    }); 
    
    含服務器端驗證失敗
  5. JSON對象被呈現給用戶(類似於客戶端)

回答

1

這是非常可能的,並且最喜人的事情之一有驗證的單一定義在一個地方(每個模型)上服務器,然後可以爲客戶端和基於AJAX的驗證生成適當的JS。 Yii框架爲PHP提供了一個奇妙的體系結構,以一種將所有驗證規則存儲在模型中的優雅方式完成此任務(根據需要將其分解爲適當的「方案」)。從那裏,這是一個翻轉幾個開關來製作客戶端或AJAX驗證的特定表單的問題。我相信Yii的界面是基於Rails的。

無論如何,我會強烈建議從Yii的設計中檢查以下關鍵點;即使你不知道PHP,你可以使用這個靈感:

我認爲追求DRY驗證規則聲明是明智的做法,根據我的經驗,實現100%並且仍然具有豐富的表單和豐富的驗證規則並不現實。 (當你不必管理所有客戶驗證的JS時,你會愛上生命...)

希望這有助於你。

相關問題