Skip to content

gRPC transcoding public API #40792

Closed
@JamesNK

Description

@JamesNK

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);

Alternative Designs

Risks

Metadata

Metadata

Assignees

Labels

api-approvedAPI was approved in API review, it can be implementedarea-grpcIncludes: GRPC wire-up, templates

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions