1.前言

前端与后端的联系更多是通过API接口对接,API文档变成了前后端开发人员联系的纽带,开始变得越来越重要,而Swagger就是一款让你更好的书写规范API文档的框架。在Ocelot Swagger项目示例中,通过APIGateway项目路由配置网关、上下游服务Swagger。对解决方案中的示例APIServiceA、APIServiceB项目Get方法进行配置,文件配置具体代码如下:

{
"Routes": [
{
//下游服务地址
"DownstreamPathTemplate": "/swagger/v1/swagger.json",
//传输协议
"DownstreamScheme": "http",
//下游主机跟端口号(数组)
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
//上游服务地址
"UpstreamPathTemplate": "/a/swagger.json",
//上游服务Http端口号(数组)
"UpstreamHttpMethod": [ "Get", "POST" ]
},
{
"DownstreamPathTemplate": "/swagger/v1/swagger.json",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9002
}
],
"UpstreamPathTemplate": "/b/swagger.json",
"UpstreamHttpMethod": [ "Get", "POST" ]
},
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
"UpstreamPathTemplate": "/a",
"UpstreamHttpMethod": [ "Get" ] },
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9002
}
],
"UpstreamPathTemplate": "/b",
"UpstreamHttpMethod": [ "Get" ] }
],
"GlobalConfiguration": {
"RequestIdKey": "OcRequestId",
"AdministrationPath": "/administration"
}
}

2.项目演示

2.1APIGateway项目

添加Ocelot、Swagger服务注入:

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:9000")
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("ocelot.json")
.AddEnvironmentVariables();
})
.ConfigureServices(s =>
{
//添加Ocelot服务;
s.AddOcelot();
s.AddMvc();
//添加Swagger服务;
s.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "GW", Version = "v1" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "APIGateway.xml");
c.IncludeXmlComments(xmlPath);
});
})
.Configure(a =>
{
//使用Swagger
a.UseSwagger().UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/a/swagger.json", "APIServiceA");
c.SwaggerEndpoint("/b/swagger.json", "APIServiceB");
}); //使用Ocelot;
a.UseOcelot().Wait();
})
.Build();

2.2APIServiceA项目

Startup添加Swagger服务注入:
ConfigureServices:

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "APIServiceA", Version = "v1" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "APIServiceA.xml");
c.IncludeXmlComments(xmlPath);
});
Configure:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "APIServiceA");
});

添加一个Get方法,对应APIGateway项目的路由上下游配置,具体代码如下:

/// <summary>
/// Values controller.
/// </summary>
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
/// <summary>
/// Get values.
/// </summary>
/// <returns>The get.</returns>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}

2.3APIServiceB项目

Startup添加Swagger服务注入:
ConfigureServices:

services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "APIServiceB", Version = "v1" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "APIServiceB.xml");
c.IncludeXmlComments(xmlPath);
});

Configure:

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

添加一个Get方法,对应APIGateway项目的路由上下游配置,具体代码如下:

/// <summary>
/// Values controller.
/// </summary>
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
/// <summary>
/// Get values.
/// </summary>
/// <returns>The get.</returns>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value3", "value4" };
}
}

2.4项目运行

注:如果想把Swagger注释警告提示取消,可以在对应项目文件.csproj的PropertyGroup节点上加入<NoWarn>$(NoWarn);1591</NoWarn>这一行代码。
输入dotnet run --project 项目路径\项目文件.csproj把三个项目启动起来,通过在浏览器分别打开APIServiceA与APIServiceB两个站点上游服务Swagger地址,会看到如下信息:
APIServiceA:

APIServiceB:

通过网关的路由配置,把Swagger集成到Ocelot中,统一入口管理,通过网关入口我们就能打开不同下游服务的Swagger。前面几个章节基本都是Ocelot入门级别的文章,之后将重点来了解下Ocelot其他重点功能模块。

