feat: add api versioning
This commit is contained in:
parent
a1a7d6dd96
commit
b6d3eb72fe
|
@ -1,17 +1,19 @@
|
||||||
|
using Asp.Versioning;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using OliverBooth.Data.Blog;
|
using OliverBooth.Data.Blog;
|
||||||
using OliverBooth.Data.Web;
|
using OliverBooth.Data.Web;
|
||||||
using OliverBooth.Services;
|
using OliverBooth.Services;
|
||||||
|
|
||||||
namespace OliverBooth.Controllers.Api;
|
namespace OliverBooth.Controllers.Api.v1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a controller for the blog API.
|
/// Represents a controller for the blog API.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("api/blog")]
|
[Route("api/v{version:apiVersion}/blog")]
|
||||||
[Produces("application/json")]
|
[Produces("application/json")]
|
||||||
|
[ApiVersion(1)]
|
||||||
public sealed class BlogApiController : ControllerBase
|
public sealed class BlogApiController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly IBlogPostService _blogPostService;
|
private readonly IBlogPostService _blogPostService;
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Alexinea.Extensions.Configuration.Toml" Version="7.0.0"/>
|
<PackageReference Include="Alexinea.Extensions.Configuration.Toml" Version="7.0.0"/>
|
||||||
|
<PackageReference Include="Asp.Versioning.Mvc" Version="8.0.0" />
|
||||||
<PackageReference Include="AspNetCore.ReCaptcha" Version="1.7.0"/>
|
<PackageReference Include="AspNetCore.ReCaptcha" Version="1.7.0"/>
|
||||||
<PackageReference Include="BCrypt.Net-Core" Version="1.6.0"/>
|
<PackageReference Include="BCrypt.Net-Core" Version="1.6.0"/>
|
||||||
<PackageReference Include="HtmlAgilityPack" Version="1.11.59"/>
|
<PackageReference Include="HtmlAgilityPack" Version="1.11.59"/>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using Asp.Versioning;
|
||||||
using AspNetCore.ReCaptcha;
|
using AspNetCore.ReCaptcha;
|
||||||
using Markdig;
|
using Markdig;
|
||||||
using OliverBooth.Data.Blog;
|
using OliverBooth.Data.Blog;
|
||||||
|
@ -31,6 +32,14 @@ builder.Services.AddSingleton(provider => new MarkdownPipelineBuilder()
|
||||||
.UseSmartyPants()
|
.UseSmartyPants()
|
||||||
.Build());
|
.Build());
|
||||||
|
|
||||||
|
builder.Services.AddApiVersioning(options =>
|
||||||
|
{
|
||||||
|
options.AssumeDefaultVersionWhenUnspecified = true;
|
||||||
|
options.DefaultApiVersion = new ApiVersion(1);
|
||||||
|
options.ReportApiVersions = true;
|
||||||
|
options.ApiVersionReader = new UrlSegmentApiVersionReader();
|
||||||
|
});
|
||||||
|
|
||||||
builder.Services.AddDbContextFactory<BlogContext>();
|
builder.Services.AddDbContextFactory<BlogContext>();
|
||||||
builder.Services.AddDbContextFactory<WebContext>();
|
builder.Services.AddDbContextFactory<WebContext>();
|
||||||
builder.Services.AddHttpClient();
|
builder.Services.AddHttpClient();
|
||||||
|
|
|
@ -2,7 +2,7 @@ import BlogPost from "./BlogPost";
|
||||||
import Author from "./Author";
|
import Author from "./Author";
|
||||||
|
|
||||||
class API {
|
class API {
|
||||||
private static readonly BASE_URL: string = "/api";
|
private static readonly BASE_URL: string = "/api/v1";
|
||||||
private static readonly BLOG_URL: string = "/blog";
|
private static readonly BLOG_URL: string = "/blog";
|
||||||
|
|
||||||
static async getBlogPostCount(): Promise<number> {
|
static async getBlogPostCount(): Promise<number> {
|
||||||
|
|
Loading…
Reference in New Issue