From 583b81d087ec22fe6ff9c80f0cbf723beccb0456 Mon Sep 17 00:00:00 2001 From: Adrien Beaudouin Date: Mon, 28 Aug 2023 23:00:43 +0200 Subject: [PATCH] k8s --- .../index.md | 41 +- .../frontend.png | Bin 0 -> 94775 bytes .../index.md | 520 +++++++++++++++++- 3 files changed, 553 insertions(+), 8 deletions(-) create mode 100644 content/posts/18-build-your-own-kubernetes-cluster-part-9/frontend.png diff --git a/content/posts/17-build-your-own-kubernetes-cluster-part-8/index.md b/content/posts/17-build-your-own-kubernetes-cluster-part-8/index.md index 07dcb3f..cd80100 100644 --- a/content/posts/17-build-your-own-kubernetes-cluster-part-8/index.md +++ b/content/posts/17-build-your-own-kubernetes-cluster-part-8/index.md @@ -494,27 +494,28 @@ public class ArticlesController } [HttpGet(Name = "GetArticles")] - public ArticlesResponse Get([FromQuery] int page = 1, [FromQuery] int size = 10) + public async Task Get([FromQuery] int page = 1, [FromQuery] int size = 10) { - var articles = _context.Articles + var articles = await _context.Articles .OrderByDescending(a => a.Id) .Skip((page - 1) * size) .Take(size) - .ProjectToType(); + .ProjectToType() + .ToListAsync(); - var articlesCount = _context.Articles.Count(); + var articlesCount = await _context.Articles.CountAsync(); return new ArticlesResponse(articles, articlesCount); } [HttpGet("{slug}", Name = "GetArticleBySlug")] - public ActionResult GetBySlug(string slug) + public async Task> GetBySlug(string slug) { - var article = _context.Articles + var article = await _context.Articles .Include(a => a.Author) .Include(a => a.Comments.OrderByDescending(c => c.Id)) .ThenInclude(c => c.Author) - .FirstOrDefault(a => a.Slug == slug); + .FirstOrDefaultAsync(a => a.Slug == slug); if (article is null) { @@ -812,6 +813,31 @@ public class ArticlesController { {{< /highlight >}} +Let's move Swagger UI under `/api` path too: + +{{< highlight host="kuberocks-demo" file="src/KubeRocks.WebApi/Program.cs" >}} + +```cs +//... + +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(c => + { + c.RouteTemplate = "/api/{documentName}/swagger.json"; + }); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("v1/swagger.json", "KubeRocks v1"); + c.RoutePrefix = "api"; + }); +} + +//... +``` + +{{< /highlight >}} + {{< alert >}} You may use ASP.NET API versioning, which work the same way with [versioning URL path](https://github.com/dotnet/aspnet-api-versioning/wiki/Versioning-via-the-URL-Path). {{< /alert >}} @@ -821,6 +847,7 @@ All is left is to include only the endpoints under `/api` prefix on Traefik Ingr {{< highlight host="demo-kube-flux" file="clusters/demo/kuberocks/deploy-demo.yaml" >}} ```yaml +#... apiVersion: traefik.io/v1alpha1 kind: IngressRoute #... diff --git a/content/posts/18-build-your-own-kubernetes-cluster-part-9/frontend.png b/content/posts/18-build-your-own-kubernetes-cluster-part-9/frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..0a875efdadcf38269ab86c872f671cd2ae1866f9 GIT binary patch literal 94775 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