fullstorydev / fullstorydev/grpcurl
gRPC Reflection doesn't support maps
- Dominant language
- Go
- Stars
- 12.8k
- Forks
- 580
- Avg merge
- 1h 8m
- Merged PRs (30d)
- 5
Description
`grpcurl` errors if reflection is enabled and protobuf has `map` fields defined:
```
$ grpcurl -plaintext localhost:5000 helloworld.Greeter/SayHello
Error invoking method "helloworld.Greeter/SayHello": failed to query for service descriptor "helloworld.Greeter": proto:
message field "helloworld.HelloReply.field" is an invalid map: incorrect implicit map entry name
```
```proto
// helloworld.proto
syntax = "proto3";
package helloworld;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
map field = 1;
}
```
```js
// server.mjs
import {
Server,
loadPackageDefinition,
ServerCredentials,
} from '@grpc/grpc-js';
import { loadSync } from '@grpc/proto-loader';
import reflection from '@grpc/reflection';
const PROTO_PATH = './helloworld.proto';
const server = new Server();
const packageDefinition = loadSync(PROTO_PATH);
const proto = loadPackageDefinition(packageDefinition);
new reflection.ReflectionService(packageDefinition).addToServer(server);
server.addService(proto.helloworld.Greeter.service, {
sayHello: (call, callback) => {
callback(null, { message: 'Hello' });
},
});
server.bindAsync('localhost:5000', ServerCredentials.createInsecure(), () => {
server.start();
});
```
In Postman and Insomnia reflection works fine. Removing `map` field also helps
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.