grpc-ecosystem/grpc-gateway

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

Open

#1108 aperta il 9 gen 2020

Vedi su GitHub
 (13 commenti) (0 reazioni) (0 assegnatari)Go (2250 fork)batch import
enhancementhelp wanted

Metriche repository

Star
 (16.971 star)
Metriche merge PR
 (Merge medio 8g 23h) (147 PR mergiate in 30 g)

Descrizione

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.

Guida contributor