-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Fix API Swagger specs, add OpenAPI v3 #4541
Fix API Swagger specs, add OpenAPI v3 #4541
Conversation
83a69ee
to
deca4bc
Compare
ae54e22
to
a1541c3
Compare
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
Conflicts have been resolved. A maintainer will review the pull request shortly. |
back to draft as I saw a problem |
Good work @valentijnscholten!
The API is still more or less the same, just upgrading from openapiv2 to v3 doesn't mean we have a v3 API. I would stick to v2 as API Version and just remove the openapiv2 documentation in the future. |
We should rename Swagger docs to OpenAPI2 Docs. See https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/ |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
Conflicts have been resolved. A maintainer will review the pull request shortly. |
Done. Also fixed the last open issue around selecting the correct serializer for the prefetch fields, so ready for review @alles-klar |
It seems that the oa3 does not log the user in automatically, is it an oversight or just something that may no longer be possible? |
What do you mean by "log in automatically"? When I browse to the swagger docs of OA3 I can execute requests without having to login or provide tokens. |
@valentijnscholten Is it intentional, that there are no prefetches for one-to-one relationships anymore, for both OpenAPI V2 and V3? They are very useful, for example when you want to get the name of a role for a product member. |
No, it's not. I noticed they weren't there in the OpenAPI v2 so didn't think I needed to make them work in OpenAPI v3 and thought maybe it was intended as we also have the |
* APIv2: Add OpenAPI v3 schema (draft) * Swagger UI schema link default to json * swagger: fix schema engagement notes read * disable doc expansion * swagger: fix schema engagement notes read * fix risk acceptance swagger spec * fix risk acceptance swagger spec * adjust unit tests to new response code * add notes and risk acceptance to spectacular * Fix product tests * support password field as writeonly * fix AppAnalysis Tag serialization * fix Finding_Template Tag serialization * fix finding request response serialization specs * fix risak acceptance spec spectacular * fix RequestResponse Seriliazer * fix risk acceptance swagger spec * more openapi3 schema check work * fix note types path * fix enums and warnings * convert swagger decorators to openapi3 * convert swagger decorators to openapi3 * backport check for unexpected fields * add openapi v3 schema validation to unit tests * add openapi v3 schema validation to unit tests * finetune api docs * fix related fields schema * fix related fields schema * implement prefetch mixin support * improve schema types user groups * cleanup * cleanup * cleanup * improive menu labels * use correct serializer for preftch response schema * fix reverse manytomany
* APIv2: Add missing methods + tests * Cleanup * Skip Notes * Bump google-auth from 1.30.2 to 1.31.0 (#4645) Bumps [google-auth](https://github.com/googleapis/google-auth-library-python) from 1.30.2 to 1.31.0. - [Release notes](https://github.com/googleapis/google-auth-library-python/releases) - [Changelog](https://github.com/googleapis/google-auth-library-python/blob/master/CHANGELOG.md) - [Commits](googleapis/google-auth-library-python@v1.30.2...v1.31.0) --- updated-dependencies: - dependency-name: google-auth dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump sqlalchemy from 1.4.17 to 1.4.18 (#4644) Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 1.4.17 to 1.4.18. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/master/CHANGES) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump python-gitlab from 2.7.1 to 2.8.0 (#4647) Bumps [python-gitlab](https://github.com/python-gitlab/python-gitlab) from 2.7.1 to 2.8.0. - [Release notes](https://github.com/python-gitlab/python-gitlab/releases) - [Changelog](https://github.com/python-gitlab/python-gitlab/blob/master/CHANGELOG.md) - [Commits](python-gitlab/python-gitlab@v2.7.1...v2.8.0) --- updated-dependencies: - dependency-name: python-gitlab dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): update dependency postcss from 8.3.0 to v8.3.2 (docs/package.json) (#4639) Co-authored-by: Renovate Bot <[email protected]> * Authorization V2: Global roles (#4520) * proof of concept * use Dojo_User instead of User * merge db migrations * rename db migration after rebase * initial commit * before tests * fixes after unit and integration tests * fixes after code review * documentation * rename db migration after rebase * global role for group after manual test * amended unit test * rename db migration after rebase * adjust unit test case after rebase * validation for global role in api * model class for global role * flake8 * api for global roles * changes for role_model * after code review * after 2nd code review * Add multiple members at once (#4625) * Fix API Swagger specs, add OpenAPI v3 (#4541) * APIv2: Add OpenAPI v3 schema (draft) * Swagger UI schema link default to json * swagger: fix schema engagement notes read * disable doc expansion * swagger: fix schema engagement notes read * fix risk acceptance swagger spec * fix risk acceptance swagger spec * adjust unit tests to new response code * add notes and risk acceptance to spectacular * Fix product tests * support password field as writeonly * fix AppAnalysis Tag serialization * fix Finding_Template Tag serialization * fix finding request response serialization specs * fix risak acceptance spec spectacular * fix RequestResponse Seriliazer * fix risk acceptance swagger spec * more openapi3 schema check work * fix note types path * fix enums and warnings * convert swagger decorators to openapi3 * convert swagger decorators to openapi3 * backport check for unexpected fields * add openapi v3 schema validation to unit tests * add openapi v3 schema validation to unit tests * finetune api docs * fix related fields schema * fix related fields schema * implement prefetch mixin support * improve schema types user groups * cleanup * cleanup * cleanup * improive menu labels * use correct serializer for preftch response schema * fix reverse manytomany * Migrate to OpenAPI3 * rerun scans Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <[email protected]> Co-authored-by: Stefan Fleckenstein <[email protected]> Co-authored-by: valentijnscholten <[email protected]>
The API is very important, but currently we get feedback that:
This PR should help to fix that:
Swagger (OpenAPIv2) fixes:
test_swagger_schema
;notes()
endpoints to have correct spec and consistent response type (instead of empty list when there are no notes);accept_risk
endpoints to have correct spec;authorized_users
in products, and forJIRA_Instance
in test data and sample data;AppAnalysis
andFinding_Template
Tag serialization;Finding
request_response serialization specs;get_duplicate_status
toget_duplicate_cluster
TagList
classSome stuff is hard to fix in Swagger/OpenAPIv2. For example the NumberInFilter (comma seperated list of integers) is not correctly specced in the Swagger (v2) schema. It's better to migrate to OpenAPI v3 instead of having to fix all this inside
django-filters
itself.The OpenAPI v3 schema generator built in to DRF doesn't work it seems, so I chose the most popular one:
drf-spectacular
(https://github.com/tfranzel/drf-spectacular)drf-spectacular
(experimental);test_swagger_schema.py
totest_rest_framework.py
;prefetch
parameter / response mechanism using adrf-spectacular
post processor. This doesn't feel as nice as the composable schema implemented for swagger in the past. On the other hand my implementation is a lot simpler and less bound to which library we are using for the schema generation. Open to suggestions / improvements in follow up PRs.Future: