grpc-ecosystem/grpc-gateway

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

開放

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

 (13 則留言) (0 個反應) (0 位負責人)Go (2,250 個分叉)batch import
enhancementhelp wanted

倉庫指標

星標
 (16,971 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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.

貢獻者指南