separate swagger UI URLs for ASPNETCORE 1.1 - swagger

We have a .NET core 1.1 webapi project. We have two controller files and I've been able to generate separate swagger JSON files for each controller by decorating methods with GroupName.
When I browser the swagger UI (/swagger) I see that it has a drop down on top right corner that allows us to select the group.
Our requirement is to have a separate URL itself for swagger UI (not just JSON file) so that we can send a URL dedicated to a controller to our customers that doesn't confuse them. Is there a way to tell swashbuckle/swagger UI to use a specific URL for given JSON file/group name?
I tried checking if there's any query string parameter that swagger UI uses on change of dropdown but unfortunately it uses referer http header...

Yes swagger-ui has the url param that does exactly that.
Here are a few examples:
http://petstore.swagger.io/?url=http://heldersepu.github.io/hs-scripts/swagger/4134_swagger.json
http://offleaseonly.azurewebsites.net/swagger/ui/index?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/People.openapi3.json
http://swagger-net-test.azurewebsites.net/swagger/ui/index?url=http://heldersepu.github.io/hs-scripts/swagger/DiegoGuidi.json

Related

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

How to use own swagger-ui with Liberty JSON generated content

There is an internal Liberty swagger-ui and it is working fine for me, but actually we need to make our own swagger layout, I mean putting our logo and our company name ... etc.
This is what we get when calling https://localhost:9443/ibm/api/docs with basic swagger-ui
But when we use the browser url and paste https://localhost:9443/ibm/api/docs we got the json content for our services
This is how it working with ibm liberty swagger-ui
And this how we need to show it to our clients
Currently there's no way to alter the "look & feel" of the built-in Liberty Swagger UI, but there is a Request For Enhancement that you can vote for: https://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=87860
If you want to have your own Swagger UI totally independent of Liberty's UI, you can still pull from /ibm/api/docs like your first screenshot showed - the only thing you're missing is to setup CORS support on that Liberty instance, so that your custom Swagger UI is allowed to call it.
Here's the doc for setting up CORS in Liberty: https://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_webcontainer_cors_config.html?cp=SSEQTP_8.5.5%2F1-8-1-1-21-1
Main sample from the link:
<cors domain="/ibm/api/collective"
allowedOrigins="https://alice.com:8090"
allowedMethods="GET, DELETE, POST"
allowedHeaders="accept, MyRequestHeader1"
exposeHeaders="MyResponseHeader1"
allowCredentials="true"
maxAge="3600" />

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

Should swagger UI be a different application

I am currently battling a swagger configuration for my spring MVC RESTful services project. I decided to follow the swagger-spring but I fail to understand if the UI part of swagger should be a totally different project or should it reside in the same context on the container?
The swagger json from my spring mvc based RESTFul services is showing up correctly on a link like: http://<server>:<port>/<context>/api-docs but whenever I put in the swagger UI components in the application(JSP, CSS and JS files), I cannot access the swagger UI, which should look like this.
You need to update index.html that came with swagger-ui. Update below line to your webapp URL.
url: "http://petstore.swagger.wordnik.com/api/api-docs",

Resources