From 5f381bb195cf444c504a0e590404ad79b0a3ec17 Mon Sep 17 00:00:00 2001 From: alice <90381261+alice-yyds@users.noreply.github.com> Date: Sun, 29 Sep 2024 15:08:47 +0800 Subject: [PATCH 01/10] doc: upload file Serialize Data Ondemands --- .../Tutorials/advanced-feature/fieldmask.md | 284 ++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md new file mode 100644 index 0000000000..5612d65a69 --- /dev/null +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -0,0 +1,284 @@ +--- +title: "Serialize Data Ondemands" +date: 2024-09-29 +weight: 1 +keywords: ["Serialize Data Ondemands"] +description: "" +--- + +## **What is thrift FieldMask**? + +![](static/img/docsstatic/img/docs/kitex/Tutorials/advanced-feature/IQptbzlBdoFcPcxGbCwlSqpmgcb.png) + +FieldMask is inspired by [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) and used to indicate the data that users care about, and filter out useless data, during a RPC call, in order to reduce network package size and accelerate serializing/deserializing process. This technology has been widely used among Protobuf [services](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518). + +## **How to construct a FieldMask**? + +To construct a fieldmask, you need two things: + +- Thrift Path for describing the data you want +- Type Descriptor for validating the thrift path you pass is compatible with thrift message definition (IDL) + +### **Thrift Path** + +#### **What is the thrift path**? + +A path string represents an arbitrary endpoint of a thrift object. It is used for locating data from thrift root message, and defined from-top-to-bottom. For example, a thrift message defined as below: + +```go +struct Example { + 1: string Foo, + 2: i64 Bar3: Example Self +} +``` + +A thrift path `$.Foo` represents the string value of Example.Foo, and `$.Self.Bar` represents the secondary layer i64 value of Example.Self.Bar Since thrift has four nesting types (LIST/SET/MAP/STRUCT), thrift paths should also support locating elements in all these types' objects, not only STRUCT. + +#### **Syntax** + +Here are basic hypothesis: + +- `fieldname` is the field name of a field in a struct, it **MUST ONLY** contain '[a-zA-Z]' alphabet letters, integer numbers and char '_'. +- `index` is the index of an element in a list or set, it **MUST ONLY** contain integer numbers. +- `key` is the string-typed key of an element in a map. It can contain any letters, but it **MUST** be a quoted string. +- `id` is the integer-typed key of an element in a map, it **MUST ONLY** contain integer numbers. +- except `key`, ThriftPath **shouldn't** contains any blank chars (\n\r\b\t) + +Here is detailed syntax: + +#### **Agreement Of Implementation** + +- **A empty mask means "PASS ALL**" (all fields are "PASS") +- For map of neither-string-nor-integer typed key, only '*' token is allowed as keys +- Required fields **CAN** be not in mask ("Filtered") while they will still be written as **current values**. + + - Tips: If you want the required field not in the mask to be written as a zero value, you can enable the option -`thrift field_mask_zero_required ` and regenerate the code. It should be noted that the STRUCT type also writes a zero value (only writes a FieldStop (0)) - this means that if the STRUCT contains a required field, it may cause the other party to report an error +- FieldMask settings must **start from the root object**. + + - Tips: If you want to set FieldMask from a non-root object and make it effective, you need to **add** -`thrift field_mask_halfway` **options and regenerate the code** . However, there is a latent risk: if different parent objects reference the same child object, and these two parent objects set different fieldmasks, only one parent object's fieldmask relative to this child object will be effective. + +#### **Visibility(Black-list or White-list**) + +By default, a field in mask means "**PASS**" (**will be** serialized/deserialized), and the other fields not in mask means "REJECT" (**won't be** serialized/deserialized) -- which is so-called "**White List**" + +However, we allow user to use fieldmask as a "**Black List**", as long as enable option `Options.BlackList`. Under such mode, a field in the mask means "REJECT", and the other fields means "PASS". See [main_test.go](https://github.com/cloudwego/kitex-tests/blob/feat/fieldmask_test/thriftrpc/fieldmask/main_test.go) for detailed usage + +### **Type Descriptor** + +Type descriptor is the runtime representation of a message definition, in aligned with [Protobuf Descriptor](https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/descriptor.proto). To get a type descriptor, you must enable thrift reflection feature first, which was introduced in thriftgo [v0.3.0](https://github.com/cloudwego/thriftgo/pull/83). You can generate related codes for this feature using option `with_reflection`. + +## **How to use FieldMask**? + +See [main_test.go](https://github.com/cloudwego/kitex-tests/blob/feat/fieldmask_test/thriftrpc/fieldmask/main_test.go) for details. + +1. First, you must generates codes for this feature using two options `with_fieldmask` and `with_reflection` (ex: [fieldmask.thrift](https://github.com/cloudwego/kitex-tests/blob/feat/fieldmask_test/idl/fieldmask.thrift)) + +``` +$ kitex -thrift with_field_mask -thrift with_reflection ${your_idl} +``` + +2. Create a fieldmask in the initializing phase of your application (recommanded), or just in the bizhandler before you return a response + +```go +import ( + "sync""github.com/cloudwego/thriftgo/fieldmask" + nbase "github.com/cloudwego/thriftgo/test/golang/fieldmask/gen-new/base" +) + +var fieldmaskCache sync.Mapfunc + +// initialize request and response fieldmasks and cache them +func init() { + // construct a fieldmask with TypeDescriptor and thrift pathes + respMask, err := fieldmask.NewFieldMask((*fieldmask0.BizResponse)(nil).GetTypeDescriptor(), + "$.A") + if err != nil { + panic(err) + } + fmCache.Store("BizResponse", respMask) + + reqMask, err := fieldmask.NewFieldMask((*fieldmask0.BizRequest)(nil).GetTypeDescriptor(), + "$.B", "$.RespMask") + if err != nil { + panic(err) + } + fmCache.Store("BizRequest", reqMask) +} +``` + +3. Now you can set fieldmask with generated API `Set_FieldMask()` on your requres or response object. Then the kitex itself will notice the fieldmask and using it during request/response's serialization, in either client-side or server-side. + +- server-side + +```go +func (s *BizServiceImpl) BizMethod1(ctx context.Context, req *biz.BizRequest) (resp *biz.BizResponse, err error) { + resp := biz.NewBizResponse() // resp = biz.NewBizResponse + resp.A = "A" + resp.B = "B" + // try set resp's fieldmask + respMask, ok := fmCache.Load("BizResponse") + if ok { + resp.Set_FieldMask(respMask.(*fieldmask.FieldMask)) + } + return resp, nil +} +``` + +- client-side + +```go +req := fieldmask0.NewBizRequest() +req.A = "A" +req.B = "B" +// try set request's fieldmask +reqMask, ok := fmCache.Load("BizRequest") +if ok { + req.Set_FieldMask(reqMask.(*fieldmask.FieldMask)) +} +resp, err := cli.BizMethod1(context.Background(), req) +``` + +4. Once you set fieldmask for request/response, the other side will only receive the real values of non-required fields that the fieldmask sets, or zero values of required fields that fieldmask doesn't mask + +- client-side + +```go +if resp.A == "" { // resp.A in mask + t.Fail() +} +if resp.B != "" { // resp.B not in mask + t.Fail() +} +``` + +- Server-side + +```go +if req.A != "" { // req.A not in mask + return nil, errors.New("request must mask BizRequest.A!") +} +if req.B == "" { // req.B in mask + return nil, errors.New("request must not mask BizRequest.B!") +} +``` + +## **How to pass FieldMask between programs**? + +Generally, you can add one binary field to your request definition to carry a fieldmask, and explicitly serialize/deserialize the fieldmask you are using into/from this field. We provide two encapsulated API for serialization/deserialization: + +- [thriftgo/fieldmask.Marshal()/Unmarshal()](https://github.com/cloudwego/thriftgo/blob/9e8d1cafba62a37789c431270a816ad35a6c46e0/fieldmask/serdes.go): Package functions, serialize/deserialize fieldmask into/from binary bytes. We recommand you to use this API rather than the last one, because it is **much faster** due to using cache -- Unless your application is lack of memory. +- [FieldMask.MarshalJSON()/UnmarshalJSON()](https://github.com/cloudwego/thriftgo/blob/9e8d1cafba62a37789c431270a816ad35a6c46e0/fieldmask/serdes.go): Object methods, serialize/deserialize fieldmask into/from JSON bytes (not recommended) + +For example, we can pass the response's fieldmask as **a** **binary-typed field of request** like: + +- client-side + +```go +type BizRequest struct { + A string `thrift:"A,1" frugal:"1,default,string" json:"A"` + B string `thrift:"B,2,required" frugal:"2,required,string" json:"B"` + RespMask []byte `thrift:"RespMask,3,optional" frugal:"3,optional,binary" json:"RespMask,omitempty"` +} + +func TestClient() { + req := fieldmask0.NewBizRequest() + req.A = "A" + req.B = "B" + + // try get reponse's fieldmask + respMask, ok := fmCache.Load("BizResponse") + if ok { + // serialize the respMask + fm, err := fieldmask.Marshal(respMask.(*fieldmask.FieldMask)) + if err != nil { + t.Fatal(err) + } + // let request carry fm + req.RespMask = fm + } + + resp, err := cli.BizMethod1(context.Background(), req) +} +``` + +- Server-side + +```go +// BizMethod1 implements the BizServiceImpl interface. +func (s *BizServiceImpl) BizMethod1(ctx context.Context, req *fieldmask0.BizRequest) (resp *fieldmask0.BizResponse, err error) { + resp = fieldmask0.NewBizResponse() + resp.A = "A" + resp.B = "B" + + // check if request carries a fieldmask + if req.RespMask != nil { + println("got fm", string(req.RespMask)) + fm, err := fieldmask.Unmarshal(req.RespMask) + if err != nil { + return nil, err + } + // set fieldmask for response + resp.Set_FieldMask(fm) + } + + return +} +``` + +## Performance + +Mainly depends on the ratio of pruned data. See [baseline_test.go](https://github.com/cloudwego/kitex-tests/blob/feat/fieldmask_test/codegen/fieldmask/baseline_test.go) + +``` +goos: darwin +goarch: amd64 +cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz +BenchmarkFastWriteSimple/full-16 47.70 ns/op 0 B/op 0 allocs/op +BenchmarkFastWriteSimple/half-16 46.61 ns/op 0 B/op 0 allocs/op +BenchmarkFastReadSimple/full-16 115.1 ns/op 80 B/op 2 allocs/op +BenchmarkFastReadSimple/half-16 103.6 ns/op 48 B/op 1 allocs/op +BenchmarkFastWriteNesting/full-16 4505 ns/op 0 B/op 0 allocs/op +BenchmarkFastWriteNesting/half-16 2121 ns/op 0 B/op 0 allocs/op +BenchmarkFastReadNesting/full-16 13864 ns/op 11874 B/op 173 allocs/op +BenchmarkFastReadNesting/half-16 7938 ns/op 5273 B/op 77 allocs/op +``` + +Cases: + +- Simple: one-layer-fields struct, data size 114B +- Nesting: two-layer-fields struct, data size 6455B +- FastWrite: serialization test +- FastRead: deserialization test +- full: generate with_fieldmask API, but not use fieldmask +- half: generate with_fieldmask API and use fieldmask to mask half of the data + +## Getting the code (WIP) + +This feature is under development now. If you want to try, you can **get the branch codes** and **install corresponding binary tool**. + +- Thriftgo + + - Cmd tool : >= v0.3.12 + + ```go + go install github.com/cloudwego/thriftgo@v0.3.12 + ``` + + - lib + +```bash +go get github.com/cloudwego/thriftgo@v0.3.12 +``` + +- Kitex : >= v0.10.0 + + - Cmd tool + + ```go + go install github.com/cloudwego/kitex/tool/cmd/kitex@v0.10.0 + ``` + - lib + + ```go + go get github.com/cloudwego/kitex@v0.10.0 + ``` From 0ca8f06fd06040e617ba0e84b11be25e41e8c830 Mon Sep 17 00:00:00 2001 From: alice <90381261+alice-yyds@users.noreply.github.com> Date: Sun, 29 Sep 2024 15:08:48 +0800 Subject: [PATCH 02/10] doc: upload image IQptbzlBdoFcPcxGbCwlSqpmgcb.png --- .../IQptbzlBdoFcPcxGbCwlSqpmgcb.png | Bin 0 -> 60030 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/docs/kitex/Tutorials/advanced-feature/IQptbzlBdoFcPcxGbCwlSqpmgcb.png diff --git a/static/img/docs/kitex/Tutorials/advanced-feature/IQptbzlBdoFcPcxGbCwlSqpmgcb.png b/static/img/docs/kitex/Tutorials/advanced-feature/IQptbzlBdoFcPcxGbCwlSqpmgcb.png new file mode 100644 index 0000000000000000000000000000000000000000..8fde754b69d0ac98ac718f57010a116b4be6aaa6 GIT binary patch literal 60030 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 Date: Sun, 29 Sep 2024 15:19:52 +0800 Subject: [PATCH 03/10] =?UTF-8?q?doc:=20upload=20file=20=E6=8C=89=E9=9C=80?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E4=BD=BF=E7=94=A8=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kitex/Tutorials/advanced-feature/fieldmask.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md index c0840b1de2..1abd8a79ca 100644 --- a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -8,6 +8,8 @@ description: "" ## 什么是 Thrift FieldMask? +![](static/img/docsstatic/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png) + FieldMask 是受到 [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) 的启发,用于在 RPC 调用时**指示用户关心的数据并过滤掉无用的数据**的一种手段。该技术不但可以在 RPC 服务中实现**特定字段的屏蔽**,同时还可以**减少消息传输开销**以提升服务性能,目前已广泛应用于 Protobuf[服务](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518)中。 对于 thrift RPC 服务来说,有如下潜在使用场景: @@ -57,15 +59,6 @@ ThriftPath `$.Foo` 表示 Example.Foo 的字符串值,`$.Self.Bar` 表示第 这是详细的语法: -ThriftPath | Description --- | -- -$ | 根对象,每个路径都必须以它开头。 -.`fieldname` | 获取结构体中的 fieldname 子字段。例如,$. Fielda.ChildrenB。如果 fieldname 是路径终点且改字段为复杂类型(map/list/struct),则表示获取该字段下的所有子字段。 -[`index`,`index`...] | 获取 List 中的特定 index 的元素。索引必须是整数。例如:$. FieldList[1,3,4]。注意:可以编写超出实际列表大小的索引,但是实际无用。 -{"`key`","`key`"...} | 获取字符串类型键的映射中的特定 key 的值。例如:$. StrMap{""abcd"",""1234""} -{`id`,`id`...} | 获取整数类型键的映射中具有特定 id 的子字段。例如,$.IntMap{1,2} -\* | 获取所有字段/元素,即:$. StrMap{*} 表示获取映射 Root.StrMap 所有元素;$.List[*] 表示或者 List 中的所有元素。 - #### **类型描述符** 类型描述符是消息定义的运行时表示,定位与[Protobuf 描述符](https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/descriptor.proto)一致。详见 [Thriftgo 反射使用文档](https://www.cloudwego.io/zh/docs/kitex/tutorials/code-gen/thrift-reflection/) From 6a0d4fa1f346f72d3f73727465b9c6919be46c8b Mon Sep 17 00:00:00 2001 From: alice <90381261+alice-yyds@users.noreply.github.com> Date: Sun, 29 Sep 2024 15:19:54 +0800 Subject: [PATCH 04/10] doc: upload image U6zybX2jEoNAVnxEMnil3JT7g4d.png --- .../U6zybX2jEoNAVnxEMnil3JT7g4d.png | Bin 0 -> 60030 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png diff --git a/static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png b/static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png new file mode 100644 index 0000000000000000000000000000000000000000..8fde754b69d0ac98ac718f57010a116b4be6aaa6 GIT binary patch literal 60030 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 Date: Sun, 29 Sep 2024 15:35:36 +0800 Subject: [PATCH 05/10] update --- .../Tutorials/advanced-feature/fieldmask.md | 22 ++++++++++++++----- .../Tutorials/advanced-feature/fieldmask.md | 12 +++++++++- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md index 5612d65a69..2042315943 100644 --- a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -1,7 +1,7 @@ --- title: "Serialize Data Ondemands" date: 2024-09-29 -weight: 1 +weight: 9 keywords: ["Serialize Data Ondemands"] description: "" --- @@ -46,6 +46,16 @@ Here are basic hypothesis: Here is detailed syntax: +- ThriftPath | Description +- -- | -- +- $ | the root object,every path must start with it. +- .fieldname | get the child field of a struct corepsonding to fieldname. For example, $.FieldA.ChildrenB +- [index,index...] | get any number of elements in an List/Set corepsonding to indices. Indices must be integer.For example: $.FieldList[1,3,4] .Notice: a index beyond actual list size can written but is useless. +- {"key","key"...} | get any number of values corepsonding to key in a string-typed-key map. For example: $.StrMap{"abcd","1234"} +- {id,id...} | get the child field with specific id in a integer-typed-key map. For example, $.IntMap{1,2} +- * | get ALL fields/elements, that is: $.StrMap{*}.FieldX menas gets all the elements' FieldX in a map Root.StrMap; $.List[*].FieldX means get all the elements' FieldX in a list Root.List. +- + #### **Agreement Of Implementation** - **A empty mask means "PASS ALL**" (all fields are "PASS") @@ -77,7 +87,7 @@ See [main_test.go](https://github.com/cloudwego/kitex-tests/blob/feat/fieldmask_ $ kitex -thrift with_field_mask -thrift with_reflection ${your_idl} ``` -2. Create a fieldmask in the initializing phase of your application (recommanded), or just in the bizhandler before you return a response +2. Create a fieldmask in the initializing phase of your application (recommended), or just in the bizhandler before you return a response ```go import ( @@ -89,7 +99,7 @@ var fieldmaskCache sync.Mapfunc // initialize request and response fieldmasks and cache them func init() { - // construct a fieldmask with TypeDescriptor and thrift pathes + // construct a fieldmask with TypeDescriptor and thrift paths respMask, err := fieldmask.NewFieldMask((*fieldmask0.BizResponse)(nil).GetTypeDescriptor(), "$.A") if err != nil { @@ -106,7 +116,7 @@ func init() { } ``` -3. Now you can set fieldmask with generated API `Set_FieldMask()` on your requres or response object. Then the kitex itself will notice the fieldmask and using it during request/response's serialization, in either client-side or server-side. +3. Now you can set fieldmask with generated API `Set_FieldMask()` on your request or response object. Then the kitex itself will notice the fieldmask and using it during request/response's serialization, in either client-side or server-side. - server-side @@ -166,7 +176,7 @@ if req.B == "" { // req.B in mask Generally, you can add one binary field to your request definition to carry a fieldmask, and explicitly serialize/deserialize the fieldmask you are using into/from this field. We provide two encapsulated API for serialization/deserialization: -- [thriftgo/fieldmask.Marshal()/Unmarshal()](https://github.com/cloudwego/thriftgo/blob/9e8d1cafba62a37789c431270a816ad35a6c46e0/fieldmask/serdes.go): Package functions, serialize/deserialize fieldmask into/from binary bytes. We recommand you to use this API rather than the last one, because it is **much faster** due to using cache -- Unless your application is lack of memory. +- [thriftgo/fieldmask.Marshal()/Unmarshal()](https://github.com/cloudwego/thriftgo/blob/9e8d1cafba62a37789c431270a816ad35a6c46e0/fieldmask/serdes.go): Package functions, serialize/deserialize fieldmask into/from binary bytes. We recommend you to use this API rather than the last one, because it is **much faster** due to using cache -- Unless your application is lack of memory. - [FieldMask.MarshalJSON()/UnmarshalJSON()](https://github.com/cloudwego/thriftgo/blob/9e8d1cafba62a37789c431270a816ad35a6c46e0/fieldmask/serdes.go): Object methods, serialize/deserialize fieldmask into/from JSON bytes (not recommended) For example, we can pass the response's fieldmask as **a** **binary-typed field of request** like: @@ -185,7 +195,7 @@ func TestClient() { req.A = "A" req.B = "B" - // try get reponse's fieldmask + // try get response's fieldmask respMask, ok := fmCache.Load("BizResponse") if ok { // serialize the respMask diff --git a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md index 1abd8a79ca..7603d12ad3 100644 --- a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -1,7 +1,7 @@ --- title: "按需序列化使用指南" date: 2024-09-20 -weight: 1 +weight: 9 keywords: ["按需序列化使用指南"] description: "" --- @@ -59,6 +59,16 @@ ThriftPath `$.Foo` 表示 Example.Foo 的字符串值,`$.Self.Bar` 表示第 这是详细的语法: +- ThriftPath | Description +- -- | -- +- $ | 根对象,每个路径都必须以它开头。 +- .`fieldname` | 获取结构体中的 fieldname 子字段。例如,$. Fielda.ChildrenB。如果 fieldname 是路径终点且改字段为复杂类型(map/list/struct),则表示获取该字段下的所有子字- 段。 +- [`index`,`index`...] | 获取 List 中的特定 index 的元素。索引必须是整数。例如:$. FieldList[1,3,4]。注意:可以编写超出实际列表大小的索引,但是实际无用。 +- {"`key`","`key`"...} | 获取字符串类型键的映射中的特定 key 的值。例如:$. StrMap{""abcd"",""1234""} +- {`id`,`id`...} | 获取整数类型键的映射中具有特定 id 的子字段。例如,$.IntMap{1,2} +- \* | 获取所有字段/元素,即:$. StrMap{*} 表示获取映射 Root.StrMap 所有元素;$.List[*] 表示或者 List 中的所有元素。 +- + #### **类型描述符** 类型描述符是消息定义的运行时表示,定位与[Protobuf 描述符](https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/descriptor.proto)一致。详见 [Thriftgo 反射使用文档](https://www.cloudwego.io/zh/docs/kitex/tutorials/code-gen/thrift-reflection/) From 16181e5fae1f399046ebc404c8c3a1b8b38d9db3 Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Sun, 29 Sep 2024 15:58:29 +0800 Subject: [PATCH 06/10] typos --- content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md index 2042315943..b596dd2176 100644 --- a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -53,7 +53,7 @@ Here is detailed syntax: - [index,index...] | get any number of elements in an List/Set corepsonding to indices. Indices must be integer.For example: $.FieldList[1,3,4] .Notice: a index beyond actual list size can written but is useless. - {"key","key"...} | get any number of values corepsonding to key in a string-typed-key map. For example: $.StrMap{"abcd","1234"} - {id,id...} | get the child field with specific id in a integer-typed-key map. For example, $.IntMap{1,2} -- * | get ALL fields/elements, that is: $.StrMap{*}.FieldX menas gets all the elements' FieldX in a map Root.StrMap; $.List[*].FieldX means get all the elements' FieldX in a list Root.List. +- * | get ALL fields/elements, that is: $.StrMap{*}.FieldX means gets all the elements' FieldX in a map Root.StrMap; $.List[*].FieldX means get all the elements' FieldX in a list Root.List. - #### **Agreement Of Implementation** From e1b2dc2544171d86ba26bfde10fbd2bf493daa95 Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Sun, 29 Sep 2024 16:02:35 +0800 Subject: [PATCH 07/10] update --- .../Tutorials/advanced-feature/fieldmask.md | 18 +++++++++--------- .../Tutorials/advanced-feature/fieldmask.md | 17 ++++++++--------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md index b596dd2176..6e66287767 100644 --- a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -46,15 +46,15 @@ Here are basic hypothesis: Here is detailed syntax: -- ThriftPath | Description -- -- | -- -- $ | the root object,every path must start with it. -- .fieldname | get the child field of a struct corepsonding to fieldname. For example, $.FieldA.ChildrenB -- [index,index...] | get any number of elements in an List/Set corepsonding to indices. Indices must be integer.For example: $.FieldList[1,3,4] .Notice: a index beyond actual list size can written but is useless. -- {"key","key"...} | get any number of values corepsonding to key in a string-typed-key map. For example: $.StrMap{"abcd","1234"} -- {id,id...} | get the child field with specific id in a integer-typed-key map. For example, $.IntMap{1,2} -- * | get ALL fields/elements, that is: $.StrMap{*}.FieldX means gets all the elements' FieldX in a map Root.StrMap; $.List[*].FieldX means get all the elements' FieldX in a list Root.List. -- +ThriftPath | Description +-- | -- +$ | the root object,every path must start with it. +.fieldname | get the child field of a struct corepsonding to fieldname. For example, $.FieldA.ChildrenB +[index,index...] | get any number of elements in an List/Set corepsonding to indices. Indices must be integer.For example: $.FieldList[1,3,4] .Notice: a index beyond actual list size can written but is useless. +{"key","key"...} | get any number of values corepsonding to key in a string-typed-key map. For example: $.StrMap{"abcd","1234"} +{id,id...} | get the child field with specific id in a integer-typed-key map. For example, $.IntMap{1,2} +* | get ALL fields/elements, that is: $.StrMap{*}.FieldX means gets all the elements' FieldX in a map Root.StrMap; $.List[*].FieldX means get all the elements' FieldX in a list Root.List. + #### **Agreement Of Implementation** diff --git a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md index 7603d12ad3..b31a5c18a7 100644 --- a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -59,15 +59,14 @@ ThriftPath `$.Foo` 表示 Example.Foo 的字符串值,`$.Self.Bar` 表示第 这是详细的语法: -- ThriftPath | Description -- -- | -- -- $ | 根对象,每个路径都必须以它开头。 -- .`fieldname` | 获取结构体中的 fieldname 子字段。例如,$. Fielda.ChildrenB。如果 fieldname 是路径终点且改字段为复杂类型(map/list/struct),则表示获取该字段下的所有子字- 段。 -- [`index`,`index`...] | 获取 List 中的特定 index 的元素。索引必须是整数。例如:$. FieldList[1,3,4]。注意:可以编写超出实际列表大小的索引,但是实际无用。 -- {"`key`","`key`"...} | 获取字符串类型键的映射中的特定 key 的值。例如:$. StrMap{""abcd"",""1234""} -- {`id`,`id`...} | 获取整数类型键的映射中具有特定 id 的子字段。例如,$.IntMap{1,2} -- \* | 获取所有字段/元素,即:$. StrMap{*} 表示获取映射 Root.StrMap 所有元素;$.List[*] 表示或者 List 中的所有元素。 -- +ThriftPath | Description +-- | -- +$ | 根对象,每个路径都必须以它开头。 +.`fieldname` | 获取结构体中的 fieldname 子字段。例如,$. Fielda.ChildrenB。如果 fieldname 是路径终点且改字段为复杂类型(map/list/struct),则表示获取该字段下的所有子字段。 +[`index`,`index`...] | 获取 List 中的特定 index 的元素。索引必须是整数。例如:$. FieldList[1,3,4]。注意:可以编写超出实际列表大小的索引,但是实际无用。 +{"`key`","`key`"...} | 获取字符串类型键的映射中的特定 key 的值。例如:$. StrMap{""abcd"",""1234""} +{`id`,`id`...} | 获取整数类型键的映射中具有特定 id 的子字段。例如,$.IntMap{1,2} +\* | 获取所有字段/元素,即:$. StrMap{*} 表示获取映射 Root.StrMap 所有元素;$.List[*] 表示或者 List 中的所有元素。 #### **类型描述符** From ff7e70ea5ed6c57c38d60a13f4e7879f08b7ce15 Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Sun, 29 Sep 2024 16:49:14 +0800 Subject: [PATCH 08/10] update image --- .../Tutorials/advanced-feature/fieldmask.md | 4 ++-- .../Tutorials/advanced-feature/fieldmask.md | 4 ++-- .../U6zybX2jEoNAVnxEMnil3JT7g4d.png | Bin 60030 -> 0 bytes ...zlBdoFcPcxGbCwlSqpmgcb.png => fieldmask.png} | Bin 4 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png rename static/img/docs/kitex/Tutorials/advanced-feature/{IQptbzlBdoFcPcxGbCwlSqpmgcb.png => fieldmask.png} (100%) diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md index 6e66287767..c98bbfcba2 100644 --- a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -8,10 +8,10 @@ description: "" ## **What is thrift FieldMask**? -![](static/img/docsstatic/img/docs/kitex/Tutorials/advanced-feature/IQptbzlBdoFcPcxGbCwlSqpmgcb.png) - FieldMask is inspired by [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) and used to indicate the data that users care about, and filter out useless data, during a RPC call, in order to reduce network package size and accelerate serializing/deserializing process. This technology has been widely used among Protobuf [services](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518). +![fieldmask](static/img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) + ## **How to construct a FieldMask**? To construct a fieldmask, you need two things: diff --git a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md index b31a5c18a7..f430a0dcc6 100644 --- a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -8,10 +8,10 @@ description: "" ## 什么是 Thrift FieldMask? -![](static/img/docsstatic/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png) - FieldMask 是受到 [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) 的启发,用于在 RPC 调用时**指示用户关心的数据并过滤掉无用的数据**的一种手段。该技术不但可以在 RPC 服务中实现**特定字段的屏蔽**,同时还可以**减少消息传输开销**以提升服务性能,目前已广泛应用于 Protobuf[服务](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518)中。 +![fieldmask](static/img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) + 对于 thrift RPC 服务来说,有如下潜在使用场景: - 下发字段管控。如 隐私合规,请求打包 等业务 diff --git a/static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png b/static/img/docs/kitex/Tutorials/advanced-feature/U6zybX2jEoNAVnxEMnil3JT7g4d.png deleted file mode 100644 index 8fde754b69d0ac98ac718f57010a116b4be6aaa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60030 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 Date: Sun, 29 Sep 2024 23:32:12 +0800 Subject: [PATCH 09/10] Update fieldmask.md --- content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md index f430a0dcc6..14a02b13bb 100644 --- a/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/zh/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -10,7 +10,7 @@ description: "" FieldMask 是受到 [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) 的启发,用于在 RPC 调用时**指示用户关心的数据并过滤掉无用的数据**的一种手段。该技术不但可以在 RPC 服务中实现**特定字段的屏蔽**,同时还可以**减少消息传输开销**以提升服务性能,目前已广泛应用于 Protobuf[服务](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518)中。 -![fieldmask](static/img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) +![fieldmask](/img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) 对于 thrift RPC 服务来说,有如下潜在使用场景: From 8218a3fb1d91d9deea5d650537e17f882215fb2b Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Sun, 29 Sep 2024 23:34:21 +0800 Subject: [PATCH 10/10] Update fieldmask.md --- content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md index c98bbfcba2..5a8eeee330 100644 --- a/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md +++ b/content/en/docs/kitex/Tutorials/advanced-feature/fieldmask.md @@ -10,7 +10,7 @@ description: "" FieldMask is inspired by [Protobuf](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask) and used to indicate the data that users care about, and filter out useless data, during a RPC call, in order to reduce network package size and accelerate serializing/deserializing process. This technology has been widely used among Protobuf [services](https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518). -![fieldmask](static/img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) +![fieldmask](img/docs/kitex/Tutorials/advanced-feature/fieldmask.png) ## **How to construct a FieldMask**?