带有 Swagger / OpenAPI 的 gRPC JSON 转码文档
注意
此版本不是本文的最新版本。 有关当前版本,请参阅本文的 .NET 9 版本。
警告
此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 对于当前版本,请参阅此文的 .NET 8 版本。
OpenAPI (Swagger) 是一个与语言无关的规范,用于描述 REST API。 gRPC JSON 转码支持从转码的 RESTful API 生成 OpenAPI。 Microsoft.AspNetCore.Grpc.Swagger
包:
- 将 gRPC JSON 转码与 Swashbuckle 集成。
- .NET 7 中的实验性是允许我们探索提供 OpenAPI 支持的最佳方式。
开始使用
若要启用 OpenAPI 与 gRPC JSON 转码:
- 将包引用添加到
Microsoft.AspNetCore.Grpc.Swagger
。 版本必须为 0.3.0-xxx 或更高版本。 - 在启动时配置 Swashbuckle。
AddGrpcSwagger
方法将 Swashbuckle 配置为包含 gRPC 终结点。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc().AddJsonTranscoding();
builder.Services.AddGrpcSwagger();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
new OpenApiInfo { Title = "gRPC transcoding", Version = "v1" });
});
var app = builder.Build();
app.UseSwagger();
if (app.Environment.IsDevelopment())
{
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
}
app.MapGrpcService<GreeterService>();
app.Run();
注意
有关将包添加到 .NET 应用的指南,请参阅包使用工作流(NuGet 文档)中“安装和管理包”下的文章。 在 NuGet.org 中确认正确的包版本。
添加 .proto
注释中的 OpenAPI 说明
根据 .proto
协定中的注释生成 OpenAPI 说明,如以下示例所示:
// My amazing greeter service.
service Greeter {
// Sends a greeting.
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/v1/greeter/{name}"
};
}
}
message HelloRequest {
// Name to say hello to.
string name = 1;
}
message HelloReply {
// Hello reply message.
string message = 1;
}
若要启用 gRPC OpenAPI 注释,请执行以下操作:
- 使用
<GenerateDocumentationFile>true</GenerateDocumentationFile>
启用服务器项目中的 XML 文档文件。 - 配置
AddSwaggerGen
以读取生成的 XML 文件。 将 XML 文件路径传递到IncludeXmlComments
和IncludeGrpcXmlComments
,如以下示例所示:
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
new OpenApiInfo { Title = "gRPC transcoding", Version = "v1" });
var filePath = Path.Combine(System.AppContext.BaseDirectory, "Server.xml");
c.IncludeXmlComments(filePath);
c.IncludeGrpcXmlComments(filePath, includeControllerXmlComments: true);
});
若要确认 Swashbuckle 正在为 RESTful gRPC 服务生成带有说明的 OpenAPI,请启动应用并导航到 Swagger UI 页: