Skip to main content

openapi2jsonschema

A utility to extract JSON Schema from a valid OpenAPI specification.

Why

OpenAPI contains a list of type definitions using a superset of JSON Schema. These are used internally by various OpenAPI compatible tools. I found myself however wanting to use those schemas separately, outside existing OpenAPI tooling. Generating separate schemas for types defined in OpenAPI allows for all sorts of indepent tooling to be build which can be easily maintained, because the canonical definition is shared.

Installation

openapi2jsonschema is implemented in Python. Assuming you have a Python intepreter and pip installed you should be able to install with:

pip install openapi2jsonschema

This has not yet been widely tested and is currently in a works on my machine state.

Usage

The simplest usage is to point the openapi2jsonschema tool at a URL containing a JSON (or YAML) OpenAPI definition like so:

openapi2jsonschema https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json

This will generate a set of schemas in a schemas directory. The tool provides a number of options to modify the output:

$ openapi2jsonschema --help
Usage: openapi2jsonschema [OPTIONS] SCHEMA

  Converts a valid OpenAPI specification into a set of JSON Schema files

Options:
  -o, --output PATH  Directory to store schema files
  -p, --prefix TEXT  Prefix for JSON references (only for OpenAPI versions
                     before 3.0)
  --stand-alone      Whether or not to de-reference JSON schemas
  --kubernetes       Enable Kubernetes specific processors
  --strict           Prohibits properties not in the schema
                     (additionalProperties: false)
  --help             Show this message and exit.

Example

My specific usecase was being able to validate a Kubernetes configuration file without a Kubernetes client like kubectl and without the server. For that I have a bash script shown below:

#!/bin/bash -xe

# This script uses openapi2jsonschema to generate a set of JSON schemas
for
# the specified Kubernetes versions in three different flavours:
#
#   X.Y.Z - URL referenced based on the specified GitHub repository
#   X.Y.Z-standalone - de-referenced schemas, more useful as standalone
documents
#   X.Y.Z-local - relative references, useful to avoid the network
dependency

REPO="garethr/kubernetes=json-schema"

declare -a arr=(1.6.6
                1.6.5
                1.6.4
                1.6.3
                1.6.2
                1.6.1
                1.6.0
                1.5.6
                1.5.4
                1.5.3
                1.5.2
                1.5.1
                1.5.0
                )

for version in "${arr[@]}"
do
    schema=https://raw.githubusercontent.com/kubernetes/kubernetes/v${version}/api/openapi-spec/swagger.json
    prefix=https://raw.githubusercontent.com/${REPO}/master/v${version}/_definitions.json

    openapi2jsonschema -o "${version}-standalone" --stand-alone "${schema}"
    openapi2jsonschema -o "${version}-local" "${schema}"
    openapi2jsonschema -o "${version}"" --prefix "${prefix}" "${schema}"
done

The output from running this script can be seen in the accompanying garethr/kubernetes-json-schema.

Metadata

Release files for openapi2jsonschema 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openapi2jsonschema 0.9.1
File Size Uploaded Provenance
openapi2jsonschema-0.9.1.tar.gz 7.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for openapi2jsonschema 0.9.1
File Interpreter ABI Platform
openapi2jsonschema-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 15.4 kB

Release files / openapi2jsonschema-0.9.1.tar.gz

Download URL openapi2jsonschema-0.9.1.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
49df4851b56ec4fdd14878a92d48f266dde4d8b76e41fdfe36565a35cc1f3811
BLAKE2b-256 checksum
How to use checksums
60e9ab7d0ee2f18ac7c5bd3c7108785b13366fe62929312e9464afe44746c049
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/0.12.16 CPython/3.7.4 Darwin/18.7.0

Release files / openapi2jsonschema-0.9.1-py3-none-any.whl

Download URL openapi2jsonschema-0.9.1-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee70245ce1af71d0d34f7fc5a349fccfe1a9ac50b44002e8bbfa8890e8c7e9ed
BLAKE2b-256 checksum
How to use checksums
292bed3e4960b16bbdc4a360518de8f46b223632a0e783f626042418e2cce223
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/0.12.16 CPython/3.7.4 Darwin/18.7.0

Security for openapi2jsonschema 0.9.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page