This enables Azure Functions to render Open API document and Swagger UI. The more details around the Swagger UI on Azure Functions can be found on this blog post.
NOTE: This extension supports both Open API 2.0 (aka Swagger) and Open API 3.0.1 spec.
- Swagger UI version used for this library is v3.44.0 under the Apache 2.0 license.
While using this library, if you find any issue, please raise a ticket on the Issue page.
In order for your Azure Functions app to enable Open API capability, download the following NuGet package into your Azure Functions project.
dotnet add <PROJECT> package Microsoft.Azure.WebJobs.Extensions.OpenApi
As a default, all endpoints to render Swagger UI and Open API documents have the authorisation level of AuthorizationLevel.Anonymous
.
[FunctionName(nameof(OpenApiHttpTrigger.RenderSwaggerDocument))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderSwaggerDocument(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "swagger.{extension}")] HttpRequest req,
string extension,
ILogger log)
{
...
}
[FunctionName(nameof(OpenApiHttpTrigger.RenderOpenApiDocument))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderOpenApiDocument(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "openapi/{version}.{extension}")] HttpRequest req,
string version,
string extension,
ILogger log)
{
...
}
[FunctionName(nameof(OpenApiHttpTrigger.RenderSwaggerUI))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderSwaggerUI(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "swagger/ui")] HttpRequest req,
ILogger log)
{
...
}
However, if you want to secure those endpoints, change their authorisation level to AuthorizationLevel.Functions
and pass the API Key through either request header or querystring parameter.
NOTE: To change this authorisation level, you MUST install the
Microsoft.Azure.WebJobs.Extensions.OpenApi.Core
package, instead ofMicrosoft.Azure.WebJobs.Extensions.OpenApi
, and copy those three files from the source codes to your application:
templates/OpenApiEndpoints/IOpenApiHttpTriggerContext.cs
templates/OpenApiEndpoints/OpenApiHttpTrigger.cs
templates/OpenApiEndpoints/OpenApiHttpTriggerContext.cs
[FunctionName(nameof(OpenApiHttpTrigger.RenderSwaggerDocument))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderSwaggerDocument(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = "swagger.{extension}")] HttpRequest req,
string extension,
ILogger log)
{
...
}
[FunctionName(nameof(OpenApiHttpTrigger.RenderOpenApiDocument))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderOpenApiDocument(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = "openapi/{version}.{extension}")] HttpRequest req,
string version,
string extension,
ILogger log)
{
...
}
[FunctionName(nameof(OpenApiHttpTrigger.RenderSwaggerUI))]
[OpenApiIgnore]
public static async Task<IActionResult> RenderSwaggerUI(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = "swagger/ui")] HttpRequest req,
ILogger log)
{
...
}
This key is only required if:
- The Function app is deployed to Azure, and
- The Open API related endpoints has the
AuthorizationLevel
value other thanAnonymous
.
If the above conditions are met, add the following key to your local.settings.json
or App Settings blade on Azure.
OpenApi__ApiKey
: either the host key value or the master key value.
NOTE: It is NOT required if your Open API related endpoints are set to the authorisation level of
Anonymous
.
To generate an Open API document, OpenApiInfo object needs to be defined. It's totally optional, but if you want, you can implement the IOpenApiConfigurationOptions
interface within your Azure Functions project to provide Open API metadata like below:
public class OpenApiConfigurationOptions : IOpenApiConfigurationOptions
{
public OpenApiInfo Info { get; set; } = new OpenApiInfo()
{
Version = "1.0.0",
Title = "Open API Document on Azure Functions",
Description = "HTTP APIs that run on Azure Functions using Open API specification.",
TermsOfService = new Uri("https://github.com/Azure/azure-functions-openapi-extension"),
Contact = new OpenApiContact()
{
Name = "Contoso",
Email = "[email protected]",
Url = new Uri("https://github.com/Azure/azure-functions-openapi-extension/issues"),
},
License = new OpenApiLicense()
{
Name = "MIT",
Url = new Uri("http://opensource.org/licenses/MIT"),
}
};
}