2022-06-27 13:53:32 +00:00
# API reference documentation
2022-08-15 18:06:33 +00:00
## TL;DR: validate and test your local `influxdata/openapi` changes
1. After you've edited `influxdata/openapi` definitions, you need to generate and validate contracts and test the API reference docs.
To create a shell alias that does this, open your `~/.profile` in an editor and add the following commands to the file:
```sh
export DOCS="$HOME/github/docs-v2"
alias gsd="cd $HOME/github/openapi & & make generate-all & & \
npx oats ./contracts/ref/cloud.yml & & npx oats ./contracts/ref/oss.yml & & \
2022-08-15 18:18:08 +00:00
cd $DOCS/api-docs & & ./getswagger.sh all -b file:///$HOME/github/openapi & & \
2022-08-15 18:06:33 +00:00
sh ./generate-api-docs.sh"
```
2. To refresh your environment with the `~/.profile` changes, enter the following command into your terminal:
```sh
source ~/.profile
```
3. To run the alias, enter the following command into your terminal:
```sh
gsd
```
`gsd` generates the local contracts in `~/github/openapi` , validates them with OATS, bundles and lints them with `@redocly/cli` , and then generates the HTML with `@redocly/cli` .
2022-06-27 13:53:32 +00:00
## Update API docs for InfluxDB Cloud
1. In your `docs-v2` directory, create a branch for your changes--for example:
```sh
cd ~/github/docs-v2
git fetch -ap
git checkout -b release/api-cloud origin/master
```
2. Enter the following commands into your terminal to fetch and process the contracts:
```sh
# In your terminal, go to the `docs-v2/api-docs` directory:
cd ./api-docs
# Fetch the contracts, apply customizations, and bundle.
sh getswagger.sh cloud
```
2022-07-12 17:21:35 +00:00
3. To generate the HTML files for local testing, follow the instructions to [generate API docs locally ](#generate-api-docs-locally ).
4. To commit your updated spec files, push your branch to `influxdata/docs-v2` , and create a PR against the `master` branch.
2022-06-27 13:53:32 +00:00
## Update API docs for an InfluxDB OSS release
1. Go into your local `influxdata/openapi` repo directory--for example:
```sh
cd ~/github/openapi
```
2. Get the SHA for the release commit (or consult Team-Edge if you're not sure)--for example, enter the following command into your terminal to get the latest SHA for `contracts/ref/oss.yml` :
```sh
git log -n 1 --pretty=format:%h -- contracts/ref/oss.yml
```
3. Copy the SHA from the output and create a git tag by running the following command, replacing ** `[SEMANTIC_VERSION]` ** with the OSS release (for example, `2.3.0` ) and ** `COMMIT_SHA` ** with the SHA from step 2:
```sh
git tag influxdb-oss-v[SEMANTIC_VERSION] COMMIT_SHA
2022-07-12 17:21:35 +00:00
```
2022-06-27 13:53:32 +00:00
4. Enter the following commands into your terminal to push the new tag to the repo:
```sh
2022-08-19 14:57:53 +00:00
git push --tags
2022-06-27 13:53:32 +00:00
```
5. Enter the following commands into your terminal to update `docs-release/influxdb-oss` branch to the OSS release commit and rebase the branch to the [latest release of InfluxDB OSS ](#how-to-find-the-api-spec-used-by-an-influxdb-oss-version ), replacing ** `OSS_RELEASE_TAG` ** with the SHA from step 3.
```sh
git checkout docs-release/influxdb-oss
git rebase -i OSS_RELEASE_TAG
git push -f origin docs-release/influxdb-oss
2022-07-12 17:21:35 +00:00
```
2022-06-27 13:53:32 +00:00
6. Go into your `docs-v2` directory and create a branch for your changes--for example:
```sh
cd ~/github/docs-v2
git fetch -ap
git checkout -b release/api-oss origin/master
```
2023-03-15 16:36:17 +00:00
7. In `./api-docs` , copy the previous version or create a directory for the new OSS version number--for example:
2022-06-27 13:53:32 +00:00
```sh
# In your terminal, go to the `docs-v2/api-docs` directory:
cd ./api-docs
```
2023-03-15 16:36:17 +00:00
If the old version directory contains custom content files (for example, v2.2/content), you'll likely want to copy
those for the new version.
2022-08-29 20:15:02 +00:00
2023-03-15 16:36:17 +00:00
```sh
# Copy the old version directory to a directory for the new version:
cp -r v2.2 v2.3
```
8. In your editor, update custom content files in NEW_VERSION/content.
2022-08-29 20:15:02 +00:00
9. Enter the following commands into your terminal to fetch and process the contracts:
2022-06-27 13:53:32 +00:00
```sh
# Fetch the contracts, apply customizations, and bundle.
sh getswagger.sh oss
```
2022-08-29 20:15:02 +00:00
10. To generate the HTML files for local testing, follow the instructions to [generate API docs locally ](#generate-api-docs-locally ).
11. To commit your updated spec files, push your branch to `influxdata/docs-v2` , and create a PR against the `master` branch.
2022-06-27 13:53:32 +00:00
## Update API docs for OSS spec changes between releases
Follow these steps to update OSS API docs between version releases--for example, after revising description fields in `influxdata/openapi` .
1. Go into your local `influxdata/openapi` repo directory--for example:
```sh
cd ~/github/openapi
```
2. Enter the following commands into your terminal to checkout `docs-release/influxdb-oss` branch:
```sh
git fetch -ap
git checkout -t docs-release/influxdb-oss
```
3. Cherry-pick the commits with the updated description fields, and push the commits to the remote branch, replacing ** `[COMMIT_SHAs]` ** (one or more commit SHAs (space-separated))--for example:
```sh
git cherry-pick [COMMIT_SHAs]
git push -f origin docs-release/influxdb-oss
2022-08-29 20:15:02 +00:00
2022-06-27 13:53:32 +00:00
4. Go into your `docs-v2` directory and create a branch for your changes--for example:
```sh
cd ~/github/docs-v2
git fetch -ap
git checkout -b docs/api-oss origin/master
```
5. Go into `./api-docs` directory--for example:
```sh
# In your terminal, go to the `docs-v2/api-docs` directory:
cd ./api-docs
```
6. Enter the following commands into your terminal to fetch and process the contracts:
```sh
# Fetch the contracts, apply customizations, and bundle.
sh getswagger.sh oss
```
2022-07-12 17:21:35 +00:00
7. To generate the HTML files for local testing, follow the instructions to [generate API docs locally ](#generate-api-docs-locally ).
8. To commit your updated spec files, push your branch to `influxdata/docs-v2` , and create a PR against the `master` branch.
2022-06-27 13:53:32 +00:00
## Generate InfluxDB API docs
2022-04-26 22:16:36 +00:00
2022-04-06 22:07:21 +00:00
InfluxData uses [Redoc ](https://github.com/Redocly/redoc/ ),
2021-10-11 21:15:39 +00:00
[redoc-cli ](https://github.com/Redocly/redoc/blob/master/cli/README.md ),
and Redocly's [OpenApi CLI ](https://redoc.ly/docs/cli/ ) to generate
2022-04-06 22:07:21 +00:00
API documentation from the [InfluxDB OpenAPI (aka Swagger) contracts ](https://github.com/influxdata/openapi ).
2019-09-27 20:42:01 +00:00
2022-04-06 22:07:21 +00:00
To minimize the size of the `docs-v2` repository, the generated API documentation HTML is gitignored, therefore
not committed to the docs repo.
The InfluxDB docs deployment process uses OpenAPI specification files in the `api-docs` directory
to generate version-specific (Cloud, OSS v2.1, OSS v2.0, etc.) API documentation.
2019-09-27 20:42:01 +00:00
2022-07-12 17:21:35 +00:00
### Generate API docs locally
Because the API documentation HTML is gitignored, you must manually generate it
to view the API docs locally.
2022-08-29 20:15:02 +00:00
The `./generate.sh` script uses the Redoc CLI to generate Redocly HTML, Javascript,
2022-07-12 17:21:35 +00:00
and CSS for each version of the InfluxDB spec.
The script uses `npx` to download and execute the Redocly CLI.
1. Verify that you have a working `npx` (it's included with Node.js).
In your terminal, run:
```sh
npx --version
```
If `npx` returns errors, [download ](https://nodejs.org/en/ ) and run a recent version of the Node.js installer for your OS.
2. To generate API docs for _all_ InfluxDB versions in `./openapi` , enter the following command into your terminal:
```sh
sh generate-api-docs.sh
```
To save time testing your spec changes, you can pass the `-c` flag
to regenerate HTML for only the OpenAPI files that differ from your `master` branch.
```sh
sh generate-api-docs.sh -c
```
2022-04-26 22:16:36 +00:00
## How we version OpenAPI contracts
2022-04-06 22:07:21 +00:00
The `api-docs` directory structure versions OpenAPI files using the following pattern:
2019-09-30 16:59:25 +00:00
2022-04-26 22:16:36 +00:00
```md
2019-09-30 16:16:09 +00:00
api-docs/
2022-06-27 13:53:32 +00:00
|-- cloud/
│ └── ref.yml
│ └── swaggerV1Compat.yml
2019-09-30 16:16:09 +00:00
├── v2.0/
2021-11-03 19:18:02 +00:00
│ └── ref.yml
2022-04-06 22:07:21 +00:00
│ └── swaggerV1Compat.yml
2019-09-30 16:16:09 +00:00
├── v2.1/
2021-11-03 19:18:02 +00:00
│ └── ref.yml
2022-04-06 22:07:21 +00:00
│ └── swaggerV1Compat.yml
2019-09-30 16:16:09 +00:00
├── v2.2/
2021-11-03 19:18:02 +00:00
│ └── ref.yml
2022-04-06 22:07:21 +00:00
│ └── swaggerV1Compat.yml
2021-11-03 19:18:02 +00:00
└── etc...
```
2022-04-26 22:16:36 +00:00
### InfluxDB Cloud version
2022-06-27 13:53:32 +00:00
InfluxDB Cloud releases are frequent and not versioned, so the Cloud API spec isn't versioned.
We regenerate API reference docs from `influxdata/openapi`
**master** branch as features are released.
2022-04-26 22:16:36 +00:00
### InfluxDB OSS version
Given that
`influxdata/openapi` **master** may contain OSS spec changes not implemented
in the current OSS release, we (Docs team) maintain a release branch, `influxdata/openapi`
**docs-release/influxdb-oss**, used to generate OSS reference docs.
### How to find the API spec used by an InfluxDB OSS version
`influxdata/openapi` does not version the InfluxData API.
To find the `influxdata/openapi` commit SHA used in a specific version of InfluxDB OSS,
see `/scripts/fetch-swagger.sh` in `influxdata/influxdb` --for example,
for the `influxdata/openapi` commit used in OSS v2.2.0, see https://github.com/influxdata/influxdb/blob/v2.2.0/scripts/fetch-swagger.sh#L13=.
For convenience, we tag `influxdata/influxdb` (OSS) release points in `influxdata/openapi` as
`influxdb-oss-v[OSS_VERSION]` . See < https: // github . com / influxdata / openapi / tags > .
## How to use custom OpenAPI spec processing
Generally, you should manage API content in `influxdata/openapi` .
In some cases, however, you may want custom processing (e.g. collecting all Tags)
or additional content (e.g. describing the reference documentation)
specifically for the docs.
When you run `getswagger.sh` , it executes `@redocly/openapi-cli` and the plugins listed in `.redocly.yaml` .
[`./openapi/plugins` ](./openapi/plugins ) use
[`./openapi/plugins/decorators` ](./openapi/plugins/decorators ) to apply custom
processing to OpenAPI specs.
2023-03-15 16:36:17 +00:00
`.yml` files in [`./PLATFORM/content` ](./openapi/content ) define custom content for OpenAPI nodes published in the reference docs.
2022-04-26 22:16:36 +00:00
To update the content for those nodes, you only need to update the YAML files.
2023-03-15 16:36:17 +00:00
For example, to customize the Info section for the Cloud API reference, edit `./cloud/content/info.yml` .
2022-04-26 22:16:36 +00:00
2023-03-15 16:36:17 +00:00
To add new YAML files for other nodes in the contracts, follow these steps:
2022-04-26 22:16:36 +00:00
2023-03-15 16:36:17 +00:00
1. Create your new content file with valid OAS content structure and Markdown.
2. Configure the new content YAML file in [`./openapi/content/content.js` ](./openapi/content/content.js ).
3. Write or update a decorator module for the node and configure the decorator in
[`./openapi/plugins/docs-plugin.js` ](`./openapi/plugins/docs-plugin.js ).
See the [complete list of OAS v3.0 nodes ](https://github.com/Redocly/openapi-cli/blob/master/packages/core/src/types/oas3.ts#L529 ).
2022-04-26 22:16:36 +00:00
2023-03-15 16:36:17 +00:00
`@redocly/cli` requires that modules use CommonJS `require` syntax for imports.
`@redocly/cli` also provides some [built-in decorators ](https://redocly.com/docs/cli/decorators/ )
that you can configure in `.redocly` without having to write JavaScript.
2022-04-26 22:16:36 +00:00
### How to add tag content or describe a group of paths
2023-03-15 16:36:17 +00:00
In API reference docs, we use OpenAPI `tags` elements for navigation,
the `x-traitTag` vendor extension for providing custom content, and the `x-tagGroups` vendor extension
for grouping tags in navigation.
2022-04-26 22:16:36 +00:00
| Example | OpenAPI field | |
|:-------------------------------------------------------------------------------------------------------|-------------------------------------------------------|--------------------------------------------|
| [Add supplementary documentation ](https://docs.influxdata.com/influxdb/cloud/api/#tag/Quick-start ) | `tags: [ { name: 'Quick start', x-traitTag: true } ]` | [Source ](https://github.com/influxdata/openapi/master/src/cloud/tags.yml ) |
2023-03-15 16:36:17 +00:00
| Group tags in navigation | `x-tagGroups: [ { name: 'All endpoints', tags: [...], ...} ]` | [Source ](https://github.com/influxdata/docs-v2/blob/da6c2e467de7212fc2197dfe0b87f0f0296688ee/api-docs/cloud-iox/content/tag-groups.yml )) |
#### Add and update x-tagGroups
Custom `x-tagGroups` configured in
`PLATFORM/content/tag-groups.yml` override `x-tagGroups` defined in `influxdata/openapi` .
If you assign a list of tags to the `All endpoints` tag group,
the decorator applies your list and removes Operations that don't contain
those tags.
If you assign an empty array(`[]`) to the `All endpoints` x-tagGroup in `PLATFORM/content/tag-groups.yml` ,
the decorator replaces the empty array with the list of tags from all Operations in the spec.
2022-04-26 22:16:36 +00:00
## How to test your spec or API reference changes
2022-04-06 22:07:21 +00:00
You can use `getswagger.sh` to fetch contracts from any URL.
2022-04-26 22:16:36 +00:00
For example, if you've made changes to spec files and generated new contracts in your local `openapi` repo, run `getswagger.sh` to fetch and process them.
2022-04-06 22:07:21 +00:00
To fetch contracts from your own `openapi` repo, pass the
`-b` `base_url` option and the full path to your `openapi` directory.
```sh
# Use the file:/// protocol to pass your openapi directory.
sh getswagger.sh oss -b file:///Users/me/github/openapi
```
After you fetch them, run the linter or generate HTML to test your changes before you commit them to `influxdata/openapi` .
By default, `getswagger.sh` doesn't run the linter when bundling
2022-04-26 22:16:36 +00:00
the specs.
Manually run the [linter rules ](https://redoc.ly/docs/cli/resources/built-in-rules/ ) to get a report of errors and warnings.
2022-04-06 22:07:21 +00:00
```sh
npx @redocly/openapi -cli lint v2.1/ref.yml
```
### Configure OpenAPI CLI linting and bundling
2022-04-26 22:16:36 +00:00
2022-04-06 22:07:21 +00:00
The `.redoc.yaml` configuration file sets options for the `@redocly/openapi-cli` [`lint` ](https://redoc.ly/docs/cli/commands/lint/ ) and [`bundle` ](https://redoc.ly/docs/cli/commands/bundle/ ) commands.
`./openapi/plugins` contains custom InfluxData Docs plugins composed of *rules* (for validating and linting) and *decorators* (for customizing). For more configuration options, see `@redocly/openapi-cli` [configuration file documentation ](https://redoc.ly/docs/cli/configuration/configuration-file/ ).