首頁 >後端開發 >Golang >`google/protobuf/struct.proto` 是透過 gRPC 發送動態 JSON 資料的最佳方式嗎?

`google/protobuf/struct.proto` 是透過 gRPC 發送動態 JSON 資料的最佳方式嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-03 15:10:10684瀏覽

Is `google/protobuf/struct.proto` the Best Way to Send Dynamic JSON Data via gRPC?

「google/protobuf/struct.proto」是透過 GRPC 傳輸動態 JSON 的最佳方法嗎?

使用 google/protobuf/struct .proto 是透過以下方式傳輸動態 JSON 物件的有效方法GRPC。

使用 google/protobuf/struct

google/protobuf/struct.proto 提供了一個通用資料結構,用於表示 Protobuf 訊息中的 JSON 物件。它包括兩種關鍵訊息類型:

  • 值- 表示單一JSON 值(例如字串、數字、清單)
  • 結構- 表示欄位值對的集合

動態JSON

動態JSON是指儲存為字串的非結構化或靈活資料。如果您的資料遵循預先定義的架構,則定義自訂 Protobuf 訊息類型可能會更有效。

Proto 檔案

您的原型檔案 (User.proto) 使用 google/ protobuf/struct.proto 聲明 SendJsonRequest 訊息。 Details 欄位的類型為 Struct,允許傳入動態 JSON 資料。

客戶端程式碼

您的客戶端程式碼使用 structpb 建立 structpb.Struct 的實例.NewStruct(),將map[string]interfacet

替代解決方案

Anuj 的解決方案

此解決方案更為複雜,需要手動將每個映射條目轉換為structpb.Value,需要更多代碼

Luke的解決方案

雖然更簡潔,但該解決方案仍涉及從 map 轉換為 bytes,然後轉換為 structpb.Struct。

來自不同方法的解決方案

建議的解決方案使用structpb.NewStruct() 直接從map建立Struct對象,省去中間轉換。

結論

使用 google/protobuf/struct.proto 可以是處理非結構化或靈活資料時透過 GRPC 傳輸動態 JSON 的合適選項。但是,如果您的資料遵循特定架構,則定義自訂 Protobuf 訊息可能會提高效率和類型安全性。

以上是`google/protobuf/struct.proto` 是透過 gRPC 發送動態 JSON 資料的最佳方式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn