solr icon indicating copy to clipboard operation
solr copied to clipboard

Generate OpenAPI spec for v2 APIs

Open gerlowskija opened this issue 2 years ago • 0 comments

Description

OpenAPI, and its suite of surrounding tooling, has much to offer web service maintainers. An OpenAPI spec can be used to generate clients in a number of different languages, generate web UIs for exploring and sending API requests, and can even be used to detect API backcompat breakages across releases.

None of this is possible in Solr today, because we have no build-level integration with OpenAPI tooling and no way to generate an OpenAPI spec from our APIs.

Solution

This draft PR adds several gradle tasks to allow us to generate and use an OpenAPI spec:

  • ./gradlew --info :solr:core:resolve generates an OpenAPI spec
  • ./gradlew :solr:core:openApiGenerate generates a Python client to use the APIs detailed in the API spec.

In order to give the OpenAPI tooling something to generate a spec from, this PR also adds various annotations to one of our v2 APIs (NodeLoggingAPI), to tell the OpenAPI in explicit terms what the inputs and outputs of the API are. Admittedly, these annotations get a bit messy. On the bright side though, many off-the-shelf API frameworks (e.g. JAX-RS/Jersey) can tell OpenAPI this information implicitly; adopting a different API framework would smooth our adoption of OpenAPI considerably.

Tests

N/A

Checklist

Please review the following and check all that apply:

  • [x] I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • [ ] I have created a Jira issue and added the issue ID to my pull request title.
  • [x] I have given Solr maintainers access to contribute to my PR branch. (optional but recommended)
  • [x] I have developed this patch against the main branch.
  • [] I have run ./gradlew check.
  • [ ] I have added tests for my changes.
  • [ ] I have added documentation for the Reference Guide

gerlowskija avatar Aug 17 '22 18:08 gerlowskija