This repository produces generated API Clients in various languages and frameworks for use by Customers and other projects.
Language / Framework | Sonatype Nexus Repository Version Added | Public Package Link |
---|---|---|
Golang / Go | 3.67.0 | |
Java (Webclient) | 3.68.1 | |
Typescript (fetch) | 3.68.0 |
There are a number of known issues and changes required to the official OpenAPI spec to generate useful client libraries.
These are all codified in update-spec.py
which can be used to obtain the latest OpenAPI Specification from a running
Sonatype IQ Server, apply the required modifications and transform from JSON to YAML - outputting the result
to spec/openapi.yml
.
See update-spec.py
for amendments made to the Specification prior to client generation.
Get it from your Sonatype Nexus Repository Server at /service/rest/swagger.json
.
docker run --rm -v "$(PWD):/local" openapitools/openapi-generator-cli batch --clean /local/typescript.yaml
docker run --rm -v "$(PWD):/local" openapitools/openapi-generator-cli generate -i /local/spec/openapi.yaml -g typescript-fetch -o /local/out/test -c /local/openapi-config.yaml -v > out.log
In the rare event that Sonatype Nexus Repository Server provides a response that does not validate against the schema (our patched schema to be clear), things can be silent - you just never get a response in your code.
Through the use of Postman and opeapi-request-response-validation project by Beppe Catanese, we can quickly and accurately see where response validation failures occur.
-
Configure the request for which you are not getting a response in Postman exactly as it was sent
-
To that request (you can do this in a Collection if you are using Collections too), add a Test with the code:
// define object openapiRequestResponseValidation = { // define function validate: function(pm) { const postRequest = { url: 'http://localhost:8080/validate', method: 'POST', header: {'Content-Type': 'application/json'}, body: { mode: 'raw', raw: JSON.stringify({ method: pm.request.method, path: pm.request.url.getPath(), headers: pm.request.headers, requestAsJson: (pm.request.body != "") ? pm.request.body.raw : null, responseAsJson: pm.response.text(), statusCode: pm.response.code }) } }; pm.sendRequest(postRequest, (error, response) => { if(error != undefined) { pm.expect.fail('Unexpected error ' + error); } else { var data = response.json(); if(data.valid == false) { console.log(data.errors); } pm.test("OpenAPI validation", () => { pm.expect(data.valid, "Invalid request/response (check Console)").to.equal(true); }); } }); } }; // invoke function openapiRequestResponseValidation.validate(pm);
-
Start the
openapi-request-response-validation
Container locally:docker run -p 8080:8080 -v ./spec:/openapi -it --rm gcatanese/openapi-request-response-validation
-
Execute the request in Postman - if the test does not show as passed then you can get details of the failure from two places:
- The Postman console
- The logs from the running Container
See our Change Log.
We aim to keep the MAJOR and MINOR version component in-line with the version of Sonatype Nexus Repository Manager for which the API Client is
generated - i.e. 3.67.x
are all releases generated for the API specification as shipped with Sonatype Nexus Repository Manager version 3.67.x
.
For example, to perform a "patch" release, add a commit to main
with a comment like below. The fix:
prefix matters.
fix: the problem resolved goes here
Remember:
It is worth noting that this is NOT SUPPORTED by Sonatype, and is a contribution of ours to the open source community (read: you!)
- Use this contribution at the risk tolerance that you have
- Do NOT file Sonatype support tickets related to
nexus-repo-api-client
- DO file issues here on GitHub, so that the community can pitch in
Phew, that was easier than I thought. Last but not least of all - have fun!