The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

JSON::Validator::OpenAPI - OpenAPI is both a subset and superset of JSON Schema

DESCRIPTION

JSON::Validator::OpenAPI can validate Open API (also known as "Swagger") requests and responses that is passed through a Mojolicious powered web application.

Currently v2 should be fully supported, while v3 should be considered higly EXPERIMENTAL.

Please report in issues or open pull requests to enhance the 3.0 support.

See also Mojolicious::Plugin::OpenAPI for more details about how to use this module.

ATTRIBUTES

JSON::Validator::OpenAPI inherits all attributes from JSON::Validator.

formats

Open API support the same formats as JSON::Validator, but adds the following to the set:

  • byte

    A padded, base64-encoded string of bytes, encoded with a URL and filename safe alphabet. Defined by RFC4648.

  • date

    An RFC3339 date in the format YYYY-MM-DD

  • double

    Cannot test double values with higher precision then what the "number" type already provides.

  • float

    Will always be true if the input is a number, meaning there is no difference between "float" and "double". Patches are welcome.

  • int32

    A signed 32 bit integer.

  • int64

    A signed 64 bit integer. Note: This check is only available if Perl is compiled to use 64 bit integers.

version

  $str = $self->version;

Used to get the OpenAPI Schema version to use. Will be set automatically when using "load_and_validate_schema", unless already set. Supported values are "2" an "3".

METHODS

JSON::Validator::OpenAPI inherits all attributes from JSON::Validator.

load_and_validate_schema

  $self = $self->load_and_validate_schema($schema, \%args);

Will load and validate $schema against the OpenAPI specification. $schema can be anything "schema" in JSON::Validator accepts. The expanded specification will be stored in "schema" in JSON::Validator on success. See "schema" in JSON::Validator for the different version of $url that can be accepted.

%args can be used to further instruct the expansion and validation process:

  • allow_invalid_ref

    Setting this to a true value, will disable the first pass. This is useful if you don't like the restrictions set by OpenAPI, regarding where you can use $ref in your specification.

  • version_from_class

    Setting this to a module/class name will use the version number from the class and overwrite the version in the specification:

      {
        "info": {
          "version": "1.00" // <-- this value
        }
      }

The validation is done with a two pass process:

  1. First it will check if the $ref is only specified on the correct places. This can be disabled by setting "allow_invalid_ref" to a true value.

  2. Validate the expanded version of the spec, (without any $ref) against the OpenAPI schema.

validate_input

  @errors = $self->validate_input($data, $schema);

This method will make sure "readOnly" is taken into account, when validating data sent to your API.

validate_request

  @errors = $self->validate_request($c, $schema, \%input);

Takes an Mojolicious::Controller and a schema definition and returns a list of errors, if any. Validated input parameters are moved into the %input hash.

validate_response

  @errors = $self->validate_response($c, $schema, $status, $data);

COPYRIGHT AND LICENSE

Copyright (C) 2014-2015, Jan Henning Thorsen

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.

SEE ALSO

JSON::Validator.

http://openapi-specification-visual-documentation.apihandyman.io/