history/MAINTAINERS_v3.0.1.md
-git show 3140640:MAINTAINERS.md > history/MAINTAINERS_v3.0.2.md
-cp history/MAINTAINERS_v3.0.2.md history/MAINTAINERS_v3.0.3.md
-cp history/MAINTAINERS_v3.0.2.md history/MAINTAINERS_v3.1.0.md
-#TODO: adjust commit for 3.0.4, 3.1.1
-git show c3b88ed:EDITORS.md > history/MAINTAINERS_v3.0.4.md
-cp history/MAINTAINERS_v3.0.4.md history/MAINTAINERS_v3.1.1.md
-# add lines for 3.2.0, ...
-
-cp -p ../../node_modules/respec/builds/respec-w3c.* ../../deploy/js/
-
-latest=`git describe --abbrev=0 --tags`
-latestCopied=none
+if [ "$1" = "src" ]; then
+ deploydir="deploy-preview"
+else
+ deploydir="deploy/oas"
+fi
+
+mkdir -p $deploydir/js
+mkdir -p $deploydir/temp
+cp -p node_modules/respec/builds/respec-w3c.* $deploydir/js/
+
+latest=$(git describe --abbrev=0 --tags)
+
+if [ -z "$1" ]; then
+ specifications=$(ls -1 versions/[23456789].*.md | grep -v -e "\-editors" | sort -r)
+elif [ "$1" = "latest" ]; then
+ specifications=$(ls -1 versions/$latest.md)
+elif [ "$1" = "src" ]; then
+ specifications="src/oas.md"
+else
+ specifications=$(ls -1 versions/$1.md)
+fi
+
+latestCopied="none"
lastMinor="-"
-for filename in $(ls -1 ../../versions/[23456789].*.md | sort -r) ; do
- version=$(basename "$filename" .md)
+
+for specification in $specifications; do
+ version=$(basename $specification .md)
+
+ if [ "$1" = "src" ]; then
+ destination="$deploydir/$version.html"
+ maintainers="EDITORS.md"
+ else
+ destination="$deploydir/v$version.html"
+ maintainers="$(dirname $specification)/$version-editors.md"
+ fi
+
minorVersion=${version:0:3}
- tempfile=../../deploy/oas/v$version-tmp.html
- echo -e "\n=== v$version ==="
+ tempfile="$deploydir/temp/$version.html"
- node md2html.js --maintainers ./history/MAINTAINERS_v$version.md ${filename} > $tempfile
- npx respec --use-local --src $tempfile --out ../../deploy/oas/v$version.html
+ echo === Building $version to $destination
+
+ node scripts/md2html/md2html.js --maintainers $maintainers $specification > $tempfile
+ npx respec --use-local --src $tempfile --out $destination
rm $tempfile
+ echo === Built $destination
+
if [ $version = $latest ]; then
- if [[ ${version} != *"rc"* ]];then
+ if [[ ${version} != *"rc"* ]]; then
# version is not a Release Candidate
- pushd ../../deploy/oas
- ln -sf v$version.html latest.html
- popd
- latestCopied=v$version
+ ln -sf $(basename $destination) $deploydir/latest.html
+ latestCopied="v$version"
fi
fi
- if [ ${minorVersion} != ${lastMinor} ] && [ ${minorVersion} != 2.0 ]; then
- pushd ../../deploy/oas
- ln -sf v$version.html v$minorVersion.html
- popd
+ if [ ${minorVersion} != ${lastMinor} ] && [[ ${minorVersion} =~ ^[3-9] ]]; then
+ ln -sf $(basename $destination) $deploydir/v$minorVersion.html
lastMinor=$minorVersion
fi
done
-echo Latest tag is $latest, copied $latestCopied to latest.html
-rm ../../deploy/js/respec-w3c.*
+if [ "$latestCopied" != "none" ]; then
+ echo Latest tag is $latest, copied $latestCopied to latest.html
+fi
+
+rm $deploydir/js/respec-w3c.*
+rmdir $deploydir/js
+rmdir $deploydir/temp
diff --git a/scripts/md2html/main.css b/scripts/md2html/main.css
new file mode 100644
index 0000000000..5c42caf7f3
--- /dev/null
+++ b/scripts/md2html/main.css
@@ -0,0 +1,237 @@
+#respec-ui {
+ visibility: hidden;
+}
+
+#title {
+ color: #578000;
+}
+
+#subtitle {
+ color: #578000;
+}
+
+.dt-published {
+ color: #578000;
+}
+
+.dt-published::before {
+ content: "Published ";
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #578000;
+ font-weight: normal;
+ font-style: normal;
+}
+
+a[href] {
+ color: #45512c;
+}
+
+body:not(.toc-inline) #toc h2 {
+ color: #45512c;
+}
+
+table {
+ display: block;
+ width: 100%;
+ overflow: auto;
+}
+
+table th {
+ font-weight: 600;
+}
+
+table th, table td {
+ padding: 6px 13px;
+ border: 1px solid #dfe2e5;
+}
+
+table tr {
+ background-color: #fff;
+ border-top: 1px solid #c6cbd1;
+}
+
+table tr:nth-child(2n) {
+ background-color: #f6f8fa;
+}
+
+pre {
+ background-color: #f6f8fa !important;
+}
+
+code {
+ color: #c83500
+}
+
+th code {
+ color: inherit
+}
+
+a.bibref {
+ text-decoration: underline;
+}
+
+body.darkmode {
+ --toclink-underline: #6a9000;
+ --toclink-visited-underline: #fff;
+}
+
+body.darkmode a,
+body.darkmode .tocxref,
+body.darkmode .u-url {
+ color: #6a9000;
+}
+
+body.darkmode code {
+ color: #e66c33;
+}
+
+body.darkmode:not(.toc-inline) #toc h2,
+body.darkmode h1,
+body.darkmode h2,
+body.darkmode h3,
+body.darkmode h4,
+body.darkmode h5,
+body.darkmode h6,
+body.darkmode #title,
+body.darkmode #subtitle,
+body.darkmode .toc-inline,
+body.darkmode .dt-published {
+ color: #7bb01c;
+}
+
+body.darkmode pre,
+body.darkmode table tr:nth-child(2n),
+body.darkmode table tr {
+ background-color: #1e1e1e !important;
+ color: #dcdcdc;
+}
+
+body.darkmode img {
+ background: transparent;
+}
+
+body.darkmode .logo img {
+ display: none;
+}
+
+body.darkmode .logo::before {
+ content: "";
+ display: inline-block;
+ height: 48px;
+ width: 175px;
+ background: url("https://raw.githubusercontent.com/OAI/OpenAPI-Style-Guide/refs/heads/main/graphics/bitmap/OpenAPI_Logo_Pantone.png") no-repeat center / contain;
+ vertical-align: middle;
+}
+
+/** This contains the content of the https://www.w3.org/StyleSheets/TR/2021/dark.css file */
+body.darkmode {
+ --text: #ddd;
+ --bg: black;
+
+ /* Absolute URLs due to https://bugs.webkit.org/show_bug.cgi?id=230243 */
+ --unofficial-watermark: url(https://www.w3.org/StyleSheets/TR/2021/logos/UD-watermark-dark-unofficial);
+ --draft-watermark: url(https://www.w3.org/StyleSheets/TR/2021/logos/UD-watermark-dark-draft);
+
+ --logo-bg: #1a5e9a;
+ --logo-active-bg: #c00;
+ --logo-text: white;
+
+ --tocnav-normal-text: #999;
+ --tocnav-normal-bg: var(--bg);
+ --tocnav-hover-text: var(--tocnav-normal-text);
+ --tocnav-hover-bg: #080808;
+ --tocnav-active-text: #f44;
+ --tocnav-active-bg: var(--tocnav-normal-bg);
+
+ --tocsidebar-text: var(--text);
+ --tocsidebar-bg: #080808;
+ --tocsidebar-shadow: rgba(255,255,255,.1);
+ --tocsidebar-heading-text: hsla(203,20%,40%,.7);
+
+ --toclink-text: var(--text);
+ --toclink-underline: #6af;
+ --toclink-visited-text: var(--toclink-text);
+ --toclink-visited-underline: #054572;
+
+ --heading-text: #8af;
+
+ --hr-text: var(--text);
+
+ --algo-border: #456;
+
+ --del-text: #f44;
+ --del-bg: transparent;
+ --ins-text: #4a4;
+ --ins-bg: transparent;
+
+ --a-normal-text: #6af;
+ --a-normal-underline: #555;
+ --a-visited-text: var(--a-normal-text);
+ --a-visited-underline: var(--a-normal-underline);
+ --a-hover-bg: rgba(25%, 25%, 25%, .2);
+ --a-active-text: #f44;
+ --a-active-underline: var(--a-active-text);
+
+ --borderedblock-bg: rgba(255, 255, 255, .05);
+
+ --blockquote-border: silver;
+ --blockquote-bg: var(--borderedblock-bg);
+ --blockquote-text: currentcolor;
+
+ --issue-border: #e05252;
+ --issue-bg: var(--borderedblock-bg);
+ --issue-text: var(--text);
+ --issueheading-text: hsl(0deg, 70%, 70%);
+
+ --example-border: hsl(50deg, 90%, 60%);
+ --example-bg: var(--borderedblock-bg);
+ --example-text: var(--text);
+ --exampleheading-text: hsl(50deg, 70%, 70%);
+
+ --note-border: hsl(120deg, 100%, 35%);
+ --note-bg: var(--borderedblock-bg);
+ --note-text: var(--text);
+ --noteheading-text: hsl(120, 70%, 70%);
+ --notesummary-underline: silver;
+
+ --advisement-border: orange;
+ --advisement-bg: #222218;
+ --advisement-text: var(--text);
+ --advisementheading-text: #f84;
+
+ --amendment-border: #330099;
+ --amendment-bg: var(--borderedblock-bg);
+ --amendment-text: var(--text);
+ --amendmentheading-text: #a086ff;
+
+ --amendment-border: #330099;
+ --amendment-bg: #080010;
+ --amendment-text: var(--text);
+ --amendmentheading-text: #cc00ff;
+
+ --warning-border: red;
+ --warning-bg: hsla(40,100%,20%,0.95);
+ --warning-text: var(--text);
+
+ --def-border: #8ccbf2;
+ --def-bg: #080818;
+ --def-text: var(--text);
+ --defrow-border: #136;
+
+ --datacell-border: silver;
+
+ --indexinfo-text: #aaa;
+
+ --indextable-hover-text: var(--text);
+ --indextable-hover-bg: #181818;
+
+ --outdatedspec-bg: rgba(255, 255, 255, .5);
+ --outdatedspec-text: black;
+ --outdated-bg: maroon;
+ --outdated-text: white;
+ --outdated-shadow: red;
+
+ --editedrec-bg: darkorange;
+}
\ No newline at end of file
diff --git a/scripts/md2html/md2html.js b/scripts/md2html/md2html.js
index fd3ec78f69..29e6d93f26 100644
--- a/scripts/md2html/md2html.js
+++ b/scripts/md2html/md2html.js
@@ -129,28 +129,13 @@ function preface(title,options) {
preface += '';
// ReSpec
+ preface += '';
preface += '';
preface += ``;
- try {
- preface += fs.readFileSync('./analytics/google.html','utf8');
- }
- catch (ex) {}
+ preface += fs.readFileSync(path.resolve(__dirname,'./analytics/google.html'),'utf8');
preface += '';
preface += '';
preface += `${title.split('|')[0]}
`;
diff --git a/scripts/schema-publish.sh b/scripts/schema-publish.sh
index d1a7f822bd..ccbc0451a6 100755
--- a/scripts/schema-publish.sh
+++ b/scripts/schema-publish.sh
@@ -4,51 +4,78 @@
# Run this script from the root of the repo. It is designed to be run by a GitHub workflow.
-for schemaDir in schemas/v3* ; do
- vVersion=$(basename "$schemaDir")
- version=${vVersion:1}
- echo $version
-
- # list of schemas to process, dependent schemas come first
- schemas=(meta.yaml dialect.yaml schema.yaml schema-base.yaml)
-
- # find the newest commit date for each schema
- maxDate=""
- declare -A datesHash
- for schema in "${schemas[@]}"; do
- if [ -f "$schemaDir/$schema" ]; then
- newestCommitDate=$(git log -1 --format="%ad" --date=short "$schemaDir/$schema")
-
- # the newest date across a schema and all its dependencies is its date stamp
- if [ "$newestCommitDate" \> "$maxDate" ]; then
- maxDate=$newestCommitDate
- fi
- datesHash["$schema"]=$maxDate
- echo $schema changed at $newestCommitDate
- fi
- done
+schemaDir="src/schemas/validation"
+branch=$(git branch --show-current)
+
+
+if [ -z "$1" ]; then
+ if [[ $branch =~ ^v([0-9]+\.[0-9]+)-dev$ ]]; then
+ deploydir="./deploy/oas/${BASH_REMATCH[1]}"
+ else
+ echo "Unable to determine version from branch name; should be vMAJOR.MINOR.PATCH-dev"
+ exit 1
+ fi
+elif [ $1 = "src" ]; then
+ deploydir="./deploy-preview"
+else
+ echo "Unrecognized argument"
+ exit 1
+fi
+
+# create the date-stamped schemas
+publish_schema() {
+ local schema="$1"
+ local date="$2"
+ local sedCmd="$3"
+
+ local base=$(basename $schema '.yaml')
+ local target=$deploydir/$base/$date
+
+ mkdir -p $deploydir/$base
+ # replace the WORK-IN-PROGRESS placeholders
+ sed -e $sedCmd $schemaDir/$schema > $target.yaml
- # construct sed command
- sedCmd=()
- for schema in "${!datesHash[@]}"; do
- base=$(basename "$schema" .yaml)
- sedCmd+=("-e s/$base\/WORK-IN-PROGRESS/$base\/${datesHash[$schema]}/g")
- done
+ node scripts/yaml2json/yaml2json.js "$target.yaml"
+ rm "$target.yaml"
+ mv "$target.json" "$target"
- # create the date-stamped schemas
- for schema in "${!datesHash[@]}"; do
- base=$(basename "$schema" .yaml)
- target=deploy/oas/$version/$base/${datesHash[$schema]}
+ # Find the jekyll lander markdown file for this iteration.
+ local jekyllLander=$(find "$deploydir/$base" -maxdepth 1 -name "*.md")
- mkdir -p "deploy/oas/$version/$base"
+ # Move the jekyll lander markdown for this iteration to the deploy destination.
+ # The lander files only exist in the gh-pages branch.
+ if [ ! -z "$jekyllLander" ]; then
+ mv $jekyllLander $target.md
+ echo " * $newestCommitDate: $schema & jekyll lander $(basename $jekyllLander)"
+ else
+ echo " * $newestCommitDate: $schema"
+ fi
- sed ${sedCmd[@]} $schemaDir/$schema > $target.yaml
- node scripts/yaml2json/yaml2json.js $target.yaml
- rm $target.yaml
- mv $target.json $target
+}
- mv deploy/oas/$version/$base/*.md $target.md
- done
+echo === Building schemas into $deploydir
- echo ""
+# list of schemas to process, dependent schemas come first
+schemas=(meta.yaml dialect.yaml schema.yaml schema-base.yaml)
+
+# publish each schema using its or any of its dependencies newest commit date.
+maxDate=""
+sedCmds=()
+for schema in "${schemas[@]}"; do
+ if [ -f "$schemaDir/$schema" ]; then
+ newestCommitDate=$(git log -1 --format="%ad" --date=short "$schemaDir/$schema")
+
+ # the newest date across a schema and all its dependencies is its date stamp
+ if [ "$newestCommitDate" \> "$maxDate" ]; then
+ maxDate=$newestCommitDate
+ fi
+
+ base=$(basename $schema '.yaml')
+ # Add the replacement for this schema's placeholder to list of sed commands.
+ sedCmds+=("s/${base}\/WORK-IN-PROGRESS/${base}\/${maxDate}/g")
+
+ publish_schema "$schema" "$maxDate" $(printf '%s;' "${sedCmds[@]}")
+ fi
done
+
+echo === Built
diff --git a/scripts/schema-test-coverage.sh b/scripts/schema-test-coverage.sh
index 0e4ed3883e..f7a10491f5 100755
--- a/scripts/schema-test-coverage.sh
+++ b/scripts/schema-test-coverage.sh
@@ -8,11 +8,4 @@ echo
echo "Schema Test Coverage"
echo
-for schemaDir in schemas/v3* ; do
- version=$(basename "$schemaDir")
- echo $version
-
- node scripts/schema-test-coverage.mjs $schemaDir/schema.yaml tests/$version/pass
-
- echo
-done
\ No newline at end of file
+node scripts/schema-test-coverage.mjs src/schemas/validation/schema.yaml tests/schema/pass
diff --git a/schemas/v3.1/README.md b/src/schemas/validation/README.md
similarity index 56%
rename from schemas/v3.1/README.md
rename to src/schemas/validation/README.md
index a3d4c87ea0..2fdeb6999e 100644
--- a/schemas/v3.1/README.md
+++ b/src/schemas/validation/README.md
@@ -1,34 +1,34 @@
-# OpenAPI 3.1.X JSON Schema
+# OpenAPI 3.X.Y JSON Schema
-This directory contains the YAML sources for generating the JSON Schemas for validating OpenAPI definitions of versions 3.1.X, which are published on [https://spec.openapis.org](https://spec.openapis.org).
+This directory contains the YAML sources for generating the JSON Schemas for validating OpenAPI definitions of versions 3.X.Y, which are published on [https://spec.openapis.org](https://spec.openapis.org).
Due to limitations of GitHub pages, the schemas on the spec site are served with `Content-Type: application/octet-stream`, but should be interpreted as `application/schema+json`.
-The sources in this directory, which have `WORK-IN-PROGRESS` in their `$id`s, is _not intended for direct use_.
-
-## Choosing which schema to use
-
-There are two schemas to choose from for 3.1 usage, both of which have an `$id` that starts with `https://spec.openapis.org/oas/3.1/` and end with date or the `WORK-IN-PROGRESS` placeholder:
-
-* `https://spec.openapis.org/oas/3.1/schema/{date}` — A self-contained schema that _does not_ validate Schema Objects beyond `type: [object, boolean]`
-* `https://spec.openapis.org/oas/3.1/meta/base/{date}` — The vocabulary metaschema for OAS 3.1's extensions to draft 2020-12
-* `https://spec.openapis.org/oas/3.1/dialect/base/{date}` — The dialect metaschema that extends the standard `draft/2020-12` metaschema by adding the OAS "base" vocabulary
-* `https://spec.openapis.org/oas/3.1/schema-base/{date}` — A schema that combines the self-contained schema and the "base" dialect schema to validate Schema Objects with the dialect; this schema does not allow changing `$schema` or `jsonSchemaDialect` to other dialects
-
-The name "base" for the dialect was intended to indicate that the OAS dialect could be further extended.
-
-An additional schema that validates the Schema Object with the OAS 3.1 dialect but does not restrict changing `$schema` is [under consideration](https://github.com/OAI/OpenAPI-Specification/issues/4147).
+The sources in this directory, which have `WORK-IN-PROGRESS` in their `$id`s, are _not intended for direct use_.
## Schema `$id` dates
The published schemas on the spec site have an _iteration date_ in their `id`s.
-This allows the schemas for a release line (in this case 3.0) to be updated independent of the spec patch release cycle.
+This allows the schemas for a release line to be updated independent of the spec patch release cycle.
The iteration version of the JSON Schema can be found in the `$id` field.
For example, the value of `$id: https://spec.openapis.org/oas/3.1/schema/2021-03-02` means this iteration was created on March 2nd, 2021.
We are [working on](https://github.com/OAI/OpenAPI-Specification/issues/4152) how to best provide programmatic access for determining the latest date for each schema.
+## Choosing which schema to use
+
+There are two schemas to choose from for versions 3.1 and greater, both of which have an `$id` that starts with `https://spec.openapis.org/oas/3.X/` and ends with the iteration date:
+
+* `https://spec.openapis.org/oas/3.X/schema/{date}`, source: `schema.yaml` — A self-contained schema that _does not_ validate Schema Objects beyond `type: [object, boolean]`
+* `https://spec.openapis.org/oas/3.X/meta/{date}`, source: `meta.yaml` — The vocabulary metaschema for OAS 3.X's extensions to draft 2020-12
+* `https://spec.openapis.org/oas/3.X/dialect/base/{date}`, source: `base.yaml` — The dialect metaschema that extends the standard `draft/2020-12` metaschema by adding the OAS "base" vocabulary
+* `https://spec.openapis.org/oas/3.1/schema-base/{date}`, source: `schema-base.yaml` — A schema that combines the self-contained schema and the "base" dialect schema to validate Schema Objects with the dialect; this schema does not allow changing `$schema` or `jsonSchemaDialect` to other dialects
+
+The name "base" for the dialect was intended to indicate that the OAS dialect could be further extended.
+
+An additional schema that validates the Schema Object with the OAS 3.X dialect but does not restrict changing `$schema` is [under consideration](https://github.com/OAI/OpenAPI-Specification/issues/4147).
+
## Improving the schemas
As a reminder, the JSON Schema is not the source of truth for the Specification. In cases of conflicts between the Specification itself and the JSON Schema, the Specification wins. Also, some Specification constraints cannot be represented with the JSON Schema so it's highly recommended to employ other methods to ensure compliance.
@@ -37,16 +37,16 @@ The schema only validates the mandatory aspects of the OAS.
Validating requirements that are optional, or field usage that has undefined or ignored behavior are not within the scope of this schema.
Schemas to perform additional optional validation are [under consideration](https://github.com/OAI/OpenAPI-Specification/issues/4141).
-Improvements can be submitted by opening a PR against the `main` branch.
+Improvements can be submitted by opening a PR against the `vX.Y-dev` branch of the respective specification version.
-Modify the `*schema*.yaml` files and add test cases for your changes.
+Modify the `schema.yaml` file and add test cases for your changes.
The TSC will then:
- Run tests on the updated schema
- Update the iteration version
- Publish the new version
-The [test suite](../../tests/v3.1) is part of this package.
+The [test suite](../../../tests/schema) is part of this package.
```bash
npm install
diff --git a/style-guide.md b/style-guide.md
new file mode 100644
index 0000000000..fc8fab8d0f
--- /dev/null
+++ b/style-guide.md
@@ -0,0 +1,38 @@
+## Style Guide
+
+Contributions to this repository should follow the style guide as described in this section.
+
+### Markdown
+
+Markdown files in this project should follow the style enforced by the [markdownlint tool](https://www.npmjs.com/package/markdownlint),
+as configured by the `.markdownlint.yaml` file in the root of the project.
+The `markdownlint` tool can also fix formatting, which can save time with tables in particular.
+
+The following additional rules should be followed but currently are not enforced by tooling:
+
+1. The first mention of a normative reference or an OAS-defined Object in a (sub)*section is a link, additional mentions are not.
+2. OAS-defined Objects such as Schema Objects are written in this style, and are not monospaced.
+3. Use "example" instead of "sample" - this spec is not about statistics.
+4. Use "OpenAPI Object" instead of "root".
+5. Fixed fields are monospaced.
+6. Field values are monospaced in JSON notation: `true`, `false`, `null`, `"header"` (with double-quotes around string values).
+7. A combination of fixed field name with example value uses JS notation: `in: "header"`, combining rules 5 and 6.
+8. An exception to 5-7 is colloquial use, for example "values of type `array` or `object`" - "type" is not monospaced, so the monospaced values aren't enclosed in double quotes.
+9. Use [Oxford commas](https://en.wikipedia.org/wiki/Serial_comma), avoid [Shatner commas](https://www.latimes.com/archives/blogs/jacket-copy/story/2011-06-30/goodbye-oxford-comma-hello-shatner-comma).
+10. Use `` for link anchors. The `` format has been deprecated.
+11. Headings use [title case](https://en.wikipedia.org/wiki/Title_case) and are followed by a blank line.
+
+Plus some suggestions, rather than rules:
+
+* Use one sentence per line in paragraphs and bullet points, to make diffs and edits easier to compare and understand.
+ A blank line is needed to cause a paragraph break in Markdown.
+* In examples, use realistic values rather than foo/bar.
+
+### Use of "keyword", "field", "property", and "attribute"
+
+* JSON Schema keywords -> "keyword"
+* OpenAPI fixed fields -> "field"
+* property of a "plain" JSON object that is not an OpenAPI-defined Foo Object -> "property"
+* "attribute" is only used in the XML context and means "XML attribute"
+
+
diff --git a/tests/md2html/fixtures/basic-new.html b/tests/md2html/fixtures/basic-new.html
index c1b911743b..67f639d161 100644
--- a/tests/md2html/fixtures/basic-new.html
+++ b/tests/md2html/fixtures/basic-new.html
@@ -1,4 +1,12 @@
-OpenAPI Specification v30.0.1 | Introduction, Definitions, & MoreOpenAPI Specification v30.0.1
Copyright © 3001 the Linux Foundation
What is the OpenAPI Specification?
The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.Status of This Document
The source-of-truth for this specification is the HTML file referenced above as This version.
+OpenAPI Specification v30.0.1 | Introduction, Definitions, & More
+
+
+OpenAPI Specification v30.0.1
Copyright © 3001 the Linux Foundation
What is the OpenAPI Specification?
The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.Status of This Document
The source-of-truth for this specification is the HTML file referenced above as This version.
Heading 1
Text for first chapter