Go 如何在gRPC协议中接受和验证此映射?

Go 如何在gRPC协议中接受和验证此映射?,go,grpc,protoc,Go,Grpc,Protoc,我将向我的gRPC应用程序发送以下POST请求: curl \ --request POST \ --header 'Content-Type: application/json' \ --data-raw '{ "mandatory-key1": "value1", "mandatory-key2": { "arbitrary-optional-key1": [ "b"

我将向我的gRPC应用程序发送以下POST请求:

curl \
--request POST \
--header 'Content-Type: application/json' \
--data-raw '{
 "mandatory-key1": "value1",
 "mandatory-key2": {
    "arbitrary-optional-key1": [
        "b",
        "c"
    ],
    "arbitrary-optional-key2": [
        "e"
    ]
  }
}' \
'http://localhost:11000/MyEndpoint'
mandatory-key-1
关联的值必须是非空字符串。 与
mandatory-key-2
关联的值必须是一个映射,其中所有键都是字符串,所有值都是字符串列表

现在,我必须在gRPC协议文件中对该请求的数据结构进行建模

我正在考虑这样做:

message MyRequestData {
  // pairs represents that map that the user will send in to the MyEndpoint.
  map<string, string> pairs = 1;
}
消息MyRequestData{
//pairs表示用户将发送到MyEndpoint的映射。
映射对=1;
}
但该规范不够通用。我需要知道如何正确编写此规范

问题1:如何编写此规范,使其接受值中的字符串以及字符串列表

问题2:我如何进行验证,以确保
配对
具有密钥
mandatory-key1
mandatory-key2
而没有其他密钥

问题3:我如何进行验证以确保:

  • pairs
    有键
    mandatory-key1
    mandatory-key2
    而没有其他键
  • pairs[mandatory-key1”]
    的值是否为非空字符串
  • pairs[“mandatory-key2”]
    的值是什么
  • Protobufs不提供(您需要的)验证

    当您使用protoc生成的源代码时,需要编写验证代码

    Protobuf不直接支持重复贴图值,但您可以:

    消息请求{
    字符串强制_key1=1;
    map强制键2=2;
    }
    消息值{
    重复字符串值=1;
    }