Shared rules

Reference | Automatic Validation


Rules are typically defined in the context of a single endpoint in the auto-validator component that is injected into a handler. There are scenarios in which is is useful to define rules in way they can be shared between multiple handlers/auto-validators:

  • A common rule that is needed by multiple endpoints (email address validation, for example)
  • A rule that is used by another operation (the ELEM operation for SLICE validation)

There are a number of steps to enabling shared rules:

Shared rule manager

Create a component of type validate.UnparsedRuleManager and provide a config path to your rule definitions:

"sharedRuleManager": {
  "type": "validate.UnparsedRuleManager",
  "Rules": "$sharedRules"
}

Rule definitions

Define your shared rules in any configuration file. The structure is a map of string arrays like:

"sharedRules": {
  "artistExistsRule": ["INT", "EXT:artistExistsChecker"],
  "personAgeRule": ["INT", "RANGE:0-120"]
}

The key in the map (artistExistsRule) is the name of the rule that can be referenced by other components. The structure and content of the rules are defined in the same way as non-shared rules.

Set rule manager on auto-validator

The auto validator which manages validation for a particular handler must be given a reference to the shared rule manager

"submitRecordHandler": {
  "type": "handler.WsHandler",
  "AutoValidator": {
    "type": "validate.RuleValidator",
    "DefaultErrorCode": "INVALID_RECORD",
    "Rules": "$createRecordRules",
    "RuleManager": "+sharedRuleManager"
  }
}

Next: Relational databases

Prev: Operations reference