How can I get Swashbuckle to produce one Swagger Schema per path? - swagger

Is it possible to get Swashbuckle to produce a separate Swagger Schema per WebAPI Action (path)? I can only get a a single combined schema for all actions within the project (or permanently exclude endpoints)?
Otherwise, are there tools that can produce split my combined schema into separate schemas per path?
I've looked through the docs and swagger tooling but can't see anything that can help, only to generate code artifacts for a path from the JSON Schema.
Thanks

SwashBuckle work on all controllers of a given Web API project.
2 ways to achieve this would be to:
have one Web API project per needed Swagger schema; simple but requires multiple projects with potentially common references to objects.
"cheat" by using its versioning capabilities, making versions become you silo logic (v1 & v2 could become then path1 & path2).

Related

Export list of API Paths from OpenAPI spec using swagger ui

I have a bunch of APIs that are documented as OpenAPI v3 specs.
Eg: foo.yaml, bar.yaml and baz.yaml
I also have a Web server that displays the specs in the swagger ui, so all my swagger models are easily consumable by devs, designers and so on.
My question: is there an easy way, using the javascript console, to give me a list of the resource paths?
I've had a quick look around the swagger ui source code but couldn't find anything useful, other than the SwaggerUIBundle object.
The API definition is accessible via ui.specSelectors.specJson(). The value is an Immutable.js Map.
You can use the following code to list all the paths:
let paths = ui.specSelectors.specJson().get("paths")
paths.mapKeys(key => console.log(key))

Integrate the swagger ui into hammock

I am building up a CDI/REST Environment as basis for several projects by using hammock. What I would like to have besides CDI and REST is also json schema for generating payload classes and an automatically generated REST API documentation via swagger ui.
I am now at the point where everything works (Weld3, Resteasy, Undertow, Swagger Core, Json Schema). The only thing missing is the integration of swagger UI into my hammock stack.
In another project I already worked with swagger UI. As far as I know it is based on HTML + JS with an entry point index.hml. How do I integrate this into my hammock stack. How to tell the undertow that there is a index.html and where to find it ?
I think my question is not only related to swagger, but to the idea to have the hammock stack with additional static html content.
John Ament has added a swagger module for Swagger 2.0-rc3 to Hammock 2.1-SNAPHOT (will be released as part of Hammock 2.1):
https://github.com/hammock-project/hammock/tree/master/swagger
As for hosting Swagger UI inside a Hammock app, you can add a few files from swagger-ui/dist/* to Hammock's static resources path:
https://github.com/hammock-project/hammock/wiki/Native-Filters#static-resources

oData client limit classes

I am currently testing oData client in combination with Dynamics AX 7. The metadata file coming from AX is over 900'000 lines big and if i use the default oData client and auto generate a C# class file it won't build because of too many string literals (.net error).
Now i'm looking for a way to tell the client generator which classes to generate (by entity name for example) and which not (about 95% isn't needed on the client-side).
Sadly limiting the metadata on AX side is not an option.
We had a similar issue, where we had to modify the available $metadata information from an ODATA service.
In our case we used the DataServiceContext generator and pointed to the original server URI but used Fiddler as a Proxy inbetween. By using a breakpoint in Fiddler we could serve our modifed $metadata xml to the DataServiceContext generator in Visual Studio. Works fine when you used sparingly and if the API is stable.
Yes using VS2015 will solve your "too many strings" error, but you will still have a problem where Visual Studio 2015 will crash if you open the huge file that is generated or accidentally step into the oData client file while debugging.
To get around this issue, I edited the T4 templates which auto-generate the oData client classes so that they create multiple files, so you do not end up with one huge 1 million+ line file. Using the updated T4 templates, it will generate the same code, but will split into a new file every 5MB.
The updated T4 templates can be found here:
https://github.com/batetech/D365FO-oData-T4-MultiFile-Templates

Showing Swagger UI for API in a different project (Swashbuckle)

We have a .NET solution with 2 projects:
ASP.NET MVC Portal project
OWIN Host API project (with custom
controller selector)
We are trying to expose a public documentation to a few API controllers in the OWIN-based API project
We would like to show the Swagger UI from the Portal project for controllers in the API project
So far, all attempts have not been successful. When adding Swagger UI to the Portal project, it only wants to show documentation about controllers in the Portal project, not from the API project.
When adding Swagger UI to the API project (not preferred solution), it doesn't work at all, probably because of the custom controller selector
However, I think I'm missing something obvious as this feels like a very basic configuration setting that we're missing
Swagger UI is only a set a static file rendering OpenAPI (fka. Swagger) Specification files. These specification files can be produced by an application or simply manually written.
You could modify the original Swagger UI to create your own version and replace the URL field (on top near the Authorize button) by a drop list pointing to your 2 different applications producing OpenAPI (fka. Swagger) specification.

Programmatically append Swagger operations to generated JSON

I have a Dropwizard application with Swagger annotated Java resource classes. I'm also creating programatic REST resources which, of course, don't end up in the generated Swagger JSON. Is it possible to programmatically add operations via the Java Swagger API such that they end up in the generated JSON along with the annotated resources?
I tried using DefaultJaxrsApiReader.appendOperation but it had no effect.
I'm using com.wordnik:swagger-jaxrs_2.10:1.3.12
EDIT
I ended up just writing a Servlet filter to update the Swagger JSON response. It would be great to get #fehguy's suggestions working somehow. I think that swagger-jaxrs_2.10:1.3.12 isn't new enough to support those POJOs.
as of swagger-core-1.5.1-M1, you can build a swagger POJO which simply needs to be returned by your web application. That means, you can programmatically create the Swagger object and serve it up as JSON from your web service.
For examples of how to build a swagger pojo you can look at the source or an example (test) of building one.
You can also mutate the generated swagger object in your application. That means you can dynamically generate / modify swagger at runtime. There is an example in the swagger-codegen project, where the online code generator (swagger-generator) will detect what languages are enabled in the code generation logic via SPI, and update the swagger spec accordingly with the options:
https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-generator/src/main/java/com/wordnik/swagger/generator/DynamicSwaggerConfig.java

Resources