Swagger and Swagger ui for OpenRasta cooked up by JUST EAT
- Configuration
- OpenRasta Routing
- ASP.NET
- Installing and configuring Swagger UI
- Conventions
- Extensibility
- Required headers
- Alternative root paths
- Grouping
- Contributing
- Copyright
Swagger and the Swagger-UI are a nice, pretty and standardised way to express public meta-data over your RESTful API. Instead of hand-cranking documentation that rapidly gets out of date, let the code you execute document itself.
To enable OpenRastaSwagger you need to add the endpoints to your service that will provide the Swagger JSON - these can be either OpenRasta routes, or an .aspx file.
To enable the OpenRasta routes, add a couple of lines to your IConfigurationSource.
Given a configuration source that looks like this:
public class Configuration : IConfigurationSource
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType<SimpleResource>()
.AtUri("/simple/{message}")
.And.AtUri("/simple/?message={message}&pageNumber={pageNumber}")
.HandledBy<SimpleHandler>()
.AsJsonDataContract();
}
}
}
You need to use the static configuration methods provided in the package, modifying your configuration to look like this:
public class Configuration : IConfigurationSource
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
SwaggerGenerator.Configuration.AddRequiredHeader("Some-Header", "Some-Value");
SwaggerGenerator.Configuration.RegisterSwaggerHandler();
ResourceSpace.Has.ResourcesOfType<SimpleResource>()
.AtUri("/simple/{message}")
.And.AtUri("/simple/?message={message}&pageNumber={pageNumber}")
.HandledBy<SimpleHandler>()
.AsJsonDataContract();
}
}
}
Calls can also be chained:
SwaggerGenerator.Configuration
.AddRequiredHeader("Some-Default-Header-For-Swagger-UI", "Some-Value")
.RegisterSwaggerHandler();
Copy swagger.aspx from OpenRastaSwagger.SampleApi/swagger.aspx into your web application.
If you're using a custom IDependencyResolver, then set that to the SwaggerConfiguration.Resolver static property in your Application_Start.
You then need to grab the latest version of Swagger-UI from https://github.com/wordnik/swagger-ui and extract the /dist folder into your OpenRasta application into a directory in the root called "swagger-ui". Open up the default index.html and make sure the Url set in the JavaScript bootstrapping code is pointing to "/api-docs/swagger" like so:
$(function () {
window.swaggerUi = new SwaggerUi({
url: "/api-docs/swagger" //or "swagger.aspx" for aspx routing,
dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
onComplete: function(swaggerApi, swaggerUi){
if(console) {
console.log("Loaded SwaggerUI")
}
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
},
onFailure: function(data) {
if(console) {
console.log("Unable to Load SwaggerUI");
console.log(data);
}
},
docExpansion: "none"
});
For the aspx routing method, change the url to be "swagger.aspx".
At this point, visiting http://your-api.com/swagger-ui should load up an interactive set of documentation for your application.
We can only auto-discover so much from the reflected codebase, so in order to emit some swagger metadata, you need to supply hints as attributes on your OpenRasta handlers.
Usage:
OpenRastaSwagger.DocumentationSupport.NotesAttribute
- Add notes to your API docsOpenRastaSwagger.DocumentationSupport.PossibleResponseCodeAttribute
- Add status code / descriptions to the docsOpenRastaSwagger.DocumentationSupport.ResponseTypeIsAttribute
- To give the documentation a hint as to the actual DTO type returned by your handler, used when you're returning anOperationResult
OpenRastaSwagger.DocumentationSupport.InputHeaderAttribute
- Add optional or required header parameters for operationsSystem.ComponentModel.Description
- Add a summary to an operationSystem.ComponentModel.Required
- Mark a property as required in the request/response type
You can specify required headers in your IConfigurationSource
by calling
SwaggerGenerator.Configuration.AddRequiredHeader("Some-Name", "Some-Value");
You can change the uri that the swagger-ui metamodel is generated at by modifying the static property SwaggerGenerator.Configuration.Root
before calling RegisterSwagger();
Two grouping methods for your resources are provided
* GroupByUri - the default, configured by calling SwaggerGenerator.Configuration.GroupByUri();
* GroupByResource - configured by calling SwaggerGenerator.Configuration.GroupByResource();
If you find a bug, have a feature request or even want to contribute an enhancement or fix, please follow the contributing guidelines included in the repository.
Copyright 2014 Just Eat, Inc. or its affiliates. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located in the LICENSE file in this repository.
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
OpenRasta is licensed under the MIT license: http://opensource.org/licenses/MIT and compiled binaries are included in this repository for build purposes. OpenRasta is Copyright Sebastien Lambla 2007-2014.
The OpenRasta project wiki is available here: https://github.com/openrasta/openrasta/wiki