(7)ASP.NET Core3.1 Ocelot Swagger的更多相关文章

  1. (1)ASP.NET Core3.1 Ocelot介绍

    1.简介 Ocelot原本设计仅为与.NET Core一起使用的,它是一个.NET API网关,作为面向使用.NET运行微型服务/面向服务的体系结构需要统一的系统入口点,即当客户端(Web站点,手机A ...

  2. (2)ASP.NET Core3.1 Ocelot路由

    1.路由 前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务.Ocelot当前仅以另一个http请求的形式支持此功能( ...

  3. (3)ASP.NET Core3.1 Ocelot认证

    1.认证 当客户端通过Ocelot访问下游服务的时候,为了保护下游资源服务器会进行认证鉴权,这时候需要在Ocelot添加认证服务.添加认证服务后,随后使用Ocelot基于声明的任何功能,例如授权或使用 ...

  4. (4)ASP.NET Core3.1 Ocelot负载均衡

    1.负载均衡 Ocelot可以在每个路由的可用下游服务中实现负载均衡,这使我们更有效地选择下游服务来处理请求.负载均衡类型:●LeastConnection:根据服务正在处理请求量的情况来决定哪个服务 ...

  5. (8)ASP.NET Core3.1 Ocelot Consul服务注册与发现

    1.服务注册与发现(Service Discovery) ●服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul.ZooKeeper.etcd.Eureka) ...

  6. (5)ASP.NET Core3.1 Ocelot服务质量

    1.服务质量(Quality of Service) 对于微服务来说,熔断就是我们常说的"保险丝",意思是当服务出现某些状况时候,通过切断服务防止应用程序不断地执行可能会失败的操作 ...

  7. (29)ASP.NET Core3.1 Swagger(OpenAPI)

    1.什么是Swagger/OpenAPI? Swagger是一个与语言无关的规范,用于描述REST API.因为Swagger项目已捐赠给OpenAPI计划,所以也叫OpenAPI.它允许计算机和人员 ...

  8. (30)ASP.NET Core3.1 集成Apollo快速安装与使用

    1.介绍 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...

  9. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

随机推荐

  1. CentOS 7操作系统目录结构介绍

    CentOS 7操作系统目录结构介绍 操作系统存在着大量的数据文件信息,相应文件信息会存在于系统相应目录中,为了更好的管理数据信息,会将系统进行一些目录规划,不同目录存放不同的资源. 根下目录结构说明 ...

  2. golang xpath解析网页

    https://github.com/antchfx/htmlquery package main import ( "fmt" "github.com/antchfx/ ...

  3. centos8上使用gitosis管理git项目

    零,centos8平台如何安装gitosis服务? 参见:centos8平台安装gitosis服务 地址:https://www.cnblogs.com/architectforest/p/12456 ...

  4. [开源] .Net ORM FreeSql 1.10.0 稳步向行

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...

  5. hdu6115 Factory (LCA + 倍增)

    Factory Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total ...

  6. 创建Sqlite数据库(一)

    对这方面的掌握不牢,慢慢深入吧,先执行一个sqlite语句,只会简单的.输出"创建"证明创建成功 public class MainActivity extends AppComp ...

  7. vue 路由知识点(一级路由与二级路由嵌套)

    本人小白一个,如果问题,麻烦大神指点, 一级路由: path:'/' 默认为显示; 二级路由: path: '',默认显示为index组件,因为二级路有没有写index组件,所以使用redirect: ...

  8. B. GameGame 解析(思維、博弈)

    Codeforce 1383 B. GameGame 解析(思維.博弈) 今天我們來看看CF1383B 題目連結 題目 兩個人在玩遊戲,有一個長度為\(n\)的數列\(a\),每次每個人選一個數字和目 ...

  9. python装饰器是什么?

    装饰器是python中的高阶语法,装饰器是通过类或者函数来实现的,通常使用@符号来表示一个装饰器,作用是用来扩展某个函数或者类的功能

  10. Java学习的第三十三天

    1.今天复习了第十二章的12.1的文件和12.2一直到12.2.4 2.没有问题 3.明天继续复习