Proto3:新版ProtoBuf協議介紹

一、概述

ProtoBuf(Protocol Buffers),是一種廣泛使用的輕量級數據交換格式。相比XML和JSON等其他格式,它具有更高的效率、更小的體積和良好的跨平台支持。本文介紹了ProtoBuf的新版本proto3,包括語法、類型、枚舉、消息、服務、擴展等方面。

二、語法

Proto3採用了更加簡潔、易讀的語法,其中最明顯的變化是不再強制要求使用”required”、”optional”和”repeated”等關鍵字。因為在實踐中,這些關鍵字往往會導致API不兼容、代碼難以維護。現在只需要在message中定義需要的欄位即可:

syntax = "proto3";
message Book {
    int32 id = 1;
    string name = 2;
    int32 pages = 3;
}

同時,還可以在欄位名稱和序號之間加上”=”,使其更加清晰。在上面的例子中,id、name、pages就是該message的三個欄位,它們的類型分別是int32、string和int32。類型的定義將在第三部分進行詳細介紹。

三、類型

Proto3中定義了以下幾種類型:

1.基本類型

int32、int64、uint32、uint64、sint32、sint64、fixed32、fixed64、sfixed32、sfixed64、float、double、bool、string和bytes。

2.枚舉類型

枚舉類型是一組有名字的整數常量。示例代碼如下:

enum Sex {
    UNKNOWN = 0;
    MALE = 1;
    FEMALE = 2;
}

3.消息類型

消息類型是可嵌套的類型。在一個message中,可以包含多個類型為int、string、enum、message等的欄位。示例代碼如下:

message Person {
    int32 id = 1;
    string name = 2;
    int32 age = 3;
    Sex sex = 4;
}

四、消息

消息是ProtoBuf傳輸的基本單位。每個消息都有一個message類型的名稱和一些欄位。在編寫消息時,可以使用默認值、標記為可選或必需、添加文檔等。示例代碼如下:

message Book {
    int32 id = 1 [default = 0];
    string name = 2;
    repeated string author = 3;
    int32 pages = 4 [deprecated = true];
    string brief = 5 [(google.protobuf.uninterpreted_option).string_value = "這是一本書"];
}

上面的例子中,使用了”=”和”[]”等符號進行更靈活的定義。其中,”=”用於設置默認值,”[]”用於使用標記。另外,還可以使用”(google.protobuf.uninterpreted_option)”進行添加文檔等操作。

五、服務

服務定義了一組RPC(Remote Procedure Calls)方法,可以在不同的進程或計算機之間進行調用。服務可以使用message類型定義輸入和輸出參數,並使用protobuf方法定義服務操作名稱、輸入參數名稱和輸出參數名稱。示例代碼如下:

service Library {
    rpc GetBook(BookRequest) returns (BookResponse) {}
}
message BookRequest {
    int32 id = 1;
}
message BookResponse {
    int32 status = 1;
    Book book = 2;
}

六、擴展

Proto3支持擴展機制,允許在不修改原來定義的情況下,添加新的欄位。擴展點必須以extend關鍵字開始,然後是原始的message類型名稱,然後是新欄位名稱、欄位類型和欄位標記。示例代碼如下:

syntax = "proto3";
message Book {
    int32 id = 1;
    string name = 2;
    int32 pages = 3;
    extensions 100 to 199;
}
extend Book {
    int32 size = 101;
}

七、總結

Proto3是ProtoBuf的新版本,在語法、類型、枚舉、消息、服務、擴展等方面進行了多項改進和優化。它更加簡潔、易讀、易於擴展,是一種更加高效的數據交換格式。我們可以根據實際需求,靈活選擇合適的數據交換格式。

原創文章,作者:GLTQL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370585.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GLTQL的頭像GLTQL
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相關推薦

  • 機智雲gagent屬於哪個協議?

    機智雲gagent主要是基於MQTT協議,同時支持TCP、TLS、WebSocket等多種協議。 一、MQTT協議介紹 MQTT全稱Message Queuing Telemetr…

    編程 2025-04-29
  • 使用Netzob進行網路協議分析

    Netzob是一款開源的網路協議分析工具。它提供了一套完整的協議分析框架,可以支持多種數據格式的解析和可視化,方便用戶對協議數據進行分析和定製。本文將從多個方面對Netzob進行詳…

    編程 2025-04-29
  • 如何取消火車票自動搶票協議

    火車票自動搶票協議,是一種利用技術手段在系統繁忙的情況下,自動刷取並搶購火車票的行為。雖然在某些情況下能夠提高購票成功率,但是也會影響其他乘客的購票權益。因此,取消火車票自動搶票協…

    編程 2025-04-29
  • USB協議棧

    USB(Universal Serial Bus)是一種常見的計算機外部介面,它已經被廣泛使用在各種設備中,例如印表機、鍵盤、滑鼠等。在實現USB通信的過程中,USB協議棧起著非常…

    編程 2025-04-27
  • DR & BDR:OSPF協議中的兩個重要角色

    一、什麼是DR & BDR? 在OSPF協議中,DR(Designated Router)和BDR(Backup Designated Router)是兩個非常重要的角色。…

    編程 2025-04-25
  • Protobuf使用詳解

    一、Protobuf簡介 Protocol Buffers,簡稱 Protobuf,是 Google 於 2008 年發布的一種高效數據存儲和交換格式。 其相比於 XML 和 JS…

    編程 2025-04-25
  • YModem協議在上位機中的應用

    一、YModem協議概述 YModem協議是一種常用於串口通信中的文件傳輸協議。它支持數據校驗和數據重傳功能,使得數據傳輸更加穩定可靠。YModem協議有多種不同的實現方式,其中最…

    編程 2025-04-25
  • 網路層協議

    一、IP協議 Internet協議(IP)是網路層中最為基礎的協議,它把數據包發送到網路上的其他主機。IP包含兩種協議:IPv4和IPv6。 IPv4協議使用32位的地址來唯一地標…

    編程 2025-04-24
  • RIP協議在哪一層

    一、RIP協議簡介 RIP(Routing Information Protocol)是一種常見的動態路由協議,也是第一個廣泛使用的動態路由協議。它使用UDP協議,常用於小型網路,…

    編程 2025-04-23
  • 深入探究SSH協議

    一、SSH協議的概述 Secure Shell(SSH)是一種加密網路協議,用於在網路上安全地傳輸數據。它最初是為取代Telnet和不安全的遠程Shell協議(例如rlogin)而…

    編程 2025-04-23

發表回復

登錄後才能評論