Closed
Description
Background and Motivation
gRPC transcoding allows apps to expose gRPC services as if they were RESTful APIs.
Proposed API
namespace Microsoft.AspNetCore.Grpc.JsonTranscoding
{
public sealed class GrpcJsonTranscodingOptions
{
public GrpcJsonSettings JsonSettings { get; set; }
public Google.Protobuf.Reflection.TypeRegistry TypeRegistry { get; set; }
}
public sealed class GrpcJsonSettings
{
public bool WriteIndented { get; set; } = false;
public bool WriteEnumsAsIntegers { get; set; } = false;
public bool WriteInt64AsStrings { get; set; } = false;
public bool SkipDefaultValues { get; set; } = false;
}
public sealed class GrpcJsonTranscodingMetadata
{
public GrpcTranscodingMetadata(Google.Protobuf.Reflection.MethodDescriptor methodDescriptor, Google.Api.HttpRule httpRule);
public Google.Api.HttpRule HttpRule { get; }
public Google.Protobuf.Reflection.MethodDescriptor MethodDescriptor { get; }
}
}
namespace Microsoft.Extensions.DependencyInjection
{
public static class GrpcTranscodingServiceExtensions
{
public static IGrpcServerBuilder AddJsonTranscoding(this IGrpcServerBuilder builder);
public static IGrpcServerBuilder AddJsonTranscoding(this IGrpcServerBuilder builder, Action<GrpcJsonTranscodingOptions> configureOptions);
}
}
Usage Examples
// Old and busted
services.AddGrpc(options =>
{
options.EnableDetailedErrors = true;
});
services.AddGrpcJsonTranscoding(options =>
{
options.JsonSettings.WriteIndented = true;
});
// New hotness
services
.AddGrpc(options => options.EnableDetailedErrors = true)
.AddJsonTranscoding(options => options.JsonSettings.WriteIndented = true);
// Maybe future?
services.AddGrpc()
.AddJsonTranscoding()
.AddJsonTranscoding<GreeterService>(options => options.JsonSettings.WriteIndented = true);