Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace all mentions of Swagger by OpenAPI #1633

Merged
merged 6 commits into from
Sep 19, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,17 @@ jobs:
export RELEASE="unstable"
fi
# The output path matches the final deployment path at spec.matrix.org
scripts/dump-swagger.py \
scripts/dump-openapi.py \
--base-url "https://spec.matrix.org${{ needs.calculate-baseurl.outputs.baseURL }}" \
--api application-service \
-r "$RELEASE" \
-o spec/application-service-api/api.json
scripts/dump-swagger.py \
scripts/dump-openapi.py \
--base-url "https://spec.matrix.org${{ needs.calculate-baseurl.outputs.baseURL }}" \
--api client-server \
-r "$RELEASE" \
-o spec/client-server-api/api.json
scripts/dump-swagger.py \
scripts/dump-openapi.py \
--base-url "https://spec.matrix.org${{ needs.calculate-baseurl.outputs.baseURL }}" \
--api push-gateway \
-r "$RELEASE" \
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ node_modules
/data/msc
/env*
/resources
/scripts/swagger
/scripts/openapi
/scripts/tmp
/hugo-config.toml
/public
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The Matrix spec is compiled with [Hugo](https://gohugo.io/) (a static site gener

* `/data`: this can contain TOML, YAML, or JSON files. Files kept here are directly available to template code as
[data objects](https://gohugo.io/templates/data-templates/), so templates don't need to load them from a file and
parse them. This is also where our Swagger/OpenAPI definitions and schemas are.
parse them. This is also where our OpenAPI definitions and schemas are.

* `/layouts`: this contains [Hugo templates](https://gohugo.io/templates/). Some templates define the overall layout of
a page: for example, whether it has header, footer, sidebar, and so on.
Expand Down Expand Up @@ -52,7 +52,7 @@ Additionally, the following directories may be of interest:
* `/data-definitions`: Bits of structured data consumable by Matrix implementations.
* `/meta`: Documentation relating to the spec's processes that are otherwise untracked (release instructions, etc).
* `/scripts`: Various scripts for generating the spec and validating its contents.
* `/packages`: Various packages for shipping spec files like OpenAPI/swagger bindings and data definitions.
* `/packages`: Various packages for shipping spec files like OpenAPI bindings and data definitions.

## Authoring changes to the spec

Expand Down Expand Up @@ -87,13 +87,13 @@ steps for authoring changes to the specification and instead of `hugo serve` run
spec to `/spec`. If you'd like to serve the spec off a path instead of a domain root (eg: `/unstable`), add `--baseURL "/unstable"`
to the `hugo -d "spec"` command.

For building the swagger definitions, create a python3 virtualenv and activate it. Then run `pip install -r ./scripts/requirements.txt`
and finally `python ./scripts/dump-swagger.py` to generate it to `./scripts/swagger/api-docs.json`. To make use of the generated file,
For building the OpenAPI definitions, create a python3 virtualenv and activate it. Then run `pip install -r ./scripts/requirements.txt`
and finally `python ./scripts/dump-openapi.py` to generate it to `./scripts/openapi/api-docs.json`. To make use of the generated file,
zecakeh marked this conversation as resolved.
Show resolved Hide resolved
there are a number of options:

* You can open `./scripts/swagger-preview.html` in your browser, and then open the file by clicking on `Local JSON File`.
* You can run a local HTTP server by running `./scripts/swagger-http-server.py`, and then view the documentation by
opening `./scripts/swagger-preview.html` in your browser.
* You can open `./scripts/openapi-preview.html` in your browser, and then open the file by clicking on `Local JSON File`.
* You can run a local HTTP server by running `./scripts/openapi-http-server.py`, and then view the documentation by
opening `./scripts/openapi-preview.html` in your browser.

## Issue tracking

Expand Down
2 changes: 1 addition & 1 deletion data/api/client-server/keys.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ paths:
one_time_keys:
# $ref: "definitions/one_time_keys.yaml"
# XXX: We can't define an actual object here, so we have to hope
# that people will look at the swagger source or can figure it out
# that people will look at the OpenAPI source or can figure it out
# from the other endpoints/example.
type: object
title: OneTimeKeys
Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/json-schema/resolve-allof.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{/*

Resolves the `allOf` keyword (https://swagger.io/specification/v2/#composition-and-inheritance-polymorphism),
Resolves the `allOf` keyword (https://spec.openapis.org/oas/v3.1.0#composition-and-inheritance-polymorphism),
given a JSON schema object.

`allOf` is used to support a kind of inheritance for JSON schema objects.
Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/openapi/render-api.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Render an HTTP API, given:

* `api_data`: the OpenAPI/Swagger data
* `api_data`: the OpenAPI data
* `base_url`: the base URL: that is, the part we glue onto the front
of each value in `paths` to get a complete URL.
* `path`: the directory under /data where we found this API definition.
Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/openapi/render-operation.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

* `method`: the method, e.g. GET, PUT
* `endpoint`: the endpoint
* `operation_data`: the OpenAPI/Swagger data for the operation
* `operation_data`: the OpenAPI data for the operation
* `path`: the path where this definition was found, to enable us to resolve "$ref"

This template renders the operation as a `<section>` containing:
Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/openapi/render-parameters.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Render the parameters of a given type, given:

* `parameters`: OpenAPI/Swagger data specifying the parameters
* `parameters`: OpenAPI data specifying the parameters
* `type`: the type of parameters to render: "header, ""path", "query"
* `caption`: caption to use for the table

Expand Down
4 changes: 2 additions & 2 deletions layouts/partials/openapi/render-request.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

Render the request part of a single HTTP API operation, given:

* `parameters`: OpenAPI/Swagger data specifying the parameters
* `request_body`: OpenAPI/Swagger data specifying the request body
* `parameters`: OpenAPI data specifying the parameters
* `request_body`: OpenAPI data specifying the request body
* `path`: the path where this definition was found, to enable us to resolve "$ref"
* `anchor_base`: a prefix to add to the HTML anchors generated for each object

Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/openapi/render-responses.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Render the response part of a single HTTP API operation, given:

* `responses`: OpenAPI/Swagger data specifying the responses
* `responses`: OpenAPI data specifying the responses
* `path`: the path where this definition was found, to enable us to resolve "$ref"
* `anchor_base`: a prefix to add to the HTML anchors generated for each object

Expand Down
4 changes: 2 additions & 2 deletions layouts/shortcodes/http-api.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{{/*

This template is used to render an HTTP API, given an OpenAPI/Swagger definition.
This template is used to render an HTTP API, given an OpenAPI definition.

It expects to be passed two parameters:

* a `spec` parameter identifying the spec, which must be the name of
a directory under /data/api
* an `api` parameter, identifying an OpenAPI/Swagger definition,
* an `api` parameter, identifying an OpenAPI definition,
which is the name of a schema file under "data/api/$spec".
The file extension is omitted. For example:

Expand Down
55 changes: 4 additions & 51 deletions openapi_extensions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# OpenAPI Extensions

For some functionality that is not directly provided by the OpenAPI v2
For some functionality that is not directly provided by the OpenAPI v3.1
specification, some extensions have been added that are to be consistent
across the specification. The defined extensions are listed below. Extensions
should not break parsers, however if extra functionality is required, aware
Expand All @@ -12,56 +12,9 @@ To ease API design and management, the API definition is split across several
files. Each of these files is self-contained valid OpenAPI.

There is no single root file in the source tree as OpenAPI requires; this file
can be generated by `dump-swagger.py`. The script does not convert
the extensions described further in this document (`oneOf` and parameter
exploding) so there can be minor interoperability issues with tooling that
expects compliant Swagger.

## Extensible Query Parameters

<!-- TODO: Remove and change instances to 'explode' after OpenAPI/Swagger v3 update -->

If a unknown amount of query parameters can be added to a request, the `name`
must be `fields...`, with the trailing ellipses representing the possibility
of more fields.

Example:

```
- in: query
name: fields...
type: string
```

## Using oneOf to provide type alternatives

<!-- TODO: Remove this section after upgrading to OpenAPI v3 -->

`oneOf` (available in JSON Schema and Swagger/OpenAPI v3 but not in v2)
is used in cases when a simpler type specification as a list of types
doesn't work, as in the following example:
```
properties:
old: # compliant with old Swagger
type:
- string
- object # Cannot specify a schema here
new: # uses oneOf extension
oneOf:
- type: string
- type: object
title: CustomSchemaForTheWin
properties:
...
```

## OpenAPI 3's "2xx" format for response codes

<!-- TODO: Remove this section after upgrading to OpenAPI v3 -->

In some cases, the schema will have HTTP response code definitions like
`2xx`, `3xx`, and `4xx`. These indicate that a response code within those
ranges (`2xx` = `200` to `299`) is valid for the schema.
can be generated by `dump-openapi.py`. The script does not convert
the extensions described further in this document so there can be minor
interoperability issues with tooling that expects compliant OpenAPI.

## Custom `x-addedInMatrixVersion` key

Expand Down
File renamed without changes.
7 changes: 3 additions & 4 deletions scripts/dump-swagger.py → scripts/dump-openapi.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
#!/usr/bin/env python3

# dump-swagger reads all of the swagger API docs used in spec generation and
# outputs a JSON file which merges them all, for use as input to a swagger UI
# dump-swagger reads all of the OpenAPI docs used in spec generation and
# outputs a JSON file which merges them all, for use as input to an OpenAPI
# viewer.
# See https://github.com/swagger-api/swagger-ui for details of swagger-ui.

# Copyright 2016 OpenMarket Ltd
#
Expand Down Expand Up @@ -85,7 +84,7 @@ def edit_links(node, base_url):
edit_links(item, base_url)

parser = argparse.ArgumentParser(
"dump-swagger.py - assemble the Swagger specs into a single JSON file"
"dump-swagger.py - assemble the OpenAPI specs into a single JSON file"
)
parser.add_argument(
"--base-url", "-b",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env python

# Runs an HTTP server on localhost:8000 which will serve the generated swagger
# JSON so that it can be viewed in an online swagger UI.
# Runs an HTTP server on localhost:8000 which will serve the generated OpenAPI
# JSON so that it can be viewed in an online OpenAPI viewer.

# Copyright 2016 OpenMarket Ltd
#
Expand Down
File renamed without changes.