java 单机接口限流处理方案
492
2022-06-07
1、前言
为什么我们要隐藏部分接口?
因为我们在用swagger代替接口的时候,难免有些接口会直观的暴露出来,比如我们结合Consul一起使用的时候,会将健康检查接口以及报警通知接口暴露出来,这些接口有时候会出于方便考虑,没有进行加密,这个时候我们就需要把接口隐藏起来,只有内部的开发者知道。
为什么要分组?
通常当我们写前后端分离的项目的时候,难免会遇到编写很多接口供前端页面进行调用,当接口达到几百个的时候就需要区分哪些是框架接口,哪些是业务接口,这时候给swaggerUI的接口分组是个不错的选择。
swagger的基本使用这里将不再赘述,可以阅读微软官方文档,即可基本使用
2、swaggerUI中加入授权请求
新建HttpHeaderOperationFilter操作过滤器,继承Swashbuckle.AspNetCore.SwaggerGen.IOperationFilter接口,实现Apply方法
///
然后修改Startup.cs中的ConfigureServices方法,添加我们自定义的HttpHeaderOperationFilter过滤器
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
...
c.OperationFilter
这时候我们再访问swaggerUI就可以输入Token了
3、API分组
修改Startup.cs中的ConfigureServices方法,添加多个swagger文档
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "接口文档",
Description = "接口文档-基础",
TermsOfService = "",
Contact = new Contact
{
Name = "XXX1111",
Email = "XXX1111@qq.com",
Url = ""
}
});
c.SwaggerDoc("v2", new Info
{
Version = "v2",
Title = "接口文档",
Description = "接口文档-基础",
TermsOfService = "",
Contact = new Contact
{
Name = "XXX2222",
Email = "XXX2222@qq.com",
Url = ""
}
});
//反射注入全部程序集说明
GetAllAssemblies().Where(t => t.CodeBase.EndsWith("Controller.dll")).ToList().ForEach(assembly =>
{
c.IncludeXmlComments(assembly.CodeBase.Replace(".dll", ".xml"));
});
c.OperationFilter
修改Startup.cs中的Configure方法,加入
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { ... app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v2/swagger.json", "接口文档-基础");//业务接口文档首先显示 c.SwaggerEndpoint("/swagger/v1/swagger.json", "接口文档-业务");//基础接口文档放后面后显示 c.RoutePrefix = string.Empty;//设置后直接输入IP就可以进入接口文档 }); ... }
然后还要在我们的控制器上面标注swagger文档的版本
这时候我们就可以将接口文档进行分组显示了
4、API隐藏
创建自定义隐藏特性HiddenApiAttribute.cs
///
创建API隐藏过滤器HiddenApiFilter继承Swashbuckle.AspNetCore.SwaggerGen.IDocumentFilter接口,实现Apply方法
///
在Startup.cs中使用HiddenApiFilter
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "接口文档",
Description = "接口文档-基础",
TermsOfService = "",
Contact = new Contact
{
Name = "XXX1111",
Email = "XXX1111@qq.com",
Url = ""
}
});
c.SwaggerDoc("v2", new Info
{
Version = "v2",
Title = "接口文档",
Description = "接口文档-基础",
TermsOfService = "",
Contact = new Contact
{
Name = "XXX2222",
Email = "XXX2222@qq.com",
Url = ""
}
});
//反射注入全部程序集说明
GetAllAssemblies().Where(t => t.CodeBase.EndsWith("Controller.dll")
&& !t.CodeBase.Contains("Common.Controller.dll")).ToList().ForEach(assembly =>
{
c.IncludeXmlComments(assembly.CodeBase.Replace(".dll", ".xml"));
});
c.OperationFilter
示例:
我这里提供了Consul的心跳检车接口
但是在接口文档中并没有显示出来
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~