Target Framework: net9.0
Advanced REST API features extending Atc.Rest with API versioning, FluentValidation, Swagger/OpenAPI documentation, and JWT authentication. This library builds on the foundation of Atc.Rest to provide enterprise-ready API capabilities.
Atc.Rest.Extended adds production-ready features on top of Atc.Rest, providing everything needed for modern, versioned, and well-documented APIs. Instead of manually configuring multiple libraries, Atc.Rest.Extended provides:
- API Versioning: Built-in support for versioning your REST APIs
- FluentValidation: Advanced validation beyond data annotations
- Swagger/OpenAPI: Automatic API documentation with SwaggerUI
- JWT Authentication: Integrated JWT bearer token authentication
- Extended Configuration: All Atc.Rest features plus advanced options
Perfect for:
- Enterprise APIs requiring versioning
- APIs needing comprehensive request validation
- Public APIs requiring OpenAPI/Swagger documentation
- Microservices with JWT authentication
- Teams adopting API-first development
dotnet add package Atc.Rest.Extended- .NET 9.0
- API versioning with Asp.Versioning
- FluentValidation for complex validation rules
- Swagger/OpenAPI specification generation
- SwaggerUI for interactive API documentation
- JWT Bearer authentication support
- All features from Atc.Rest
- Atc.Rest (base library)
- Asp.Versioning.Mvc.ApiExplorer
- FluentValidation.AspNetCore
- Swashbuckle.AspNetCore
- Microsoft.AspNetCore.Authentication.JwtBearer
- Microsoft.ApplicationInsights.AspNetCore
Example with a minimal setup in the Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
restApiOptions = new RestApiOptions
restApiOptions.AddAssemblyPairs(
Assembly.GetAssembly(typeof(ApiRegistration)),
Assembly.GetAssembly(typeof(DomainRegistration)));
}
public IConfiguration Configuration { get; }
private readonly RestApiOptions restApiOptions;
public void ConfigureServices(IServiceCollection services)
{
services.AddRestApi<Startup>(restApiOptions);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.ConfigureRestApi(env, restApiOptions);
}
}Example with specified features in the Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
restApiOptions = new RestApiExtendedOptions
{
// Base
AllowAnonymousAccessForDevelopment = true,
UseApplicationInsights = true,
UseAutoRegistrateServices = true,
UseValidateServiceRegistrations = true,
UseEnumAsStringInSerialization = true,
UseHttpContextAccessor = true,
ErrorHandlingExceptionFilter = new RestApiOptionsErrorHandlingExceptionFilter
{
Enable = true,
UseProblemDetailsAsResponseBody = true,
IncludeExceptionDetails = true,
},
UseRequireHttpsPermanent = true,
UseJsonSerializerOptionsIgnoreNullValues = true,
JsonSerializerCasingStyle = CasingStyle.CamelCase,
// Extended
UseApiVersioning = true,
UseFluentValidation = true,
UseOpenApiSpec = true,
};
restApiOptions.AddAssemblyPairs(
Assembly.GetAssembly(typeof(ApiRegistration)),
Assembly.GetAssembly(typeof(DomainRegistration)));
}
public IConfiguration Configuration { get; }
private readonly RestApiExtendedOptions restApiOptions;
public void ConfigureServices(IServiceCollection services)
{
if (!restApiOptions.UseAutoRegistrateServices)
{
// Manual ConfigureServices
services.ConfigureServices();
}
services.ConfigureOptions<ConfigureSwaggerOptions>();
services.AddRestApi<Startup>(restApiOptions, Configuration);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.ConfigureRestApi(env, restApiOptions);
}
}Contributions are welcome! Please see the main repository README for contribution guidelines.