[PATCH 00/17] Add OpenAPI 3.0.0 REST API spec
Daniel Axtens
dja at axtens.net
Sun Nov 11 10:39:39 AEDT 2018
Stephen Finucane <stephen at that.guru> writes:
> On Fri, 2018-11-09 at 00:13 +1100, Daniel Axtens wrote:
>> Stephen Finucane <stephen at that.guru> writes:
>>
>> > Round 2. When we first added the REST API, attempts were made to
>> > document this using OpenAPI 2.0 (f.k.a. Swagger). These floundered owing
>> > to the tediousness of writing said spec from scratch. Thankfully, tools
>> > have emerged [1][2] that allow us to generate specs from the code. The
>> > spec introduced here is based on the combined output of these tools,
>> > with some additional tweaks to work around gaps in the generated output
>> > (the embedded serializers in particular caused a lot of fuss).
>> >
>>
>> So I love the idea of generating code, because without users of the
>> generated spec it's very easy to forget to do the manual work. But,
>> you've mentioned that there is work that needs to be done on top of the
>> generated code. How far down the auto-generation path are we, and what
>> would need to be different in order to have it fully automated?
>
> I noted this in patch 17, but I plan to build on this by integrating
> schema validation into the tests and using the schema for client API
> code generation. As such, there are three more series needed to really
> complete this:
>
> * Integrate the examples generated by the "Start generating API
> examples from tests" series into the schema.
> * Generate documentation for the schema (we have no proper docs for
> the API right now).
> * Integrate openapi-core into tests so we can validate the schema
> against the actual code.
>
> I have the first two of these completed locally and the final one is in
> development (I've been side-tracked by real work and label/tag support
> but soon). There's also the client side of things but that's not a
> blocker for any of the above.
>
> Does all that make sense?
Mostly, I think. I'm keen on the validation especially. I don't object
to this going in (modulo the things we've previously identified) so you
can work on those series - if it ends up being more trouble than it's
worth we can remove it later.
Regards,
Daniel
>
>> I will have a look at the rest of the series.
>>
>> Regards,
>> Daniel
>>
>> PS. I am travelling next week and then on holiday for another week and a
>> bit, so I may either get lots done or nothing at all. Sorry!
>
> All good :) I am also gone for the next three weeks (\o/) so expect
> nothing from me until December.
>
> Stephen
>
>> > The end result is something that we can use to validate the API,
>> > validate clients and generate documentation from. To that effect, there
>> > are a couple of patches at the beginning of the series that clean up
>> > issues identified by running the tool. These should merge (and be
>> > backported) regardless of the progress on the spec itself.
>> >
>> > [1] https://www.django-rest-framework.org/api-guide/schemas/
>> > [2] https://github.com/axnsan12/drf-yasg/
>> >
>> > Stephen Finucane (17):
>> > REST: Add additional documentation
>> > REST: Show 'web_url' in embedded series responses
>> > REST: Ensure patch exists for check creation
>> > REST: Ensure submission exists for comment listing
>> > docs: Start documenting API using OpenAPI
>> > docs: Document the '/users' resource
>> > docs: Document the '/people' resource
>> > docs: Document the '/projects' resource
>> > docs: Document the '/bundles' resource
>> > docs: Document the '/covers' resource
>> > docs: Document the '/patches' resource
>> > docs: Document the '/series' resource
>> > docs: Document the '/covers/{coverID}/comments' resource
>> > docs: Document the '/patch/{patchID}/comments' resource
>> > docs: Document the '/patches/{patchID}/checks' resource
>> > docs: Document the '/events' resource
>> > docs: Make API document versioned
>> >
>> > .gitignore | 1 +
>> > docs/api/schemas/generate_schema.py | 29 +
>> > docs/api/schemas/patchwork.j2 | 2207 +++++++++++++++++
>> > patchwork/api/check.py | 16 +-
>> > patchwork/api/comment.py | 5 +
>> > patchwork/api/embedded.py | 3 +-
>> > patchwork/api/index.py | 1 +
>> > patchwork/api/patch.py | 10 +-
>> > patchwork/api/project.py | 11 +-
>> > patchwork/api/user.py | 11 +-
>> > patchwork/tests/api/test_check.py | 31 +-
>> > patchwork/tests/api/test_comment.py | 13 +
>> > .../notes/issue-224-8f1c4207aa273ac6.yaml | 5 +
>> > .../notes/issue-225-94215600c1b23f6e.yaml | 6 +
>> > .../notes/issue-226-27ea72266d3ee9ac.yaml | 7 +
>> > 15 files changed, 2349 insertions(+), 7 deletions(-)
>> > create mode 100644 docs/api/schemas/generate_schema.py
>> > create mode 100644 docs/api/schemas/patchwork.j2
>> > create mode 100644 releasenotes/notes/issue-224-8f1c4207aa273ac6.yaml
>> > create mode 100644 releasenotes/notes/issue-225-94215600c1b23f6e.yaml
>> > create mode 100644 releasenotes/notes/issue-226-27ea72266d3ee9ac.yaml
>> >
>> > --
>> > 2.17.2
>> >
>> > _______________________________________________
>> > Patchwork mailing list
>> > Patchwork at lists.ozlabs.org
>> > https://lists.ozlabs.org/listinfo/patchwork
More information about the Patchwork
mailing list