2017-06-13 3 views
2

リソースのサブセット・フィールドのみを更新する場合があります。私たちは、リソースPersonを持っているのであれば:protobufによるパッチ・レスト・リクエストのサポート方法3

type Person struct { 
    Age int 
    Name string 
    Otherfield string 
} 

は、呼び出し側クライアントのみAgeフィールドを更新したいと言います。これを処理するためにエンドポイントは通常どのように設定されますか?

私はつまり、これが唯一のフィールドはペイロードの一部として設定された状態で、PATCH要求を行わなければならないと考えている。

{ 
    Age: 21 
} 

しかし、これは私の知る限りとしてのでproto3では動作しません。ヌルフィールドがないことを知っていて、デフォルト値だけです。これは、デフォルト値が有効な多くの場合には機能しません。

+1

答えはおそらくここと同じです:proto2を使用するhttps://stackoverflow.com/questions/37433955/proto3-setting-value-equal-to-default-is-not-recognised-in-runtime?rq=1 – jpa

答えて

1

Google独自のprotobufファイル(例:here)を見ると、部分更新のためにFieldMaskが使用されます。部分的なメッセージを頼りにせずに、これは、クライアントが、彼らは更新したいフィールドサーバーを伝えることができます

{ 
    mask: "Person.Age" 
} 

FieldMaskオブジェクトは、要求と共に渡され、(JSONで)形態を有していますこれを理解するためにそれ自体。

これは、(それぞれの!)クライアントに不必要な複雑さを追加すると思いますが、proto3を使用して部分的な更新を実現する他の方法は見つかりませんでした。

FieldMask hereの完全なドキュメントを見ることができます。

クライアントがオブジェクト全体を必要としない場合は、応答を除外するためにも使用できることに注意してください。

関連する問題