JSONSchema::Validator::OAS30(3)

NAME
JSONSchema::Validator::OAS30 - Validator for OpenAPI Specification 3.0

VERSION
version 0.011

SYNOPSIS
    $validator = JSONSchema::Validator::OAS30->new(schema => {...});
    my ($result, $errors, $warnings) = $validator->validate_request(
        method => 'GET',
        openapi_path => '/user/{id}/profile',
        parameters => {
            path => {
                id => 1234
            },
            query => {
                details => 'short'
            },
            header => {
                header => 'header value'
            },
            cookie => {
                name => 'value'
            },
            body => [$is_exists, $content_type, $data]
        }
    );
    my ($result, $errors, $warnings) = $validator->validate_response(
        method => 'GET',
        openapi_path => '/user/{id}/profile',
        status => '200',
        parameters => {
            header => {
                header => 'header value'
            },
            body => [$is_exists, $content_type, $data]
        }
    );

DESCRIPTION
OpenAPI specification 3.0 validator with minimum dependencies.

CLASS METHODS

  new
Creates JSONSchema::Validator::OAS30 object.

    $validator = JSONSchema::Validator::OAS30->new(schema => {...});

Parameters

schema

Scheme according to which validation occurs.

strict

Use strong type checks. Default value is 0.

scheme_handlers

At the moment, the validator can load a resource using the http, https protocols. You can add other protocols yourself.

    sub loader {
        my $uri = shift;
        ...
    }
    $validator = JSONSchema::Validator::Draft4->new(schema => {...}, scheme_handlers => {ftp => \&loader});

validate_deprecated

Validate method/parameter/schema with deprecated mark. Default value is 1.

METHODS

  validate_request
Validate request specified by method and openapi_path.

Parameters

method

HTTP method of request.

openapi_path

OpenAPI path of request.

Need to specify OpenAPI path, not the real path of request.

parameters

Parameters of request. It is an object that contains the following keys: "query", "path", "header", "cookie" and "body". Keys "query", "path", "header", "cookie" are hash objects which contains key/value pairs. Key "body" is a array reference which contains 3 values. The first value is a boolean flag that means if there is a body. The second value is a Content-Type of request. The third value is a data of value.

    # post params
    my ($result, $errors, $warnings) = $validator->validate_request(
        method => 'POST',
        parameters => {
            path => {user => 'adam'},
            body => [1, 'application/x-www-form-urlencoded', {key => 'value'}]
        }
    );

    # for file upload
    my ($result, $errors, $warnings) = $validator->validate_request(
        method => 'POST',
        parameters => {
            body => [1, 'multipart/form-data', {key => 'value', file => 'binary data'}]
        }
    );

    # for multiple file upload for the same name
    my ($result, $errors, $warnings) = $validator->validate_request(
        method => 'POST',
        parameters => {
            body => [1, 'multipart/form-data', {key => 'value', files => ['binary data1', 'binary data2']}]
        }
    );

  validate_response
Validate response specified by method, openapi_path and http status code.

Parameters

method

HTTP method of request.

openapi_path

OpenAPI path of request.

Need to specify OpenAPI path, not the real path of request.

status

HTTP response status code.

parameters

Parameters of response. It is an object that contains the following keys: "header" and "body". Key "header" are hash objects which contains key/value pairs. Key "body" is a array reference which contains 3 values. The first value is a boolean flag that means if there is a body. The second value is a Content-Type of response. The third value is a data of value.

    # to validate application/json response
    my ($result, $errors, $warnings) = $validator->validate_response(
        method => 'GET',
        openapi_path => '/user/{id}',
        status => '404',
        parameters => {
            header => {name => 'value'},
            body => [1, 'application/json', {message => 'user not found'}]
        }
    );

AUTHORS

•   Alexey Stavrov <logioniz@ya.ru>

•   Ivan Putintsev <uid@rydlab.ru>

•   Anton Fedotov <tosha.fedotov.2000@gmail.com>

•   Denis Ibaev <dionys@gmail.com>

•   Andrey Khozov <andrey@rydlab.ru>

COPYRIGHT AND LICENSE
This software is Copyright (c) 2021 by Alexey Stavrov.

This is free software, licensed under:

  The MIT (X11) License