grpc-ecosystem/grpc-gateway

Support query param unmarshalling to a map with a slice value-type

Open

#1,108 建立於 2020年1月9日

在 GitHub 查看
 (13 留言) (0 反應) (0 負責人)Go (16,971 star) (2,250 fork)batch import
enhancementhelp wanted

描述

grpc-gateway has an odd restriction on query parameters with map types. Specifically, it refuses to unmarshal a map type whether the value type is a string slice, such as map[string][]string.

grpc-gateway makes the assumption that the underlying Go type is authoritative for it's representation in query parameters.

I would expect ?q[foobar]=hello&q[foobar]=world to successfully unmarshal to both a map[string][]string if using GoGo protobuf's custom type mappings as well as the following type raw protobuf type:

message MapStringSlice {
  string key = 1;
  string value = 2;
}

message RPC {
   repeated MapStringSlice q = 1;
}

The wire representation of this type is identical to proto's map<string, string> and is recommended for backwards compatibility by the documentation for implementations that may not support map:

I'm happy to write a patch for this functionality if it's welcomed by the maintainers.

貢獻者指南

Support query param unmarshalling to a map with a slice value-type · grpc-ecosystem/grpc-gateway#1108 | Good First Issue