Hi Brian,

 

Have you seen our own filtering option in swagger-core?

Take a look at this sample to get an idea - 
https://github.com/swagger-api/swagger-samples/blob/master/java/java-jersey2/src/main/java/io/swagger/sample/util/ApiAuthorizationFilterImpl.java.

 

 

From: <swagger-swaggersocket@googlegroups.com> on behalf of Bryan Nelson 
<bryan.j.nel...@gmail.com>
Reply-To: "swagger-swaggersocket@googlegroups.com" 
<swagger-swaggersocket@googlegroups.com>
Date: Thursday, 23 February 2017 at 10:38
To: Swagger <swagger-swaggersocket@googlegroups.com>
Subject: Dynamic Filtering of APIs

 

Greetings, 

 

I've inherited a JAX-RS rest-based Java application that contains roughly 350 
operations.  I have a need to dynamically generate multiple subset APIs out of 
this codebase based upon certain criteria at runtime.  For example, perhaps I 
want to generate an API that contains all of the "Brand X", "Employee", and 
"User" services.  But I also want to see an API that has all of "Brand Y" and 
"User" services.  I know that this can be done using the tagging elements of 
the Java annotations, but the trouble is I would have to alter the Java code 
and hide/unhide different operations, then re-build, restart the server, etc. 
each time I wanted to see a different subset of the API.  The limitation that I 
see with Swagger-Core out of the box is that the entire swagger.json file is 
generated upon server startup / first Swagger hit (please correct me if I'm 
wrong on that). 

 

 

Now in order to meet my need I have a few ideas.  All of them involve initially 
placing all the appropriate tags on each service operation in the Java code to 
begin with.

 

UI Solution - Generate the complete API from a full swagger.json file that 
includes all operations.  Based upon some UI user inputs (perhaps checkboxes 
for "Brand X", "Brand Y", "User", etc.) parse through the full swagger.json 
file via Javascript and basically "filter out" all of the tags that aren't 
checked by the user, thus creating a subset swagger.json of only the desired 
tagged operations which can then be displayed via Swagger UI.
Post-Json-Generated Java Solution - Generate the complete API from a full 
swagger.json file that includes all operations.  Create a rest-based web 
service that takes in user inputs in the request (for "Brand X", "Brand Y", 
"User", etc.), parse through the full swagger.json file using Java (Jackson, 
Gson, etc.), and basically "filter out" all of the tags that aren't checked by 
the user, thus creating a subset swagger.json of only the desired tagged 
operations which can then be returned in the service response and used via 
whatever UI technology desired
Pre-Json-Generated Java Solution - Figure out a way to regenerate the 
swagger.json file with the application still running whenever desired, and then 
generate the partial API from a partial swagger.json file that includes only 
the desired operations based upon the tags (for "Brand X", "Brand Y", "User", 
etc.) using a Java Filter.  This could be run before the swagger.json file was 
created so only the desired subset was ever created based upon input parameters 
(e.g. the tag names).  This could potentially be created as a rest-based 
service as well.
 

I'd love some input on these solutions.  I think that #2 is desirable over #1 
because it is not coupled to any UI implementation at all and would be more 
reusable.  However, I think that, if possible, #3 would be the best way to go.  
My mine question is there even a way to accomplish #3?  Can you the 
swagger.json file be regenerated without restarting the server?

 

Also, is there a better/known way to achieve what I'm trying to do?

 

Any thoughts are very much appreciated; thanks for your time!

 

 

-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to swagger-swaggersocket+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to swagger-swaggersocket+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to