簡體   English   中英

在Proto3中支持多種模式

[英]Support multiple schemas in Proto3

我正在創建一個proto3模式,該模式允許傳入jsonObject中的多個/任意數據。 我想一槍轉換傳入的json對象。

例如

{"key1":"value",
 "key2": {  //schema A}
 }

我還想在不同的請求中為key2支持架構B。

{"key1":"value",
 "key2": {  //schema B}
 }

我試過幾個不同的方法,如oneofoneof它需要不同的鍵名,因為我使用的是相同的key2 ,它不適合我在這種情況下工作。

這是架構。

message IncomingRequest {
string key1 = 1;
//google.protobuf.Any key2 = 2;  --> not working
    oneof message{
        A payload = 2; 
        B payload = 3; --> duplicate key
    } 
}

有人知道如何實現這一目標嗎?

我可以想到兩種方法:

每個請求的消息類型

如果您知道,根據請求(例如,調用的HTTP URL),它應該是模式A還是模式B,我建議為每個請求創建單獨的消息類型。 這可能會導致您必須定義更多的原型類型,但是在必須編寫以消耗有效負載的實際代碼中使用起來很簡單。

結構類型

如果您確實想要/必須重用相同的消息類型,則可以使用Struct原型類型來編碼/解碼任何JSON結構。

message IncomingRequest {
    string key1 = 1;
    google.protobuf.Struct key2 = 2;
}

盡管從原型類型定義來看,它看起來並不像您想要的那樣,但是Protobuf解碼器/編碼器將以特殊方式處理此類型,以提供所需的行為。

此選項的問題在於,您在原型中獲得的靈活性會在生成的代碼中失去表現力,因為如果設置了特定的值/類型,則必須進行很多邊緣情況檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM