Data Verify

Data verification for API created with Barktler can be implemented easily.

The data pattern is provided by @sudoo/pattern see it’s document at Sudoo Pattern Documents.

Declare Pattern

For data verification, declare data should be done first. Both request data and response data verify are supported.

For example, continue from the GoogleSearchAPI Barktler API class. The following TypeScript code shows you the steps to declare a response data pattern.

import { Barktler } from "@barktler/core";

class GoogleSearchAPI extends Barktler {

    private constructor() {

        super();
        super._declareResponseDataPattern({
            type: 'map',
            map: {
                hello: {
                    type: 'string',
                },
            },
        });
    }
}

The above code declares the response data should be a JavaScript Object, a property named hello, with some value typed with string.

Verify Data

To verify the data, you can attach a hook onto the Barktler instance.

import { Barktler } from "@barktler/core";

class GoogleSearchAPI extends Barktler {

    private constructor() {

        super();
        super.postHook.verifier.add((data: IResponseConfig) => {
            return validate(data.responseDataPattern, data.data));
        });
    }
}

In a Barktler instance above, the data validate function will be executed every time the class is instantiated, the request is sent, and when the data is received.

A mixin: @barktler/mixin-verify can do this automatically, see Use Mixin for detailed instruction.

Dynamic

All declare and hook action sure can be made differently after is instantiated like the following code.

const api: GoogleSearchAPI = GoogleSearchAPI.create();
api._declareResponseDataPattern({
    type: 'map',
    map: {
        hello: {
            type: 'string',
        },
    },
});
api.postHook.verifier.add((data: IResponseConfig) => {
    return validate(data.responseDataPattern, data.data));
});

Next

See Life Cycle for the life cycle of Barktler Request.