SwaggerForOcelot combines two amazing projects Swashbuckle.AspNetCore and Ocelot. Allows you to view and use swagger documentation for downstream services directly through the Ocelot project.
Direct via http://ocelotprojecturl:port/swagger
provides documentation for downstream services configured in ocelot.json
. Additionally, the addresses are modified to match the UpstreamPathTemplate
from the configuration.
- Configure SwaggerGen in your downstream services.
Follow the SwashbuckleAspNetCore documentation.
- Install Nuget package into yout ASP.NET Core Ocelot project.
dotnet add package MMLib.SwaggerForOcelot
- Configure SwaggerForOcelot in
ocelot.json
.{ "ReRoutes": [ { "DownstreamPathTemplate": "/api/{everything}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 5100 } ], "UpstreamPathTemplate": "/api/contacts/{everything}", "UpstreamHttpMethod": [ "Get" ], "SwaggerKey": "contacts" }, { "DownstreamPathTemplate": "/api/{everything}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 5200 } ], "UpstreamPathTemplate": "/api/projects/{everything}", "UpstreamHttpMethod": [ "Get" ], "SwaggerKey": "projects" } ], "SwaggerEndPoints": [ { "Key": "projects", "Name": "Projects API", "Url": "http://localhost:5200/swagger/v1/swagger.json" }, { "Key": "contacts", "Name": "Contacts API", "Url": "http://localhost:5100/swagger/v1/swagger.json" } ] }
SwaggerEndPoint
is configuration for downstream service swagger generator endpoint. PropertyKey
is used to pair with the ReRoute configuration.Name
is displayed in the combobox.Url
is downstream service swagger generator endpoint. - In the
ConfigureServices
method ofStartup.cs
, register the SwaggerForOcelot generator.services.AddSwaggerForOcelot(Configuration);
- In
Configure
method, insert theSwaggerForOcelot
middleware to expose interactive documentation.app.UseSwaggerForOcelotUI(Configuration)
- Show your microservices interactive documentation.
http://ocelotserviceurl/swagger
If you have a downstream service
hosted in the virtual directory, you probably have a DownstreamPathTemplate
starting with the name of this virtual directory /virtualdirectory/api/{everything}
. In order to properly replace the paths, it is necessary to set the property route "Virtualdirectory":"/virtualdirectory"
.
Example:
{
"DownstreamPathTemplate": "/project/api/{everything}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5100
}
],
"UpstreamPathTemplate": "/api/project/{everything}",
"UpstreamHttpMethod": [ "Get" ],
"SwaggerKey": "project",
"VirtualDirectory":"/project"
}
- Design.
- Create demo project.
- Add swagger endpoints into SwagerUI combobox.
- Create extension for adding middleware into pipeline.
- Create
SwaggerForOcelotMiddleware
and replace downstream path. - Add capability for confiuragtion SwaggerUI and configure EndpointBasePath.
- Unit tests
- Complex Ocelot configuration.
- Add
Petstore
swagger Example. - Group more reroutes with same
SwaggerKey
. - Filter
UpstreamHttpMethod
. - Query parameters.
- Aggregates.
- Add
- Documentations
- Continuous delivery
- Custom Index.html.