【问题标题】:Validate one attribute of an object using json schema使用 json 模式验证对象的一个​​属性
【发布时间】:2014-10-06 12:33:16
【问题描述】:

我目前正在使用 tv4(json-schema 验证器)来验证(客户端)具有 json-schema 的对象,效果很好。

但是当我改变一个属性的值时,我希望这个值是唯一的,应该被验证。

例如我有一个用户:

var user = { Name: 'Username', Age: 20 };

还有架构:

{
    "title": "UserValidation",
    "type": "object",
    "properties": {
        "Name": {
            "minLength": 4
        },
        "Age": {
            "type": "int"
        }
    }
}

当我只更改名称时,我不想检查属性“年龄”是否有效。

原因:当我有一个大对象(带有子模型等)时,它将验证所有属性。而且我不知道这是否会是性能问题(总有一天......)。

  • 这可能是模式验证的情况吗?
  • 或者有更好的 验证对象的方法?

顺便说一句,我正在使用 AngularJS。

最好的问候和感谢。

【问题讨论】:

    标签: angularjs validation attributes jsonschema client-side-validation


    【解决方案1】:

    我认为您必须选择子模式来验证子属性。这应该很容易做到,用 schema.properties.Name 验证 user.Name。

    仅验证子属性的一个问题是验证的某些部分不在属性本身上。例如,上面的对象可能有一个 required-array。

    【讨论】:

    • 虽然这可能适用于某些模式,但通常这是不可能的。 oneOfdependencies 之类的子句意味着数据的一部分的更改可能会影响完全不同的区域(包括删除/添加模式)。
    【解决方案2】:

    在您遇到性能问题之前,您不会遇到性能问题。 :)

    没有技术原因不应该存在这样的部分更新验证器(我知道至少有一个,但它一开始并不完全快速)。还有更快的“从头开始”验证器 (some with benchmarks),包括一些具有非常相似的 API/错误报告,因此如果将来您确实开始看到性能问题,那么您可以毫不费力地切换。

    但是,鉴于这是在客户端发生的(因此您不会遇到更多用户的扩展问题),我还不会担心。

    【讨论】:

    • 谢谢你,帮了我很多忙! :)
    • 如果你使用 PATCH 或 sub PUT 像 PUT product/1PUT product/1/offers 相比,这很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多