Redprint
A tool for sharing validations
Goal
When developing a web application, there were 2 options for validating user input between API suppliers and consumers. A consumer can have validations on its own by refering API documents, or wait the result of validations from a API supplier. On the former, it cannot be ensured that consumer's validations works same with API supplier's. On the latter, there are limits to validate in real-time because of network latency.
Redprint makes it possible to validate in real-time and manage validations at one place.
Schema
For using Redprint, API validation must fit in Redprint
schema.
It shapes
{
<modelName>: {
<attributeName>: {
<validationName>: <validation>
}
}
}
validation
is a function. It must receive 1 argument, and return boolean.
For example, It can be like
{
User: {
username: {
notEmpty: (input) => (input.length !== 0),
isAlpha: (input) => (/^[a-z0-9]+$/.test(input)),
},
password: {
notEmpty: (input) => (input.length !== 0),
},
}
}
Install
npm install redprint
Usage
Supplier-side
If your validation code is
const validation = {
User: {
username: {
notEmpty: (input) => (input.length !== 0)
}
}
};
Just do like
import { red } from 'redprint';
const validation = red({
User: {
username: {
notEmpty: (input) => (input.length !== 0)
}
}
});
Then run server. 'redprint.json' is generated in your project root. Provide this file for your API comsumers.
Comsumer-side
At first, locate 'redprint.json' provided from API supplier in your project root.
import { validate } from 'redprint';
const username = getUsernameFromForm();
try {
validate('User.username', username);
} catch (err) {
handleError(err);
console.log(err.message);
// RedprintError: '' is invalid User.username for 'notEmpty' validation
}
API
red(redprint: Redprint)
Append redprint
to 'redprint.json'.
validate(key: string, input: any)
Validate input
as the key
, on the basis of 'redprint.json'.
RedprintError
It is thrown if validate()
failed.
Property | Description |
---|---|
input | User input |
key | What the input is for |
validationName | Which validation failed |