.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。

前言

上一篇【.Net Core微服务入门全纪录(八)——Docker Compose与容器网络】完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指令即可在docker中运行整个庞大的环境。本篇简朴先容一下Ocelot与Swagger的集成,利便在网关项目中统一查看各个服务的api文档。

最先

首先,网关项目,服务项目 NuGet安装Swashbuckle.AspNetCore

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

服务项目

Order.API项目Startup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Order API", Version = "v1", Description = "# order service api..." });
        // Set the comments path for the Swagger JSON and UI.
        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
        c.IncludeXmlComments(xmlPath);
        c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
        {
            Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",
            Name = "Authorization",
            In = ParameterLocation.Header,
            Type = SecuritySchemeType.ApiKey,
            BearerFormat = "JWT",
            Scheme = "Bearer"
        });

        c.AddSecurityRequirement(new OpenApiSecurityRequirement
        {
            {
                new OpenApiSecurityScheme{
                    Reference = new OpenApiReference {
                        Type = ReferenceType.SecurityScheme,
                        Id = "Bearer"}
                },new string[] { }
            }
        });
    });

    services.AddControllers();

    ......
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime, OrderContext orderContext)
{
    ......

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Order API V1");
    });

    app.UseRouting();

    ......
}

打开项目文件Order.API.csproj,添加天生文档的设置,swagger要用到:

<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

Product.API项目也是类似的修改,就不贴了。

网关项目

然后是Ocelot网关项目的Startup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1",
            new OpenApiInfo {Title = "Gateway API", Version = "v1", Description = "# gateway api..."});
    });

    services.AddControllers();

    ......
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/order/swagger/v1/swagger.json", "Order API V1");
        c.SwaggerEndpoint("/product/swagger/v1/swagger.json", "Product API V1");
    });

    //设置Ocelot中间件
    app.UseOcelot().Wait();
}

ocelot.json设置文件,Routes节点下增添2个路由设置,不做授权,限流,熔断等限制:

{
  "DownstreamPathTemplate": "/swagger/v1/swagger.json",
  "DownstreamScheme": "http",
  "UpstreamPathTemplate": "/product/swagger/v1/swagger.json",
  "UpstreamHttpMethod": [ "Get" ],
  "ServiceName": "ProductService",
  "LoadBalancerOptions": {
    "Type": "RoundRobin"
  }
},
{
  "DownstreamPathTemplate": "/swagger/v1/swagger.json",
  "DownstreamScheme": "http",
  "UpstreamPathTemplate": "/order/swagger/v1/swagger.json",
  "UpstreamHttpMethod": [ "Get" ],
  "ServiceName": "OrderService",
  "LoadBalancerOptions": {
    "Type": "RoundRobin"
  }
}

运行测试

使用docker-compose build:

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

build完成后启动:

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

[译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01

浏览器接见网关项目:http://localhost:9070/swagger

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

接口测试:

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

此时由于没有授权以是返回401,为了利便获取token,我在IDS4.AuthCenter项目增添了一个客户端设置:

new Client
{
    ClientId = "postman client",
    ClientName = "Postman Client",

    AllowedGrantTypes = GrantTypes.ClientCredentials,
    ClientSecrets = { new Secret("postman client secret".Sha256()) },

    AllowedScopes = new [] {"orderApiScope", "productApiScope"},
}

使用postman获取token:

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

拿到token填入文本框,花样是Bearer xxxxxx,注重空格。这里的提醒文字乱码了,应该是在docker中运行的缘故原由,这个不影响先不管他。

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

填入token后再次请求接口,就可以正常返回了:

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

至此,Ocelot与Swagger的集成就完成了。本篇内容比较简朴,swagger应该大部分人都用过。

最后

这个系列博客就到此结束了,原本也就是入门级其余。再往后可能就是更深入的服务治理,好比日志、监控、链路追踪等;服务的连续集成、连续部署;容器编排(k8s);服务网格(Service Mesh)等等。。。这些都不属于入门的范围了。

固然,不是每个公司都适合k8s,也不是每个项目都要做微服务。为了盲目推许某个手艺而去使用它时,它便失去了原本的价值。手艺本不分崎岖,适合自己的就是最好的。谢谢关注我的小伙伴们。。。

原创文章,作者:870t新闻网,如若转载,请注明出处:https://www.870t.com/archives/22786.html