Skip to content

Commit bced4a5

Browse files
committed
Api versioning improvements
1 parent 55a7baa commit bced4a5

File tree

35 files changed

+338
-204
lines changed

35 files changed

+338
-204
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public partial class GreetingWebApiEndpoint
3030
- [x] [Easy setup](#easy-setup)
3131
- [x] Full support and built on top of [minimal apis](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0)
3232
- [x] Full support for OpenApi
33-
- [x] Api Versioning baked-in
33+
- [x] Full support for Api Versioning
3434
- [x] Full support for [TypedResults](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-7.0)
3535
- [x] Support for configuring
3636
- [x] [Futurum.WebApiEndpoint.Micro](#configuring-futurumwebapiendpointmicro)
@@ -266,10 +266,11 @@ The class must:
266266

267267
#### Example
268268
```csharp
269-
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V3_0.Major, WebApiEndpointVersions.V3_0.Minor)]
270-
public class WebApiVersionEndpoint3_0 : IWebApiVersionEndpoint
269+
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V3_0.Number)]
270+
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V1_20_Beta.Text)]
271+
public class WebApiVersionEndpoint3_0a : IWebApiVersionEndpoint
271272
{
272-
public IEndpointRouteBuilder Configure(IEndpointRouteBuilder builder, WebApiEndpointConfiguration configuration)
273+
public RouteGroupBuilder Configure(IEndpointRouteBuilder builder, WebApiEndpointConfiguration configuration)
273274
{
274275
return builder.MapGroup("test-api").RequireAuthorization(Authorization.Permission.Admin);
275276
}

sample/Futurum.WebApiEndpoint.Micro.Sample.Addition/AdditionWebApiEndpoint.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Futurum.WebApiEndpoint.Micro.Sample.Addition;
44

55
[WebApiEndpoint("addition")]
6+
[WebApiEndpointVersion(2.0d)]
67
public partial class AdditionWebApiEndpoint
78
{
89
protected override void Build(IEndpointRouteBuilder builder)

sample/Futurum.WebApiEndpoint.Micro.Sample/GlobalWebApiEndpoint.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using Futurum.WebApiEndpoint.Micro.Sample.Security;
2-
31
namespace Futurum.WebApiEndpoint.Micro.Sample;
42

53
public class GlobalWebApiEndpoint : IGlobalWebApiEndpoint

sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV0WebApiEndpoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Futurum.WebApiEndpoint.Micro.Sample.OpenApi;
44

55
[WebApiEndpoint("openapi")]
6-
[WebApiEndpointVersion(WebApiEndpointVersions.V0_1.Major, WebApiEndpointVersions.V0_1.Minor)]
6+
[WebApiEndpointVersion(WebApiEndpointVersions.V0_1.Number)]
77
public partial class OpenApiVersionV0WebApiEndpoint
88
{
99
protected override void Build(IEndpointRouteBuilder builder)

sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV1WebApiEndpoint.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace Futurum.WebApiEndpoint.Micro.Sample.OpenApi;
44

55
[WebApiEndpoint("openapi")]
6-
[WebApiEndpointVersion(WebApiEndpointVersions.V1_0.Major, WebApiEndpointVersions.V1_0.Minor)]
7-
[WebApiEndpointVersion(WebApiEndpointVersions.V3_0.Major, WebApiEndpointVersions.V3_0.Minor)]
6+
[WebApiEndpointVersion(WebApiEndpointVersions.V1_0.Number)]
7+
[WebApiEndpointVersion(WebApiEndpointVersions.V3_0.Number)]
8+
[WebApiEndpointVersion(WebApiEndpointVersions.V4_0_Alpha.Number, WebApiEndpointVersions.V4_0_Alpha.Status)]
9+
[WebApiEndpointVersion(WebApiEndpointVersions.V1_20_Beta.Text)]
810
public partial class OpenApiVersionV1WebApiEndpoint
911
{
1012
protected override void Build(IEndpointRouteBuilder builder)

sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV2WebApiEndpoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Futurum.WebApiEndpoint.Micro.Sample.OpenApi;
44

55
[WebApiEndpoint("openapi")]
6-
[WebApiEndpointVersion(WebApiEndpointVersions.V2_0.Major, WebApiEndpointVersions.V2_0.Minor)]
6+
[WebApiEndpointVersion(WebApiEndpointVersions.V2_0.Number)]
77
public partial class OpenApiVersionV2WebApiEndpoint
88
{
99
protected override void Build(IEndpointRouteBuilder builder)

sample/Futurum.WebApiEndpoint.Micro.Sample/RateLimiting.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Net;
21
using System.Threading.RateLimiting;
32

43
using Microsoft.AspNetCore.RateLimiting;
Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,43 @@
1+
using Futurum.WebApiEndpoint.Micro.Generator;
2+
13
namespace Futurum.WebApiEndpoint.Micro.Sample;
24

35
public static class WebApiEndpointVersions
46
{
57
public static class V0_1
68
{
7-
public const int Major = 0;
8-
public const int Minor = 1;
9-
public static readonly WebApiEndpointVersion Version = new(Major, Minor);
9+
public const double Number = 0.1d;
10+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointNumberApiVersion(Number));
1011
}
1112

1213
public static class V1_0
1314
{
14-
public const int Major = 1;
15-
public const int Minor = 0;
16-
public static readonly WebApiEndpointVersion Version = new(Major, Minor);
15+
public const double Number = 1.0d;
16+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointNumberApiVersion(Number));
1717
}
1818

1919
public static class V2_0
2020
{
21-
public const int Major = 2;
22-
public const int Minor = 0;
23-
public static readonly WebApiEndpointVersion Version = new(Major, Minor);
21+
public const double Number = 2.0d;
22+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointNumberApiVersion(Number));
2423
}
2524

2625
public static class V3_0
2726
{
28-
public const int Major = 3;
29-
public const int Minor = 0;
30-
public static readonly WebApiEndpointVersion Version = new(Major, Minor);
27+
public const double Number = 3.0d;
28+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointNumberApiVersion(Number));
29+
}
30+
31+
public static class V4_0_Alpha
32+
{
33+
public const double Number = 4.0d;
34+
public const string Status = "alpha";
35+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointNumberApiVersion(Number, Status));
36+
}
37+
38+
public static class V1_20_Beta
39+
{
40+
public const string Text = "1.20-beta";
41+
public static readonly WebApiEndpointVersion Version = new(new WebApiEndpointApiVersion.WebApiEndpointStringApiVersion(Text));
3142
}
3243
}

sample/Futurum.WebApiEndpoint.Micro.Sample/WebApiVersionEndpoint3_0.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
namespace Futurum.WebApiEndpoint.Micro.Sample;
44

5-
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V3_0.Major, WebApiEndpointVersions.V3_0.Minor)]
5+
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V3_0.Number)]
6+
[WebApiVersionEndpointVersion(WebApiEndpointVersions.V1_20_Beta.Text)]
67
public class WebApiVersionEndpoint3_0a : IWebApiVersionEndpoint
78
{
89
public RouteGroupBuilder Configure(IEndpointRouteBuilder builder, WebApiEndpointConfiguration configuration)

src/Futurum.WebApiEndpoint.Micro.Generator/DiagnosticDescriptors.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static class DiagnosticDescriptors
3434
public static readonly DiagnosticDescriptor WebApiVersionEndpointMultipleInstances = new(
3535
"FWAEM0004",
3636
"Multiple instances found of WebApiVersionEndpoint for the same version",
37-
$"WebApiVersionEndpoint class '{{0}}' with version '{{1}}.{{2}}' is one of many instances.\n" +
37+
$"WebApiVersionEndpoint class '{{0}}' with version '{{1}}' is one of many instances.\n" +
3838
$"There can only be one instance of WebApiVersionEndpoint.",
3939
"Futurum.WebApiEndpoint.Micro.Generator",
4040
DiagnosticSeverity.Error,

0 commit comments

Comments
 (0)