add instructions for generating Swagger/OpenAPI docs

This commit is contained in:
Ryan Petrello
2018-02-06 13:24:44 -05:00
parent 8b976031cb
commit b1695fe107
2 changed files with 20 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ Have questions about this document or anything not covered here? Come chat with
* [Start a shell](#start-the-shell) * [Start a shell](#start-the-shell)
* [Create a superuser](#create-a-superuser) * [Create a superuser](#create-a-superuser)
* [Load the data](#load-the-data) * [Load the data](#load-the-data)
* [Building API Documentation](#build-documentation)
* [Accessing the AWX web interface](#accessing-the-awx-web-interface) * [Accessing the AWX web interface](#accessing-the-awx-web-interface)
* [Purging containers and images](#purging-containers-and-images) * [Purging containers and images](#purging-containers-and-images)
* [What should I work on?](#what-should-i-work-on) * [What should I work on?](#what-should-i-work-on)
@@ -261,6 +262,20 @@ You can optionally load some demo data. This will create a demo project, invento
> This information will persist in the database running in the `tools_postgres_1` container, until the container is removed. You may periodically need to recreate > This information will persist in the database running in the `tools_postgres_1` container, until the container is removed. You may periodically need to recreate
this container, and thus the database, if the database schema changes in an upstream commit. this container, and thus the database, if the database schema changes in an upstream commit.
##### Building API Documentation
AWX includes support for building [Swagger/OpenAPI
documentation](https://swagger.io). To build the documentation locally, run:
```bash
(container)/awx_devel$ make swagger
```
This will write a file named `swagger.json` that contains the API specification
in OpenAPI format. A variety of online tools are available for translating
this data into more consumable formats (such as HTML). http://editor.swagger.io
is an example of one such service.
### Accessing the AWX web interface ### Accessing the AWX web interface
You can now log into the AWX web interface at [https://localhost:8043](https://localhost:8043), and access the API directly at [https://localhost:8043/api/](https://localhost:8043/api/). You can now log into the AWX web interface at [https://localhost:8043](https://localhost:8043), and access the API directly at [https://localhost:8043/api/](https://localhost:8043/api/).

View File

@@ -152,7 +152,10 @@ class TestSwaggerGeneration():
content_type, resp, request_data = value content_type, resp, request_data = value
if method in node: if method in node:
status_code = str(status_code) status_code = str(status_code)
node[method].setdefault('produces', []).append(content_type) if content_type:
produces = node[method].setdefault('produces', [])
if content_type not in produces:
produces.append(content_type)
if request_data and status_code.startswith('2'): if request_data and status_code.startswith('2'):
# DRF builds a schema based on the serializer # DRF builds a schema based on the serializer
# fields. This is _pretty good_, but if we # fields. This is _pretty good_, but if we
@@ -181,5 +184,5 @@ class TestSwaggerGeneration():
def teardown_class(cls): def teardown_class(cls):
with open('swagger.json', 'w') as f: with open('swagger.json', 'w') as f:
f.write(force_bytes( f.write(force_bytes(
json.dumps(cls.JSON, cls=i18nEncoder, indent=5) json.dumps(cls.JSON, cls=i18nEncoder)
)) ))