【问题标题】:gRPC Proto Buff URL/URI typegRPC Proto Buff URL/URI 类型
【发布时间】:2022-06-11 15:41:34
【问题描述】:

有没有办法在 gRPC 的消息中使用 Url 或 Uri 数据类型?如果不是,最好的方法是什么?

我为此使用 gRPC 和协议缓冲区,并运行一个后端 go 应用程序来触发显示在我的 Flutter 应用程序中的弹出通知。当在我的 Flutter 应用程序中点击该通知时,该通知有一个链接将用户带到一个网页。

现在我正在为此使用字符串,如下所示:

message NotificationResponse{
    string title = 1;
    string url = 2;
}

我似乎找不到使用 Url/Uri 作为类型的方法。有这种事吗?

【问题讨论】:

  • 您能否向我们提供有关您正在尝试做什么的更多信息?例如,您在前端将其转换为什么?
  • @ClémentJean 我编辑了帖子,对不起,我认为它已经足够了
  • 我的回答有什么可以改进的吗?

标签: protocol-buffers grpc proto


【解决方案1】:

存储在字符串中是一个完全可行的解决方案。但是,如果您想稍微减少有效负载大小并使实例化更安全一些,您可以删除 url 的架构部分(例如:https://)。

为此,您可以执行以下操作:

message Url {
    enum Schema {
        UNSPECIFIED = 0;
        HTTP = 1;
        HTTPS = 2;
        // more if needed
    }

    Schema schema = 1;
    string rest = 2;
}

然后你可以像这样在你的消息中使用它:

message NotificationResponse {
    string title = 1;
    Url url = 2;
}
  • 这将排除字符串中这些不必要的字符并减少有效负载大小(删除http(s)://)。枚举比字符串更有效地序列化。
  • 这将使实例化更安全,因为您至少可以限制您和其他开发人员可以使用的架构(在我的示例中,没有 ftp 甚至限制为仅 https 以确保安全)。

这有一个不便之处。您必须将其连接回您的客户端代码中,但我认为这是值得的,因为连接非常简单(将枚举值更改为文本值并添加 ://)。

注意:对域名(.com、.net、...)执行相同的枚举技巧不会那么简单,并且会迫使您将路径和主机存储在不同的字段中(不值得,因为它会增加有效载荷)。

如果您需要更多帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2019-03-18
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多