Silky微服务框架在线文档Silky微服务框架在线文档
首页
文档
配置
源码解析
博文
github
gitee
首页
文档
配置
源码解析
博文
github
gitee
  • 简介

    • silky 框架介绍
  • 入门

    • 名词解释
    • 快速开始
    • 脚手架
    • 微服务模块化架构的最佳实践 & 约定
    • 示例
  • 主机与模块

    • 主机
    • 网关
    • 模块
    • 插件
  • 网关与 HTTP

    • Swagger 文档
    • 性能分析(MiniProfiler)
    • 跨域(CORS)
    • 审计日志
  • 服务与 RPC

    • 应用服务和服务条目
    • rpc通信
    • websocket通信
    •  服务注册中心
    • 服务治理
  • 数据与缓存

    • EFCore 数据访问
    • 缓存
    • 分布式锁
  • 安全与认证

    • 身份认证与授权
    • 分布式事务
  • 基础设施

    • 依赖注入
    • 对象到对象的映射
    • 参数验证
    • 链路跟踪
    • 日志(Serilog)
    • 健康检查
    • 消息总线(MassTransit)
    • 单元测试与集成测试

概述

silky 框架通过 Silky.Http.Swagger 模块集成了 Swagger/OpenAPI 文档能力,使前端开发者能够通过可视化界面浏览和调试所有对外暴露的 RPC 接口。

与传统 ASP.NET Core Swagger 不同,silky 的 Swagger 文档来源于注册中心——框架将所有微服务的 IApplicationService 服务条目聚合到网关,并在网关的 Swagger UI 中集中展示。这意味着开发者只需访问网关的 Swagger 页面,即可看到整个微服务系统的所有接口文档。

注册服务

在网关 Startup.cs 中启用 Swagger:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSilkyHttpCore()
        .AddSwaggerDocuments();    // 注册 Swagger 文档服务

    services.AddRouting();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseSwaggerDocuments();     // 启用 Swagger 中间件(含 SwaggerUI)

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapSilkyRpcServices();
    });
}

UseSwaggerDocuments() 同时调用了 UseSwagger()(提供 OpenAPI JSON 端点)和 UseSwaggerUI()(提供可视化页面),只需一行代码即可完整启用。

配置项说明

Swagger 文档通过 SwaggerDocument 配置节点进行配置,对应类型为 SwaggerDocumentOptions:

配置项类型默认值说明
titlestringSwagger UI文档标题(显示在 Swagger UI 页面顶部)
descriptionstringSwagger Document文档描述信息
versionstringv1.0.0API 版本号
organizationModeOrganizationModeAllAndGroup文档组织方式(见下方说明)
showModeShowModeAll服务显示模式(见下方说明)
enableAuthorizedbooltrue是否启用 JWT Bearer 认证按钮
enableMultipleServiceKeybooltrue是否按微服务分组展示
enableHashRouteHeaderbooltrue是否在请求中携带 HashRoute Header
routePrefixstring""Swagger UI 路由前缀(空字符串表示根路径 /)
xmlCommentsstring[]nullXML 文档注释文件路径,用于在 Swagger 中显示注释
formatAsV2booltrue是否同时输出 Swagger 2.0 格式
docExpansionStateDocExpansion—接口列表默认展开方式(None/List/Full)
showDashboardServiceboolfalse是否在文档中显示 Dashboard 内部服务
groupsGroupDescription[][]自定义分组(配合 AllAndGroup/Group 模式使用)
filterTypesstring[][]自定义 IOperationFilter 类型的完整名称

OrganizationMode(文档组织方式)

值说明
NoGroup(0)所有接口不分组,合并在单一文档中
Group(1)仅按微服务(或自定义分组)显示文档,不显示全量文档
AllAndGroup(默认)同时提供全量文档(All)和各微服务分组文档

ShowMode(服务显示模式)

值说明
All(默认)显示注册中心发现的所有微服务接口
Interface仅显示通过 IApplicationService 接口标注的服务
RegisterCenter仅显示注册中心中已注册的服务

配置示例

基础配置(适合大多数项目)

SwaggerDocument:
  title: "我的微服务平台 API"
  description: "提供订单、账户、商品等业务接口"
  version: "v1.0"
  enableAuthorized: true
  organizationMode: AllAndGroup

启用 XML 注释

要在 Swagger UI 中显示接口注释,需要:

步骤一:在 .csproj 中启用 XML 文档生成:

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

步骤二:在配置文件中指定 XML 注释文件名:

SwaggerDocument:
  title: "我的 API"
  xmlComments:
    - "MyApp.Application.Contracts.xml"
    - "MyApp.Domain.Shared.xml"

提示

XML 文件名应填写相对路径,与程序集同目录时只需文件名即可。多个合约程序集可以都列入 xmlComments,Swagger 会合并展示所有注释。

自定义分组

Group/AllAndGroup 模式下,框架会自动按微服务名称分组。也可通过 groups 配置进行自定义分组:

SwaggerDocument:
  organizationMode: AllAndGroup
  groups:
    - applicationInterface: IOrderAppService
      title: 订单接口
      version: v1.0
    - applicationInterface: IInventoryAppService
      title: 库存接口
      version: v1.0

关闭认证按钮(仅限内部系统)

SwaggerDocument:
  enableAuthorized: false

指定 UI 路由前缀

SwaggerDocument:
  routePrefix: "swagger"   # Swagger UI 访问路径变为 /swagger

JWT 认证集成

当 enableAuthorized: true(默认)时,Swagger UI 右上角会出现 Authorize 按钮。点击后输入 JWT Token:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

之后所有请求会自动在 Authorization Header 中携带此 Token。

配合 silky 身份认证模块(Silky.Http.Identity),网关会自动验证 Token 并将用户信息注入 RpcContext,无需为每个接口单独处理认证逻辑。

访问 Swagger UI

默认配置下,Swagger UI 可以通过以下地址访问:

  • 开发环境:http://localhost:端口/index.html(routePrefix 为空时)
  • 配置了前缀:http://localhost:端口/swagger/index.html

OpenAPI JSON 数据端点:http://localhost:端口/swagger/v1/swagger.json

注意

Swagger 文档不应在生产环境中对公网暴露,建议在生产环境中通过配置将其禁用或限制访问来源:

if (env.IsDevelopment())
{
    app.UseSwaggerDocuments();
}
编辑当前页
Next
性能分析(MiniProfiler)